EJB3.0构件技术研究

Enterprise JavaBeans(EJB)是一个用于分布式业务应用的标准服务器端组件模型。采用EJB架构编写的应用是可伸的、事务性的、多用户安全的。可以一次编写这些应用,然后部署在任何支持EJB规范的服务器平台,如JBoss,WebLogic等。

由于 EJB 2.0 程序要求您扩展特定的类、提供多个接口并编写部署描述符,因此它们被视为“重载”的 Java 对象,而不再是简单的对象,而且还需要J2EE容器来运行和测试它们。由于EJB 2.0的复杂性,在Spring和Hibernate等轻量级框架出现后,大量的用户转向了轻量级J2EE开发框架,为了降低EJB开发的复杂性,改善EJB的结构,EJB 3.0规范应运而生,EJB技术也因此受到更多开发者的青睐。对于 Java EE 5 中的所有技术增强而言,Enterprise JavaBean (EJB) 3.0 是最为显著的,已对它的外观进行了很大的更改[1]

EJB 3.0 的简化包括:

(1)EJB 组件不再要求主接口。另外,不再需要 EJB 组件提供不同的接口或扩展任何特定于 EJB 的类。

(2)J2SE 5.0 标注现在是实现 EJB 3.0 组件的一个主要辅助方法。通过指定特殊的标注,开发人员可以创建 EJB 组件的 POJO 类,并将其作为 XML 的备选方案。

(3)EJB 3.0 引入了业务接口概念,而非单独的远程和本地接口。

EJB调用过程

图1从客户视图描述了业务方法调用,EJB 3.0消除了原有的Home与对象接口从而使EJB组件的开发更简单。EJB 3.0会话Bean将所有业务方法都放在业务接口中,依据客户类型的不同来提供远程业务接口或本地接口,或者同时提供两种类型的接口。


图1 EJB内部运转过程

步骤1是指EJB应用的客户端使用远程或者本地业务接口调用EJB构件的业务方法。客户端从JNDI命名和注册器服务中获取业务接口引用。

在调用业务方法期间,需要使用到EJB容器服务。用于包裹远程或者本地业务接口的、由容器生成的实现类会负责调用EJB容器服务。在调用EJB Bean类中的业务方法前,容器生成的包裹类会调用容器专有API来获得中间件服务。同样,在调用EJB类中的业务方法后,容器生成的包裹类也会调用容器专有API来获取中间件服务。整个过程发生在步骤2、3、4、5中,最后调用过程结束,返回。

EJB的分类

EJB规范中定义了三种类型的企业Bean,分别是会话Bean、实体Bean和消息驱动Bean。它们分别代表了三种不同类型的事务逻辑的抽象。

(1)会话Bean(Session Bean)

Session Bean实现了运行于服务器上的业务逻辑。一个会话Bean对象可以看成运行在服务器上的客户端程序的扩展。Session Bean的一个显著特征是它依附于客户端,产生和销毁由客户端控制,只会服务一个client端的请求,但Session Bean的状态不会被永久保存,即不具备持久性。另外,Session Bean不表示数据库中的共享数据,虽然它可以访问和更新这些数据。

Session Bean有两种应用方式无状态Session Bean和有状态Session Bean。

无状态Session Bean,无状态Session Bean的实现类可以由多个客户端共享使用,不保存客户端状态。

有状态Session Bean,和无状态Session Bean不同,每个客户端使用不同的Bean实现类,Bean实现类可以保存每个客户端的状态。

(2)实体Bean(Entity Bean)

实体Bean是含有持久化状态的分布式对象。Entity Bean用在处理客户端请求大量、并发的情况,可能会同时被多个client端进行存取,它在实现业务逻辑的同时,作为数据库的一个缓冲。在服务量大的情况下,减轻数据库的负担,提高业务处理能力。

这个持久化状态的管理既可以交给Bean自身(Bean-Managed Persistence,BMP),也可以托付于外部机制(Container-Managed Persistence,CMP)。

(3)消息驱动Bean

消息驱动Bean是支持异步行为的分布式对象。它们并不对请求进行当即响应。比方说,某网站用户点击“请通知我更新信息”按钮,将会触发某个MDB将这名用户加入到数据库的希望获得更新信息用户列表中。这个动作就是一个异步的消息驱动过程,因为用户不必等待当时会返回某个结果。MDB的消息源来自Java消息服务(JMS)提供的消息队列或消息主题。自EJB 2.0规范起,JMS被加入进来以允许在容器内部实施事件驱动处理。与其他EJB不同,MDB不存在一个用户视图(如需要用户引用的远程接口),用户也不能通过资源定位获得一个MDB实例。MDB只在后台监听消息源并实施自动处理。

消息驱动Bean(MDB)的基本思想是采用非标准服务通信,即采用消息驱动而不是方法调用。MDB的代码编写简单,主要工作是部署描述文件。MDB起到的功能是处理消息队列,并告诉EJB服务器哪个消息队列分配给某个Bean,以达到通过消息进行通信的目的。

总结

EJB3.0较之前的旧版本在易用性上有了很大的提升,尽管在国内Spring的应用似乎更广泛一点,但是EJB3.0必将大有作为。

参考文献:

[1]   Kehe, Wu., Zhuo W, Design and Implementation of the Monitoring System for EJB Applications Based on Interceptors[C]. IEEE, 2010

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

day walker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值