EJB2学习笔记

EJB(Enterprise JavaBean)企业级JavaBean,J2EE规范把EJB分为三类:会话Bean(SessionBean),实体Bean(EntityBean),消息驱动Bean(MessageDrivingBean)。

    我们以最简单的会话Bean来认识下EJB。

    会话Bean分为:无状态会话Bean和有状态的会话Bean,用通俗的话理解就是:不记录状态的Bean对所有访问用户都进行相同操作的Bean叫做无状态,而要记录下操作状态一个用户一个bean的叫有状态。

    无状态Bean:

        服务器端:一个简单的操作也要求我们写两个接口一个类,外加一个配置XML。下面我们来看下:

    接口一:

       public interface HomeBean extends EJBHome{
             public RemoteBean create() throws CreateException,RemoteException;
       }

    该接口继承于EJBHome,并且必须要实现一个create方法,注意该方法不带参数,并抛出CreateException,RemoteException。

    接口二:

      public interface RemoteBean extends EJBObject{
             public String result(String name) throws RemoteException;
       }

     该接口继承于EJBObject,该接口中的方法为我们自己的业务方法,抛出RemoteException。

    类:

      public class SessionBean implements javax.ejb.SessionBean {


private SessionContext context;

 public SessionBean() {
  // TODO Auto-generated constructor stub
 }
 
 public void ejbCreate() throws CreateException {
  // TODO Add ejbCreate method implementation
  }

 @Override
 public void ejbActivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub

 }

 @Override
 public void ejbPassivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub

 }

 @Override
 public void ejbRemove() throws EJBException, RemoteException {
  // TODO Auto-generated method stub

 }

public String result(String name) throws RemoteException{
 String s = name+"爱上了ZM";
 return s;

 

    注意该类必须写上public void ejbCreate() throws CreateException 方法,最后一个方法为接口二中定义的业务方法的实现。

下面就是配置XML,该文件写在META-INF下,文件名必须为ejb-jar.xml:

<ejb-jar>
  <enterprise-beans>
    <session>
     <ejb-name>test52showlove</ejb-name>                       //取的别名
     <home>com.lei.bean.HomeBean</home>                        //接口一路径
     <remote>com.lei.bean.RemoteBean</remote>                  //接口二路径
     <ejb-class>com.lei.bean.SessionBean</ejb-class>           //类路径
     <session-type>Stateless</session-type>                    //Stateless表示无状态
     <transaction-type>Container</transaction-type>
    </session>

</ejb-jar>

写完了以上内容后我们需要把该工程打包成JAR文件以供我们的客户端工程导入,具体步骤就不详谈了

 

      客户端:

          客户端除了要导入服务器端JAR包外还需要导入jbossall-client.jar。下面是客户端的一个具体实现。

public class TestMain {
  public static void main(String[] args) throws Exception{
    //配置上下文环境
  Properties p = new Properties();
  p.put(Context.INITIAL_CONTEXT_FACTORY,
    "org.jnp.interfaces.NamingContextFactory");
  p.put(Context.URL_PKG_PREFIXES, "jboss.nameing:org.jnp.interfaces");
  p.put(Context.PROVIDER_URL, "127.0.0.1:1099");

  // 根据Properties对象对上下文环境进行设置
  Context jndiContext = new InitialContext(p);

  // 根据EJB的名称寻找服务

   Object ref = jndiContext.lookup("test52showlove");
     
   HomeBean home =(HomeBean)PortableRemoteObject.narrow(ref,
     HomeBean.class);
  
   RemoteBean remote = home.create();  
   String result = remote.result("春哥");
   System.out.println(result);
   remote.remove();
 }

 

有状态会话Bean其实和无状态的差不多,只不过在接口一中定义上了一个有参数的create方法,比如加上一个参数int age,然后在类中设置该属性int age,并多写一个有参数的ejbCreate方法,参数就为int age,并写上this.age=age。在配置上只需要把无状态Stateless换成有状态的Stateful就好了```

你可能感兴趣的:(bean,xml,jboss,ejb)