以前学习过一段时间EJB,但由于其中涵盖的知识面比较广,且结构较为复杂,所以先转学习相对较为简单的struts。这回的新项目中用到了EJB,所以决定重新学习EJB。
构建一个EJB组件的步骤如下:
1.编写组件接口(EJBObject远程接口,EJBLocalObject本地接口),Home接口,Enterprise Bean等。
2.编写部署描述文件。ejb-jar.xml等。
3.利用Jar工具将以上打包为Ejb-jar文件。如:jar cvfm HelloWorld.jar *
4.发布EJB。
EJB对象:
1.由容器生成的。
2.实现了远程接口或本地接口。
3.客户端通过EJB对象委托调用enterpriseBean的方法。
远程接口:
1.继承javax.ejb.EJBObject。
2.定义并公开enterpriseBean的方法。
3.客户端通过该接口与容器生成的EJB对象交互。
4.其中定义的方法都必须抛出java.rmi.RemoteException异常。这是必须的,因为它继了EJBObject,而EJBObject实现了Remote接口。
5.客户端通过远程接口调用enterpriseBean的效率是很底的。原因如下:
(1)首先客户端需调用本地Stub。
(2)Stub将参数格式化为适合网络传输的格式。
(3)Stub与服务器端的Skeleton连接。
(4)Skeleton解释被Stub格式化了的参数。
(5)Skeleton调用EJB对象。
(6)EJB对象连接缓冲,事务处理,安全检查,生命周期服务等工作。
(7)调用enterpriseBean的业务方法。当enterpriseBean完成任务,返回Home时,将重得执行以上步骤。
本地接口:
1.继承javax.ejb.EJBLocalObject。
2.本地用户可以通过本地接口高性能的访问EJB对象。(免去执行远程接口中的第5项工作)
Home接口:
1.继承javax.ejb.EJBHome。
2.用来创建EJB对象。
3.其中有个Create方法返回容器实现了远程接口的EJB对象。并抛出两个异常。java.Rmi.RemoteException和javax.ejb.CreateException。
本地Home接口:
1.继承javax.ejb.EJBLocalHome。
2.同本地接口相同,它是本地客户端可以使用的高性能Home接口。
3.其中有个Create方法返回容器实现了本地接口的EJB对象。抛出javax.ejb.CreateException异常。