简述EJB中6种角色的名称及其作用
答案:1 悬赏:10 手机版
解决时间 2021-11-16 04:18
- 提问者网友:未信
- 2021-11-15 17:04
简述EJB中6种角色的名称及其作用
最佳答案
- 五星知识达人网友:雾月
- 2021-11-15 18:33
EJB
1.EJB体系结构:
包括客户端、服务器端。
客户端:包含了调用EJB组件特定业务所需的EJB接口(包括本地和远程EJB接口);服务器端处理对象的句柄。
服务器端:包含了EJB组件实现的实例;用来在客户端和EJB组件之间进行映射的容器代码。
EJB客户应用程序使用JNDI来查找对本地接口的实例引用,通过EJB接口来调用和引用EJB组件的全部方法和属性。
2.开发EJB程序的步骤:
开发主接口、开发组件接口、开发Bean实现类、编写部署文件。
开发主接口:bean的主接口程序,命名为Home,继承EJBHome,负责bean的生命周期(生成、删除、查找bean)。只需提供主接口,类方法的实现由容器完成。其方法有create,remove,search等。
开发组件接口:命名为,继承EJBObject,当远程用户调用主接口方法create时,得到一个组件的远程引用,为这个bean的所有方法提供一个接口类,类和主接口的实现是由容器在部署时自动生成。
开发Bean的实现类:命名为EJB,实现SessionBean接口。实现ejbCreate、ejbRemove等。
编写部署文件:完整的bean由java类和描述其特性的ejb-jar.xml文件组成,将其打包,放在jboss中的deploy文件夹中。
3.开发和部署测试程序:
开发一个Servlet测试程序,将测试程序放在tomcat的webapps中。
4.会话Bean:
分为有状态会话Bean和无状态会话Bean。EJB容器通过ejb-jar.xml来判断是否为一个SessionBean提供保存状态的服务。
所有SessionBean的寿命周期由容器控制,Bean的客户不拥有Bean的直接引用。部署一个EJB时,容器为这个Bean分配几个实例到Component Pooling,当客户请求一个Bean时,J2EE服务器将一个预先实例化的Bean分配出去,在客户的一次会话中,可以只引用一次Bean,就可以执行这个Bean的多个方法。如果另一个客户请求同一个Bean,容器检查池中空闲的Bean(不在方法和事务中,如果一个客户长时间引用一个Bean,单执行一个方法后需等待一段事件执行另一个方法,则这段时间也是空闲的),如果全部的实例都已用完,则会自动生成一个新的实例放在池中,并分配给请求者。当负载减少时,池会自动管理Bean实例的数量,将多余的实例从池中释放。
5.有状态会话Bean:
在客户访问之间保存数据,在客户引用期间维护Bean中的所有实例数据的状态值。
有四种状态:不存在、方法现成、事务中方法现成、钝化。
不存在:有状态SessionBean的初始化状态为不存在,当客户引用一个Bean时,按照下图中初始化一个Bean。 方法现成:如果客户调用remove()方法回到不存在状态,并触发Bean的ejbRemove()方法。如果客户长时间不调用Bean或服务器准备释放一些内存资源,则容器调用ejbPassivate()将这些Bean从组件池中钝化,此时释放分配的资源。当请求被钝化的Bean时,容器调用ejbActivate()激活Bean,Bean转到方法现成状态时分配Bean所需的资源。
Bean本身可以管理事务(BMT Bean-Managed Transactions),也可由容器管理事务(CMT Container-Managed Transactions)。对于CMT,容器在方法开始时打开事务,在方法结束时实现事务。通过afterBegin()、beforeCompletion()、afterCompletion()来获取事务的各个状态,afterCompletion(true)表示事务完成,afterCompletion(false)表示事务被撤消。
setSessionContext()将对象的语境放到对象变量中,容器在结束会话Bean或自动超时死亡之前自动调用ejbRemove()方法,此方法中可以用来释放资源,
6.无状态会话Bean:
不会在客户访问之间保存数据,不能申明实例变量,方法只能操作传来的参数。
如果数据是数据的瞬像,则用无状态会话Bean。弊端:本该存储在服务器端的数据被保存在客户中,每次调用这些数据要以参数的方式传递给Bean。如果数据状态非常敏感,则不要使用无状态会话Bean。
有两种状态:存在、不存在。
只对客户提供业务逻辑,服务器端不保存客户端的任何数据状态,这些状态被保存在客户端。
当客户端不存在一个无状态Session Bean时,通过远程主接口的create()方法创建一个Bean,newInstance()负责实例化Bean,ejb容器调用bean类的setSessionContext()方法把运行环境对象SessionContext传递给Bean,然后调用ejbCreate()方法进行初始化和资源分配。
1.EJB体系结构:
包括客户端、服务器端。
客户端:包含了调用EJB组件特定业务所需的EJB接口(包括本地和远程EJB接口);服务器端处理对象的句柄。
服务器端:包含了EJB组件实现的实例;用来在客户端和EJB组件之间进行映射的容器代码。
EJB客户应用程序使用JNDI来查找对本地接口的实例引用,通过EJB接口来调用和引用EJB组件的全部方法和属性。
2.开发EJB程序的步骤:
开发主接口、开发组件接口、开发Bean实现类、编写部署文件。
开发主接口:bean的主接口程序,命名为
开发组件接口:命名为
开发Bean的实现类:命名为
编写部署文件:完整的bean由java类和描述其特性的ejb-jar.xml文件组成,将其打包,放在jboss中的deploy文件夹中。
3.开发和部署测试程序:
开发一个Servlet测试程序,将测试程序放在tomcat的webapps中。
4.会话Bean:
分为有状态会话Bean和无状态会话Bean。EJB容器通过ejb-jar.xml来判断是否为一个SessionBean提供保存状态的服务。
所有SessionBean的寿命周期由容器控制,Bean的客户不拥有Bean的直接引用。部署一个EJB时,容器为这个Bean分配几个实例到Component Pooling,当客户请求一个Bean时,J2EE服务器将一个预先实例化的Bean分配出去,在客户的一次会话中,可以只引用一次Bean,就可以执行这个Bean的多个方法。如果另一个客户请求同一个Bean,容器检查池中空闲的Bean(不在方法和事务中,如果一个客户长时间引用一个Bean,单执行一个方法后需等待一段事件执行另一个方法,则这段时间也是空闲的),如果全部的实例都已用完,则会自动生成一个新的实例放在池中,并分配给请求者。当负载减少时,池会自动管理Bean实例的数量,将多余的实例从池中释放。
5.有状态会话Bean:
在客户访问之间保存数据,在客户引用期间维护Bean中的所有实例数据的状态值。
有四种状态:不存在、方法现成、事务中方法现成、钝化。
不存在:有状态SessionBean的初始化状态为不存在,当客户引用一个Bean时,按照下图中初始化一个Bean。 方法现成:如果客户调用remove()方法回到不存在状态,并触发Bean的ejbRemove()方法。如果客户长时间不调用Bean或服务器准备释放一些内存资源,则容器调用ejbPassivate()将这些Bean从组件池中钝化,此时释放分配的资源。当请求被钝化的Bean时,容器调用ejbActivate()激活Bean,Bean转到方法现成状态时分配Bean所需的资源。
Bean本身可以管理事务(BMT Bean-Managed Transactions),也可由容器管理事务(CMT Container-Managed Transactions)。对于CMT,容器在方法开始时打开事务,在方法结束时实现事务。通过afterBegin()、beforeCompletion()、afterCompletion()来获取事务的各个状态,afterCompletion(true)表示事务完成,afterCompletion(false)表示事务被撤消。
setSessionContext()将对象的语境放到对象变量中,容器在结束会话Bean或自动超时死亡之前自动调用ejbRemove()方法,此方法中可以用来释放资源,
6.无状态会话Bean:
不会在客户访问之间保存数据,不能申明实例变量,方法只能操作传来的参数。
如果数据是数据的瞬像,则用无状态会话Bean。弊端:本该存储在服务器端的数据被保存在客户中,每次调用这些数据要以参数的方式传递给Bean。如果数据状态非常敏感,则不要使用无状态会话Bean。
有两种状态:存在、不存在。
只对客户提供业务逻辑,服务器端不保存客户端的任何数据状态,这些状态被保存在客户端。
当客户端不存在一个无状态Session Bean时,通过远程主接口的create()方法创建一个Bean,newInstance()负责实例化Bean,ejb容器调用bean类的setSessionContext()方法把运行环境对象SessionContext传递给Bean,然后调用ejbCreate()方法进行初始化和资源分配。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯