永发信息网

简述EJB中6种角色的名称及其作用

答案:1  悬赏:10  手机版
解决时间 2021-11-16 04:18
简述EJB中6种角色的名称及其作用
最佳答案
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()方法进行初始化和资源分配。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
小尾寒羊白天放牧晚上专吃精料可以吗?
20万5.3%的利息一月多少
同一台电脑能安装两个i7 cpu吗?
廉江三中谢钰莹的中考成绩
化工生产线 怎样试车
快递都是从地方先到省城然后再发,还是到地级
富丽宝微电脑电热开水瓶PZD-625保温电水壶多
野外生存装备中必备的户外净水器好用吗
计算下面各题,怎样简便就怎样算.51.27-8.66-
郜林为什么离开申花,前申花老板朱骏近况,泰
叉车升降加什么油
芋头花的花序是哪部分?
这个戒指是什么材料?
男儿十二被三十岁女人性侵
阳曲傅先生事略 翻译
推荐资讯
顾客干洗缝纫店地址在什么地方,我要处理点事
孟津县洛阳孟津县徐灿辉铝合金加工店地址有谁
洁城干洗中心地址好找么,我有些事要过去,
两jsp页面通过herf跳转并传递多个参数时,在
lovelygirl美妆(莘庄店)地址在什么地方,想过
申请FRM证书,需要的两年相关工作经验具体包
有点想分手了,27了,一天就打游戏
洋葱与蜂蜜里面加醋与盐能同时吃吗
在汽车中的悬线上挂一个小球,实际表明,当汽
命题a≥0的反面是?命题a>b的反面?
matlab基于求解器和基于问题的优化是什么意思
食用色素放多了会发苦吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?