网站建设方案及报价,做搜索关键词任务网站,胶州建设局网站,华泰保险公司官方网站一、EJB是什么#xff1f; EJB是sun的JavaEE服务器端组件模型#xff0c;是一种规范#xff0c;设计目标与核心应用是部署分布式应用程序。EJB2.0过于复杂#xff0c;EJB3.0的推出减轻了开发人员进行底层开发的工作量#xff0c;它取消或最小化了很多(以前这些是必须实现)…一、EJB是什么 EJB是sun的JavaEE服务器端组件模型是一种规范设计目标与核心应用是部署分布式应用程序。EJB2.0过于复杂EJB3.0的推出减轻了开发人员进行底层开发的工作量它取消或最小化了很多(以前这些是必须实现)回调方法的实现并且降低了实体Bean及O/R映射模型的复杂性。EJB大概是J2EE架构中唯一一个没有兑现其能够简单开发并提高生产力承诺的组件。 二、EJB3.0新特性 相比EJB3以前的版本而言增加了两个新特性:元数据注解(Annotation) 和依赖注入(Injection),而元数据注解以最大限度的使部署描述符从冗余繁杂中脱离出来。 三、EJB体系结构 EnterpriseBean和Serializable接口一样是一个标记性接口。用于标记一个类为一个Bean。它有三种实现SessionBeanEntityBeanMessageDrivenBean。 SessionBean它是对业务逻辑的封装类似于我们经常写的Service层。它可以以local, remote, webservice 服务的方式被client调用。 EntityBean它是对数据库对象的封装一个EntityBean就是数据库的一条记录。 MessageDrivenBean一个messageDrivenBean其实就是一个javax.jms.MessageListener。在JMS中有MessageConsumer它支持两种接收消息的方式同步接收采用MessageConsumer#receive()方法异步接收则是为MessageConsumer设置一个MessageListener一旦接收到消息就调用listener#onMessage()。 四、SessionBean 1、SessionBean服务组件 SessionBean服务端有三大组件Home、EJbObject、SessionBean。 SessionBean是我们编写业务逻辑的地方。譬如数据库操作进行计算等等。但是它对于客户端是不可见的一个SessionBean实例的创建、销毁、激活、钝化等都是由EJB容器来管理的。 EJBObject你可以将EJBObject看作是SessionBean对象的Proxy。需要将你的业务方法同样在EJBObject中复制一份。例如有一个HelloSessionBean#sayHello(str) 业务如果要将该业务方法暴露出去给Client使用与之对应的HelloEJBObject中必然得包含#sayHello(str)方法。也就是说Client需要使用EJBObject来达到与SessionBean交互的。 Home这个名字起的怪异我们可以将其理解为一个SessionBean的Factory。EJB容器通过Home对象来创建SessionBean对象并装配出它的代理对象EJBObject对象。这是它的唯一用途。 2、Remote与Local 对于Home和EJBObject它们俩个都分为两类Remote,Local。 Remote模式的主要用于不在同一个JVM进程里而在同一个进程里使用时只需要使用Local模式的即可这样选择自然是为了性能考虑。 3、Client访问处理流程很容易看出Local性能好在哪里 3.1 Remote模式下SessionBean 的访问流程 1、客户端通过JNDI获取到Home对象EJBHome的引用 2、客户端使用homeRef#create()方法来创建出EJBObject的Stub。 2.1客户端底层使用Socket通信将次过程发给服务端Skeleton。 2.2Skeleton调用服务端的Home对象的create方法分配SessionBean对象可能是新创建一个也可能是从对象池中取一个具体怎样依赖于是否是Stateful的同时为该SessionBean对象生成一个代理对象EJBObject实例然后返回代理对象的引用。 2.3客户端拿到EJBObject的引用就是Stub对象。 3、客户端访问业务 3.1) 客户端底层使用Socket通信将次过程发给服务端Skeleton。 3.2Skeleton根据请求找到该EJBObject调用与之关联的SessionBean的相应的业务。返回结果 3.3客户端得到调用结果 3.2 Local模型下SessionBean的访问流程 1、客户端通过JNDI获取到Home对象EJBLocalHome的引用 2、客户端使用homeRef#create()方法来创建出EJBLocalObject怎么创建也要依赖于是否的Stateful的 3、客户端访问业务 五、常用注解 **Stateless**标记类把Java类声明为一个无状态会话bean **EJB**表示注入实例EJB注入和Resource注入相比EJB注入只是针对于EJB而言而Resource注入即是对所有的文件都可以进行注入。 **Remove**为会话 Bean 声明远程业务接口。用在接口上时将该接口指定为远程业务接口。在这种情况下不提供任何 value()。用在方法上通过这个注解来说明在调用这个方法之后bean的实例将被清除掉。 **Local**用在 Bean 类上时为会话 Bean 声明本地业务接口。用在接口上时将该接口指定为本地业务接口。在这种情况下不提供任何 value()。如Local(LawsuitService.class) **Stateful**有状态会话 Bean 的组件定义注释。 **Timeout**指定无状态会话 Bean 类或消息驱动 Bean 类上接收该 Bean 的 EJB 计时器过期的方法。 **TransactionAttribute**在 TYPE-level 应用时为会话或消息驱动 Bean 的所有业务方法指定默认事务属性。在方法级应用时仅为该方法指定事务属性。 如TransactionAttribute(TransactionAttributeType.SUPPORTS)、 TransactionAttribute(TransactionAttributeType.REQUIRED)。 **Interceptors**声明类或方法的拦截器的有序列表。 **Lock**方法声明一个并发锁的单例bean具有容器管理的并发。 **Schedule(排程器)**计划时间为自动建立一个超时计划基于一个时间表达式。 **Startup**标记一个单例在应用初始化期间。 **ConcurrencyManagement**声明单例或有状态bean的并发管理类型 六、EJB的使用
1.依赖导入
pom.xml dependencies dependencygroupIdjavax/groupIdartifactIdjavaee-web-api/artifactIdversion7.0/versionscopeprovided/scope/dependency/dependencies2.代码示例
Stateless
//不写默认本地Localpublic class ProdMgr {EJB//注入prodService,如果出现多个ProdService接口的实现类可以使用name属性区分private ProdService service;public String getName() {String name service.prod.getName();return name;}