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组件开发人员可以把精力集中于封装商务逻辑,容器负责处理其他一切事务。ejb通过ejbcontent、jndj、回调函数等机制与容器交互。
jboss是一个管理ejb的容器和服务器,支持ejb1.1、ejb2.0和ejb3的规范,其一般和tomcat或jetty绑定使用。
下面请看图一(ejb容器的工作原理图):
图一:ejb容器工作原理
ejb组件是一种分布式对象,当它被实例化后,可以与其他地址空间中的应用程序进行通信。ejb实例被封装在框架(skeleton)对象中,它通过存根(stub)对象与客户端交流。存根不包括商务逻辑,但实现了商业接口。每当存根商业接口上的商业方法被调用时,存根就把网络消息发送给框架,告诉它调用了哪些方法。框架调用ejb实例的相应方法,并把ejb实例返回的结果发送给存根,由存根把这些结果再返回给相应的应用程序。通过存根和框架这两个中间对象,屏蔽了分布式对象之间的复杂通信过程。框架由容器实现,而存根由开发工具自动生成,二者都不需要编写代码。下面请看图二(ejb组件通信原理图):
图二:ejb组件间通信原理
3、ejb分类
ejb组件可以分为会话bean和消息驱动bean两种。会话bean封装了商务逻辑,客户端可以通过本地、远程、web服务的方式调用会话bean的方法来访问部署在服务器上的应用程序,从而调用其他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从“存在”状态转换成“不存在”状态。下面请看图三(无状态会话bean的生命周期):
图三:无状态会话bean的生命周期
5、有状态会话bean
有状态会话bean为用户保留了一次会话状态,它不能像无状态会话bean一样被放到组件池里让不同用户共享。对于有状态会话bean来说,只要有客户端发送请求,容器就创建一个实例与该客户端对应,一个客户端对应一个实例。在生存期内,有状态会话bean保持了用户的信息,一旦会话结束,有状态会话bean的生命周期也告结束。
有状态会话bean有三种活动状态:不存在、活动和钝化。当有状态会话bean处于活动状态一段时间后,如果仍然没有收到外部客户端的请求,为了节省系统资源,容器会把有状态会话bean中的状态信息序列化到临时存储空间,并把有状态会话bean从内存中移除,这个过程称为“钝化”。在钝化之前,容器回调prepassivate方法。当容器收到对已经被钝化的有状态会话bean的请求,会重新初始化有状态会话bean的实例,并将状态信息从临时空间取出,使之重新回到活动状态,这个过程称之为“激活”。在激活之后,容器回调proactivate方法。当有状态会话bean钝化一段时间后,容器将彻底清除该实例,回调predestroy方法。下面请看图四(有状态会话bean的生命周期):
图四:有状态会话bean的生命周期
6、单间会话bean
单件会话bean对每个应用程序实例化一次,并且在应用程序的生命周期中一直存在。单件会话bean为特定的情景而设计,客户端可以以共享且并发的模式访问这个唯一的ejb实例。
单件会话bean与无状态会话bean很相似,区别在于单件会话bean在应用中只有一个实例,而无状态会话bean可以有很多实例,每一个实例都被放在组件池里,使用户共享。
单件会话bean像无状态会话bean一样,从不钝化。其生命周期只包含两种状体:“不存在”和“存在”。下面请看图五(单件会话bean的生命周期):
图五:单件会话bean的生命周期
7、消息驱动bean
消息驱动bean是设计用来专门处理基于消息请求的组件。消息驱动bean集成了java消息服务(java message service,jms)和企业bean的功能。不能由客户端直接获取其引用而调用方法,只能由系统消息来启动。
ejb容器通常创建一个消息驱动bean的组件池。与无状态会话bean类似,消息驱动bean从不被钝化,其生命周期只包含两个阶段:不存在和存在。
消息驱动bean类必须实现messagelistener接口。当容器检测到bean监听的队列里的一条消息时,就调用onmessage()方法,将消息作为参数传入。
以上这篇j2ee基础之ejb全面了解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
J2EE基础之EJB全面了解
-
JAVA基础之基本数据类型全面解析
-
day02 -> java基础大神进阶学习总结之19天(知识点全面覆盖,细节)
-
day14 异常(try-catch,finally,throws,throw,自定义异常类)-> java基础大神进阶学习总结之19天(知识点全面覆盖,细节)
-
day20结业练习 -> java基础大神进阶学习总结之19天(知识点全面覆盖,细节)
-
Python爬虫之xlml解析库(全面了解)
-
Python爬虫之xlml解析库(全面了解)
-
day20结业练习 -> java基础大神进阶学习总结之19天(知识点全面覆盖,细节)
-
网络基础知识学习之更快速的了解集线器
-
原生javascript 学习之js变量全面了解