文档章节

EJB注释

Avanon
 Avanon
发布于 2011/03/09 15:35
字数 1599
阅读 182
收藏 1

EJB注释

EJB注释是EJB技术的一个特点。EJB的大部分功能都是通过注释@来实现的。
1.有状态@Stateful和无状态@Stateless会话
@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注释都不存在时,会话 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。
·@PrePassivate:当一个有状态的session bean实例空闲过长的时间,容器将会钝化(passivate)它,并把它的
状态保存在缓存当中。使用这个注释的方法会在容器钝化bean实例之前调用。这个注释适用于有状态的会话bean。
当钝化后,又经过一段时间该bean 仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对该bean
方法的调用容器都会抛出例外。
·@PostActivate:当客户端再次使用已经被钝化的有状态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实例从对象池中移走。

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 间隔多长时间后再次触发定时事件。单位:毫秒
当定时器创建完成后,还需声明定时器方法

© 著作权归作者所有

Avanon

Avanon

粉丝 26
博文 19
码字总数 7667
作品 0
武汉
人事招聘
私信 提问
Java程序员从笨鸟到菜鸟之(十八)JSP基本语法与动作指令

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 Jsp,通常的被大家认为是做网页的前台界面,我刚学习的时候,说实话,真没把他当回事,学的也是囫囵吞枣,有时...

长平狐
2012/11/12
116
0
(JavaEE-07)JSP.md

JSP JSP全称是Java Server Pages,它和Servlet技术一样,都是SUN公司定义的一种用于开发动态Web资源的技术。JSP的编写就像编写HTML一样简单,但是与HTML不同的是,在JSP中,可以编写Java代码...

_-Leon-_
2014/07/04
109
0
jsp简介

Jsp简介 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和...

晨曦之光
2012/05/16
297
0
Servlet 3.0 介绍

下载 Servlet 3.0 规范 Java servlets 是一项被普遍接受的技术,用于构建基于 web 应用程序的动态内容;Servlet 3.0 规范早期草案版本的发行让该技术在特性和应用程序接口(Application Progra...

红薯
2010/05/27
1K
4
初识 JSP---(注释/小脚本/声明/指令/动作/内置对象)

注释 java : // / / /** */ html : jsp <%-- --%> jsp注释和html注释的区别 jsp注释对jsp引擎有作用,当jsp引擎看到这个注释后,生产servlet文件是会忽略他 html注释对jsp引擎没有作用,jsp...

姜白告
2018/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
36分钟前
4
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部