快速业务通道

EJB注释是通过@来实现的 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

EJB注释是通过@来实现的

时间:2011-10-28 DIY部落 回忆

1.有状态@Stateful和无状态@Stateless会话

EJB注释是EJB技术的一个特点。@Stateless 定义本会话为无状态会话。无状态会话Bean 是一个简单 的POJO(纯粹的面向对象思想的java 对象),EJB3.0 容器自动地实例化及管理这个Bean.Stateless Session Bean不负责记录使用者状态,Stateless Session Bean一旦实例化就被加进会话池中,各个用户 都可以共用。即使用户已经消亡,Stateless Session Bean的生命期也不一定结束,它可能依然存在于会 话池中,供其他用户调用。

@Stateful定义本会话为有状态会话。有状态Bean是一个可以维持自身状态的会话Bean.每个用户都有 自己的一个实例,在用户的生存期内,Stateful Session Bean 保持了用户的信息,即“有状态”;一旦 用户灭亡(调用结束或实例结束),Stateful Session Bean的生命期也告结束。

一个bean可以同时是有状态的和无状态的

2.Local接口@Local和Remote接口@Remote

当@Local和@Remote的EJB注释都不存在时,会话 Bean实现的接口默认为Local接口。如果在本机调用 EJB(确保客户端与EJB容器运行在同一个JVM),采用Local接口访问EJB优于Remote接口,因为Remote接 口访问EJB需要经过远程方法调用(RPCs)环节,而Local接口访问EJB直接从JVM 中返回EJB的引用。

3.JNDI的命名规则

JNDI 名的组成规则是“上层名称/下层名称”,每层之间以“/”分隔。默认的JNDI名称是 会话Bean +接口类型

4.改变Session Bean 的JNDI 名称

要自定义JNDI名称,可以使用@LocalBinding 和 @RemoteBinding 注释,@LocalBinding注释指定 Session Bean的Local接口的JNDI名称,@RemoteBinding注释指定Session Bean的Remote接口的JNDI名称 。例如:

@RemoteBinding (jndiBinding="com/RemoteHello")

@LocalBinding (jndiBinding="com/LocalHello")第一句定义JNDI 为com/RemoteHello,第二句定 义JNDI 为com/LocalHello

5.Bean 的生命周期

@PostConstruct:当bean对象完成实例化后,使用了这个注释的方法会被立即调用。这个注释同时适 用于有状态和无状态的会话bean. @PreDestroy:使用这个注释的方法会在容器从它的对象池中销毁一个 无用的或者过期的bean 实例之前调用。这个注释同时适用于有状态和无状态的会话bean. @PreDestroy: 当一个有状态的session bean实例空闲过长的时间,容器将会钝化(passivate)它,并把它的状态保存 在缓存当中。使用这个注释的方法会在容器钝化bean实例之前调用。这个注释适用于有状态的会话bean. 当钝化后,又经过一段时间该bean 仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对 该bean方法的调用容器都会抛出例外。

@PreDestroy:当客户端再次使用已经被钝化的有状态session bean时,新的实例被创建,状态被恢复 。使用此注释的session bean会在bean的激活完成时调用。这个注释只适用于有状态的会话bean. @Init :这个注释指定了有状态session bean初始化的方法。它区别于@PostConstruct注释在于:多个@Init注 释方法可以同时存在于有状态session bean 中,但每个bean实例只会有一个@Init注释的方法会被调用。 这取决于bean是如何创建的(细节请看EJB 3.0规范)。@PostConstruct在@Init之后被调用。另一个有用 的生命周期方法注释是@Remove,特别是对于有状态session bean.当应用通过存根对象调用使用了 @Remove注释的方法时,容器就知道在该方法执行完毕后,要把bean实例从对象池中移走。

EJB注释是通过@来实现的(2)

时间:2011-10-28 DIY部落 回忆

6.拦截器(Interceptor)

拦截器可以监听程序的一个或所有方法。拦截器对方法调用流提供了细粒度控制。

@Interceptors 注释指定一个或多个在外部类中定义的拦截器。

@AroundInvoke 注释指定了要用作拦截器的方法。用@AroundInvoke注释指定的方法必须遵守以下格式 :public Object XXX(InvocationContext ctx) throws Exception.XXX 代表方法名可以任意。(以下 同)

除了可以在外部定义拦截器之外,还可以将Session Bean 中的一个或多个方法定义为拦截器。

7.依赖注入

为了存取那些服务对象,你需要通过服务器的JNDI 来查找存根对象(session bean)或消息队列 (MDB)。JNDI查找是把客户端与实际的服务端实现解藕的关键步骤。但是,直接使用一个字符串来进行 JNDI查找并不优雅。

@EJB注释EJB存根对象注入到任何EJB 3.0容器管理的POJO 中。

@EJB (beanName="HelloWorldBean")

//@EJB (mappedName="HelloWorldBean/remote")beanName的beanName属性指定EJB的类名, mappedName指定Bean实例的JNDI名。

@EJB注释如果被用在JavaBean风格的setter 方法上时,容器会在属性第一次使用之前,自动地用正确 的参数调用bean的setter 方法。

@EJB注释只能注入EJB存根对象,除@EJB注释之外,EJB 3.0也支持@Resource注释来注入来自JNDI的任 何资源。

如果JNDI对象在本地(java:comp/env)JNDI目录中,你只需给定他的映谢名称即可,不需要带前缀 。

@Resource注释可以不指定JNDI名就能注入他们,他通过变量的类型就能获得他的JNDI名。@Resource 注释可以被用在JavaBean风格的setter 方法上。

8. 定时服务

定时服务用作在一段特定的时间后执行某段程序,使用@Timeout 注释声明定时器方法。

通过依赖注入@Resource SessionContext ctx,获得SessionContext对象,调用ctx.getTimerService ()。createTimer(Date arg0, long arg1, Serializable arg2)方法创建定时器,三个参数的含义 如下:Date arg0 定时器启动时间,如果传入时间小于现在时间,定时器会立刻启动。

long arg1 间隔多长时间后再次触发定时事件。单位:毫秒当定时器创建完成后,还需声明定时器方 法。EJB注释是EJB技术的一个特点。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号