以下是基于J2EE对EJB的全面了解。我觉得边肖挺好的。我现在就分享给你,给你一个参考。来和边肖一起看看吧。
1、什么是EJB?
EJB(Enterprise Java Beans),JavaEE中的商业应用组件技术,是JavaEE的三大组件(Servlet、JSP、EJB)之一。EJB为客户端使用远程分布式对象提供了一个框架,大大简化了企业应用的开发,具有良好的可扩展性。EJB结构是一种基于组件的分布式计算结构,是分布式应用系统中的一个组件。
EJB是Java服务器端服务框架的规范,定义了服务器端组件系统的技术规范。该规范可以提供一个标准的、分布式的和面向对象的体系结构。它将组件开发人员和用户从复杂的系统级底层功能实现中屏蔽出来,使开发人员能够专注于业务逻辑的实现,其中一部分由EJB容器处理。EJB可以根据应用程序的增长进行扩展。EJB服务器提供负载平衡功能和资源访问控制。
2、EJB容器及组件间通信
EJB容器为EJB组件提供了运行环境。EJB容器管理EJB的方式与Web容器管理Servlet的方式相同,EJB必须在EJB容器中运行。EJB容器主要管理EJB的持久性、生命周期管理、安全管理、事务管理、远程连接、并发处理、集群和负载均衡。容器管理EJB组件的实例,以便EJB组件可以获得最大的效率和内存利用率。容器可以激活和停用EJB组件,管理实例池等。容器负责管理分布式事务处理的复杂问题,管理远程连接的底层通信问题,为EJB组件的开发者和客户隐藏通信问题。因此,EJB组件开发人员可以专注于封装业务逻辑,容器负责所有其他事务。通过ejbContent、JNDJ、回调函数等机制与容器进行交互。
JBoss是管理EJB的容器和服务器,支持EJB1.1、EJB2.0和EJB3的规范。它通常与Tomcat或Jetty结合使用。
请参见下图1(EJB集装箱工作示意图):
图一:EJB容器工作原理
EJB组件是一个分布式对象,当它被实例化时,可以与其他地址空间中的应用程序通信。EJB实例封装在框架对象中,通过存根对象与客户端通信。存根不包含业务逻辑,但实现业务接口。每当存根业务接口上的业务方法被调用时,存根都会向框架发送一条网络消息,告诉它调用了哪些方法。调用框架中EJB实例的相应方法,将EJB实例返回的结果发送给存根,存根将这些结果返回给相应的应用程序。分布式对象之间复杂的通信过程被两个中间对象屏蔽,存根和帧。框架由容器实现,而存根由开发工具自动生成,两者都不需要写代码。请参见图2(EJB组件通信示意图):
图二:EJB组件间通信原理
3、EJB分类
EJB组件可以分为会话bean和消息驱动bean。会话Bean封装了业务逻辑。客户端可以调用会话Bean的方法,通过本地、远程、Web服务访问部署在服务器上的应用,从而调用其他Bean的方法。会话bean不是持久的,也就是说,它的数据不存储在数据库中。有三种会话bean:有状态会话bean、无状态会话bean和单独会话bean。消息驱动bean通常用作特定类型消息的监听器,这样JavaEE可以处理异步消息,而客户端不会通过接口访问消息驱动bean。
下面将依次具体介绍有状态会话Bean、无状态会话Bean、一体式会话Bean和消息驱动会话Bean。
4、无状态会话Bean
无状态会话Bean只为客户端提供业务逻辑,不为客户端保留会话状态。当客户端调用无状态会话Bean的方法时,相应会话Bean的属性将描述调用状态,但它只会在方法调用期间保持此状态。当方法调用结束时,状态被清除。
无状态会话Bean的生命周期由容器控制。当EJB容器收到客户端对无状态会话Bean的请求时,如果EJB不存在,容器会创建一个Bean的实例,然后将所需的资源注入到组件中,然后容器回调PostConstruct方法,组件就创建好了。此时,Bean从“不存在”状态变为“存在”状态。在客户端调用结束时,容器回调PreDestroy方法,Bean将被销毁。此时,Bean从“现有”状态变为“不存在”状态。请看下面的图3(无状态会话Bean的生命周期):
图三:无状态会话Bean的生命周期
5、有状态会话Bean
有状态会话Bean为用户保留一次会话状态,不能像无状态会话Bean一样放入组件池供不同用户共享。对于有状态会话Bean,每当客户端发送请求时,容器都会创建一个与客户端对应的实例,一个客户端对应一个实例。在生存期内,有状态会话Bean保留用户的信息,一旦会话结束,有状态会话Bean的生命周期也就结束了。
有状态会话Bean有三种活动状态:不存在、活动和不活动。当有状态会话Bean处于活动状态一段时间后,如果仍然没有收到来自外部客户端的请求,为了节省系统资源,容器会将有状态会话Bean中的状态信息序列化到临时存储空间中,并从内存中删除有状态会话Bean。这个过程叫做“钝化”。在钝化之前,容器回调预钝化方法。当容器收到对已被钝化的有状态会话Bean的请求时,它将重新初始化有状态会话Bean的实例,并从临时空间中取出状态信息以使其再次活动。这个过程叫做“激活”。激活后,容器回调ProActivate方法。当有状态会话Bean被钝化一段时间后,容器将完全清除实例并回调PreDestroy方法。请看下面的图4(有状态会话Bean的生命周期):
图四:有状态会话Bean的生命周期
6、单间会话Bean
单件会话Bean为每个应用程序实例化一次,并且它始终存在于应用程序的生命周期中。单件会话Bean是为特定场景设计的,客户端可以以共享和并发模式访问这个唯一的EJB实例。
单件会话Bean非常类似于无状态会话Bean。不同的是,单件会话Bean在应用程序中只有一个实例,而无状态会话Bean可以有多个实例,每个实例都放在组件池中供用户共享。
像无状态会话bean一样,单件会话bean从不被钝化。它的生命周期只包含“不存在”和“存在”两种形式。请看下面的图5(单件会话Bean的生命周期):
图五:单件会话Bean的生命周期
7、消息驱动Bean
消息驱动Bean是为处理基于消息的请求而设计的组件。消息驱动Bean集成了Java消息服务(JMS)和企业Bean的功能。客户端不能直接调用该方法来获取其引用,而只能由系统消息启动。
EJB容器通常创建消息驱动Bean的组件池。与无状态会话bean类似,消息驱动bean从不被钝化,其生命周期只包含两个阶段:不存在和存在。
消息驱动Bean类必须实现MessageListener接口。当容器在Bean正在监听的队列中检测到消息时,它调用onMessage()方法,并将消息作为参数传入。
以上基于J2EE对EJB的全面理解,是边肖所共有的全部内容。希望给大家一个参考,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。