- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Tommy讲EJB 3
EJB 3.0 Tutorial
1.EJB2.0存在的问题
1)开发的复杂性,使用一个ejb2.0开发一个ejb组件,需要编写很多接口和类,
并且每个接口和类都要继承或则实现ejb2.0中定义的接口;
2)部署的复杂性,使用xml文集对开发的ejb组件进行描述,在编译器无法检查描述信息是否有错误;
3)调试和测试的复杂,使用ejb2.0开发的ejb组件必须运行在容器中,离开ejb容器这些组件无法运行,
所以每次修改代码之后,都需要重新编译部署后再去测试,增加了测试工作量;
总 之:开发难,部署烦,调试不简单;
解决方案:为了改进上面的问题,EJB3.0就此提出.....
2.EJB3.0在EJB2.0基础上所做的改进:
(1).EJB3.0 API的简化
1)没有home/object接口;
在EJB3.0中所有的业务逻辑方法的定义都放在业务接口中;业务接口可以是远程的也可以是本地的;
如果是一个远程业务接口,在这个接口中定义了业务逻辑方法,这些方法不允许抛出
javax.rmi.RemoteException.但是可以抛出应用级别的异常;
2)没有component接口;
在EJB3.0中bean类不需要实现组件接口,但是需要实现业务接口;
在EJB2.0中bean生命周期的回调方法定义在组件接口中,但是EJB3.0中bean不实现组件接口,
那如何定义生命周期回调方法?
1.在bean类中定义生命周期回调方法,并且用特殊的annotation进行标注;
2.在一个单独的类中定义生命周期回调方法,需要用特殊的annotation进行标注,然后在bean中引用;
3)使用java annotation作为描述ejb组件的方式;
优势:描述过程简单,在编译期就可以检查信息是否有问题,在EJB3.0中也可以使用部署描述文件来描述
ejb组件,如果一个ejb组件既使用annotation进行描述,又使用部署描述文件进行描述,
则部署描述文件中描述的信息优先;
4)提供另外两种获取资源的方式;
在EJB2.0:通过InitialContext的lookup方法来获取资源;
在EJB3.0:通过EJBContext的lookup方法;通过依赖注入方式;
3.在EJB3.0中开发一个无状态的Session Bean
1)提供远程/本地业务接口,并且在业务接口中声明商业方法;
2)提供一个bean类,实现远程/本地业务接口,实现在接口中定义的商业方法;
3)在bean类中使用@Stateless进行标注,并且使用@Remote指定远程业务接口,使用@Local指定本地业务接口;
4)如果需要定义生命周期回调方法,可以在bean类中定义.
4.在EJB3.0中开发一个有状态的Session Bean
1)提供远程/本地业务接口,并且在业务接口中声明商业方法;
2)提供一个bean类,实现远程/本地业务接口,实现在接口中定义的商业方法;
3)在bean类中使用@Stateful进行标注,并且使用@Remote指定远程业务接口,使用@Local指定本地
业务接口;
4)如果需要定义生命周期回调方法,可以在bean类中定义.
@PostConstruct=======ejb2.0中的ejbCreate()
@ProPassivate========ejb2.0中的ejbPassivate()
@PostActive==========ejb2.0中的ejbActivate()
@PreDestroy==========ejb2.0中的ejbRemove()
5.在EJB3.0中开发一个消息驱动Bean
1)提供一个bean类,实现javax.jms.MessageListener接口;
2)使用@MessageDriven进行标注,并且指定其他相关的信息;
6.
无状态session bean的生命周期:
1)newInstance;
2)如果有声明依赖注入,则进行依赖注入;
3)如果有声明PostConstruct,则调用这个方法;
4)bean被回收之前,如果有声明PreDestroy方法,则调用这个方法;
有状态session bean的生命周期:
1)newInstance;
2)依赖注入(可选);
3)PostConstruct(可选);
4)PrePassivate(可选);
5)PostActivate(可选);
6)PreDestroy(可选);
7.注意:
annotation的作用跟ejb-jar.xml是相同的;但是方式是显然不同的;
meta-annotation:标注annotation的annotation,标注指定标注的是类还是方法;
@Retention(RetentionPolicy.CLASS):标注会出现在.
原创力文档


文档评论(0)