J2EE学习笔记四:开发第一个Session Bean

一、基础知识

要开发一个Session Bean,我们需要创建两个Java接口和一个Java类,这些接口和类分别叫做:home interfacebean interfacebean class,如下图所示:

Home Interface:为了让session bean的客户端能够获得一个它的bean接口的引用,我们必须要使用beanHome Interface。一个EJBHome Interface必须继承EJBHome接口,这个接口来自于javax.ejb包。

Bean Interfacesession bean通过一个接口来向客户端暴露它的business method,这个接口就是Bean InterfaceBean Interface必须继承EJBObject接口,它也来自于javax.ejb包。

Bean Classsession bean的所有商业逻辑都是在Bean Class中实现的,所有的Bean Class都实现了SessionBean接口,它也来自于javax.ejb包。

       Home Stub & Bean Stub:上图中的那些stub被客户端用来调用位于服务器端的EJB中的方法。Stub通过RMI来调用服务器端它们对应的接口。

二、开发一个简单的Session Bean

按照上面所说的,首先创建1Home Interface1Bean Interface1Bean Class,它们的代码如下所示:

SimpleSessionHome.javaHome Interface

package beans;

import java.rmi.RemoteException;

import javax.ejb.EJBHome;

import javax.ejb.CreateException;

/**

 * @author CMTobby 2007 - 11 - 11

 * 这个类是一个Home Interface,它的主要作用是让客户端获得一个EJBBean  

   interface的引用<br>

 * 所有的Home Interface必须实现javax.ejb.EJBHome接口

 */

public interface SimpleSessionHome extends EJBHome {

    //The create() method for the SimpleSession bean

    public SimpleSession create() throws CreateException, RemoteException;

}

SimpleSession.javaBean Interface

package beans;

 

import java.rmi.RemoteException;

import javax.ejb.EJBObject;

/**

 * @author CMTobby 2007 - 11 - 11 <br>

 * 这时一个Bean Interface,它的主要作用是向客户端暴露EJBBusiness Method<br>

 * 所有的Bean Interface都必须实现javax.ejb.EJBObject接口

 */

public interface SimpleSession extends EJBObject{

    //The public business method on the SimpleSession bean

    public String getEchoString(String clientString) throws RemoteException;

}

 

SimpleSessionBean.javaBean Class

package beans;

 

import java.rmi.RemoteException;

 

import javax.ejb.EJBException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

 

/**

 * @author CMTobby 2007 - 11 - 11 <br>

 * 这是一个Bean Class它负责具体实现所有的Bussiness Mehotd.<br>

 * 所有的Bean Class都必须实现javax.ejb.SessionBean接口

 */

public class SimpleSessionBean implements SessionBean {

    public void ejbActivate() throws EJBException, RemoteException {

    }

    public void ejbPassivate() throws EJBException, RemoteException {

    }

    public void ejbRemove() throws EJBException, RemoteException {

    }

    public void ejbCreate() {}

    public void setSessionContext(SessionContext arg0) throws EJBException,

           RemoteException {

    }

    /**

     * EJB中的Bussiness Method。在远程接口中必须也有这个方法。<br>

     * @param clientString 来自于客户端的信息

     * @return

     */

    public String getEchoString(String clientString) {

    return clientString + " - from session bean";

    }

}

二、部署EJB

我用的Application ServerSun免费提供的PE(Platform Edition),为了将我们上面所写的一个简单的EJB部署到Server上需按照如下步骤(我用的IDEEclipse)

1.  从程序中启动Application Server,如下图所示:

2.  仍然是在上图中,点击Deploytool菜单,打开部署工具,界面如下所示:

3.  在上图中,点击【File---New---Application】,出现如下界面:

       这里将会创建一个EAR文件,EAREnterprise Application Resource的缩写,它包含了一个J2EE应用的所有组件,类似于一个War文件包。在上图中我们要指定EAR文件名字和路径,我取的名字是SimpleSessionApp.ear。此时DeployTool将会在指定的路径为我们生成一个ear文件,它里面的内容基本是空的,只有几个配置文件。

    4.在步骤2中的菜单中,选择【File---New---Enterprise Bean】,点击【next】来到如下的界面:

       在上图中我们指定了这个Bean Jar的名字为SimpleSessionJar,同时也指定了它存放的位置:存放在我们刚才新建的ear文件中,如上图中红色矩形所示。

      5.上图中点击Edit Contents按钮,可以选择要放入Jar中的class文件,如下图所示:

   

       如上图所示,我选择了前面3Java文件编译之后产生的class文件,然后点击add按钮将它们加入到bean jar中,最后点击OK按钮。这里要注意,在选择class时,上面的Starting Directory是支持手写的,它会默认显示为ear文件所在的目录。

       6.上图中点击OK,再点击Next,来到如下界面:

       Enterprise Bean Class下拉列表中选择beans.SimpleSessionBean,从Enterprise Bean Type下拉表中选择Stateless Bean,从Remote Home Interface下拉列表中选择beans.SimpleSessionHome,从Remote Interface中选择beans.SimpleSessionEnterprise Bean Name是我们想让它在EJB工具中显示的名称,我取名为SimpleSessionEjb

       7.现在一路狂奔,点击Next,直到最后的Finish

8.为EJB指定对应的JNDI名,以便客户端得到它的引用。点击主界面上的Sun-specific settings按钮,进入如下界面:

在上图中红色矩形框所示处输入我们命名的JNDI名称,这里我们的是:ejb/beans.SimpleSession。点击Close,然后保存。

       9.从步骤2所示的图中选择Tool菜单下的Verify J2EE Compliance功能,对应用进行校验,这里就不多说了。

       10.选择Tool菜单下的Deploy,出现如下界面:

         输入用户名、密码,选中Return Client Jar,点击OK即可。这一步会在我们指定的目录下生成一个Jar文件,这个Jar文件的命名规则是:应用名+Client.jar,如本例中就是SimpleSessionAppClient.jar

    现在,我们的EJB就已经部署成功了,并可供客户端调用。

三、测试部署是否成功

为了测试上面的部署是否成功,可以写一个程序来进行测试,如下所示:

SimpleSessionClient.java

package client;

 

import javax.naming.InitialContext;

import javax.rmi.PortableRemoteObject;

 

import beans.SimpleSession;

import beans.SimpleSessionHome;

 

/**

 * @author CMTobby 2007 - 11 - 11

 */

public class SimpleSessionClient {

    public static void main(String[] args) {

       try {

           InitialContext jndiContext = new InitialContext();

           // Get a reference to the SimpleSession JNDI entry

           Object ref = jndiContext.lookup("ejb/beans.SimpleSession");

           // Get a reference from this to the Bean's Home interface

           SimpleSessionHome home = (SimpleSessionHome) PortableRemoteObject

                  .narrow(ref, SimpleSessionHome.class);

           // Create a SimpleSession object from the Home interface

           SimpleSession simpleSession = home.create();

           // Loop through the words

           for (int i = 0; i < args.length; i++) {

              String returnedString = simpleSession.getEchoString(args[i]);

              System.out.println("sent string: " + args[i]

                     + ", received string: " + returnedString);

           }

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

}

将之前部署过程中产生的SimpleSessionAppClient.jarj2ee.jarappserv-rt.jar加入到classpath中,然后指定参数为now is the time,运行成功,输入如下:

sent string: now, received string: now - from session bean

sent string: is, received string: is - from session bean

sent string: the, received string: the - from session bean

sent string: time, received string: time - from session bean

    这样,我们就成功完成了我们第一个Session Bean的开发。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值