EJB2.X

来源:互联网 发布:如何在dos下运行java 编辑:程序博客网 时间:2024/04/30 06:36

EJB2.X 服务端

1、网络化编程,并发处理,事务控制,MQ消息队列;

2、Client端是由存根Stub进行管理,Service端由框架Skeleton对象进行管理,两者通讯的语言是IDL语言,智能代理就相当于目录服务,它就像一个数据字典,登记注册需要在网络上使用的各个公用对象,当客户请求时则负责查找并激活对象;

3、J2EE最核心的部分是WEB容器和EJB容器,WEB容器运行JSP和Servlet网页呈现脚本而EJB容器运行的是企业EJB组件;

4、EJB有两种BEAN,一种是会话Bean,另一种是实体Bean,会话Bean非常类似于CORBA协议,实体Bean则相当于将会话Bean实例化并存入数据库中,这样对数据库的处理就有了2种方式:①使用JDBC访问数据库并使用SQL语句检索数据然后用JSP展现;②使用操作实体Bean的方法进行处理;

5、如何编写一个供远程客户调用EJB容器上的会话Bean呢?

         A.服务器端首先编写处理具体业务逻辑的会话Bean,这是真正处理业务的代码也是EJB的核心,这个自定义类必须实现SessionBean接口,需要在这个类中定义供远程客户端访问的方法,该方法必须是public的;

         B.编写开放给远程用户的接口,具体的处理业务逻辑的SessionBean实现类也要实现该接口

         C.编写EJBHome接口,当远程客户端调用EJB时,EJB容器要为EJBHome接口创建一个实例化的EJBObject即EJB容器自动定义的一个类,该类实现了EJBHome接口,实现EJBHome接口的对象,调用Create方法来创建EJB的实例化对象并将这个对象传递给EJBRemote接口的引用并将最终的通讯任务交给Skeleton,这里的EJBHome接口充当工厂模式的Factory角色;

         D.配置XML文件,指明三个Class文件之间的关系,即SessionBean、自定义远程接口、EJBHome,所有在J2EE容器上部署和配置的J2EE组件都需要在JNDI树上配置JNDI名称

6、如果创建的是EJB项目,则在项目目录下只会有src和class目录,另外在src和class目录下只会存在META-INF目录,src下存放那3个java文件,META-INF则存放EJB的XML部署配置文件,class则存放那3个class文件;

7、定义远程接口,该接口定义了客户端能够调用的方法有哪些?该接口extends EJBObject,注意:eclipse编译器JDK版本 <= J2EE容器内置的JDK版本;

8、定义Home接口,自定义一个接口,该接口继承EJBHome,继承后需要重写create方法,该方法返回一个EJBObject类型的对象,即就是自定义的远程接口;

9、编写SessionBean,上面都是自定义接口,这里是自定义类,上面都是继承类,这里是实现接口,这里需要实现SessionBean接口
         ejbCreate:EJB被创建时执行的方法

         ejbActivate:EJB被远程调用时执行方法

         ejbPassivate:EJB被钝化时执行方法

         ejbRemove:EJB被移除时执行方法

         setSessionContext:

         剩下的就是远程接口中定义的方法

10、EJB部署描述文件

<!DOCTYPE ejb-jar PUBLIC '-//SunMicrosystems, Inc.//DTD Enterprise JavaBeans 2.0//EN''http://java.sun.com/dtd/ejb-jar_2_0.dtd'>

<!-- Generated XML! -->

<ejb-jar>

 <enterprise-beans>

   <!—表明这个EJB是SessionBean -->

   <session>

   <--   这个EJB在容器里的名字,即JNDI名,登记在目录树中的名字,而且客户端程序在远程查找EJB对象的时候也要通过这个名字来查找    -->

   <ejb-name>sayHelloBean</ejb-name>

   <!—Home 接口对应着哪个class文件 -->   

   <home>com.wang.Ejb.sayHelloHome</home>            

   <!—Remote接口对应着哪个class文件 -->

   <remote>com.wang.Ejb.sayHelloRemote</remote>

   <!—真正的Bean的实现类编译后的class文件 -->         

   <ejb-class>com.wang.Ejb.sayHelloBean</ejb-class>

   <!—表明这个EJB是不计录Session会话的,有助于提高效率 -->

   <session-type>Stateless</session-type>

   <!—表明由EJB容器控制事务处理-->

   <transaction-type>Container</transaction-type>                    

   </session>

 </enterprise-beans>

 <assembly-descriptor>

   <container-transaction>

     <method>

       <ejb-name>sayHelloBean</ejb-name>

       <method-name>*</method-name>

     </method>

     <trans-attribute>Required</trans-attribute>

   </container-transaction>

 </assembly-descriptor>

</ejb-jar>


EJB2.X客户端

1、  需要的资料:EJB服务器IP地址、t3协议的服务端口、JNDI名称、EJB服务器的远程接口EJBObject和JEBHome接口文件的class文件;

2、

InitialContext ic = new InitialContext();

Object timerHomeObj =ic.lookup("java:comp/env/ejb/TimerController");

TimerControllerHome timerHome =(TimerControllerHome)
PortableRemoteObject.narrow(timerHomeObj, TimerControllerHome.class);

TimerController timerCreator =timerHome.create();

timerCreator.setTimer();


0 0
原创粉丝点击