EJB注释-1(EJB学习笔记)

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

void XXX(Timer timer)待续

时间: 2024-09-26 03:23:29

EJB注释-1(EJB学习笔记)的相关文章

EJB注释是通过@来实现的

1.有状态@Stateful和无状态@Stateless会话 EJB注释是EJB技术的一个特点.@Stateless 定义本会话为无状态会话.无状态会话Bean 是一个简单 的POJO(纯粹的面向对象思想的java 对象),EJB3.0 容器自动地实例化及管理这个Bean.Stateless Session Bean不负责记录使用者状态,Stateless Session Bean一旦实例化就被加进会话池中,各个用户 都可以共用.即使用户已经消亡,Stateless Session Bean的生

java对象序列化学习笔记

java对象|笔记 目前网络上关于对象序列化的文章不少,但是我发现详细叙述用法和原理的文章太少.本人把自己经过经验总结和实际运用中的体会写成的学习笔记贡献给大家.希望能为整个java社区的繁荣做一点事情.    序列化的过程就是对象写入字节流和从字节流中读取对象.将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机.对象序列化功能非常简单.强大,在RMI.Socket.JMS.EJB都有应用.对象序列化问题在网

扬扬的J2EE学习笔记(一)概述

j2ee|笔记 扬扬今天开始学习J2EE啦! 目标:尽可能在最短时间内,把J2EE体系结构相关了解个大概,以后再慢慢往深处学习. 加油!加油!!加油!!!一.分布式的多层应用程序 图1 分布式的多层应用程序 J2EE平台使用多层分布式的应用模式.应用逻辑根据其功能分成多个组件,各种不同的应用组件构成分布在不同的依赖于层的机器上的J2EE程序.位于不同层的组件有: ☆ 运行在客户机上的客户层组件 ☆ 运行在J2EE服务器上的网络层 ☆ 运行在J2EE服务器上的逻辑层 ☆ 运行在

php5学习笔记(转)

php5|笔记 作者: whhwq在phpv.net看到的感觉不错/*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有

J2ME学习笔记(八)

笔记 今天买了2.5磅咖啡豆,星巴克的.有点点贵,用了599大洋,呵呵,偶尔奢侈一下也不为过嘛.刚刚磨了一杯咖啡,点上烟,呵呵,继续开始j2me的学习历程.虽说今天星期六,可是估计今天看不了多少,明天要去公司加班,所以今天还是要早点休息...想想前几个星期,soho的时候每天晚上就是我的工作时间,白天嘛..嘿嘿,睡觉...那真是幸福呀...好日子不再咯... 呵呵,TextBox,好像看名字就知道干什么的了,HTML里面的输入框.呵呵,感觉应该差不多.写一个(和TextBox有相同使用方法的还有

Socket网络编程学习笔记(3):利用套接字助手类

在上一篇中已经介绍了利用Socket建立服务端和客户端进行通信,如果需要 的朋友可访问<Socket网络编程学习笔记(2):面向连接的Socket>.在本篇 中,将利用C#套接字的助手类来简化Socket编程,使得刚刚接触到网络编程的 朋友们更容易上手. 跟上篇一样,通过C#套接字的助手类来编程同样分 服务端和客户端. 一.服务端侦听模式 1.创建套接字与 IPEndPoint绑定,并设置为侦听模式. 1//创建IPEndPoint实例 2 IPEndPoint ipep = new IPEn

作为一个新手的Oracle(DBA)学习笔记

Oracle数据库笔记 Jack Chaing 作者QQ595696297 交流群 127591054 祝大家学习进步. 如果大家想看Word版本的可以去下载:Word排版比较清晰一些. http://download.csdn.net/detail/jack__chiang/9810532 此笔记是作者本人去年开始从一个DBA新人的学习笔记,积累至今,希望拿出来给那些对DBA有兴趣的童孩学习,大家一起努力嘛. 此笔记记录了作者工作学习中从零基础的学习的记录,和从中遇见的问题与问题的解决!很高兴

SQL Server学习笔记

<SQL Server从入门到精通>学习笔记 1 数据管理技术的三个阶段:人工管理.文件系统.数据库系统. 2 数据库的组成:数据库.数据库管理系统.数据库管理员.硬件平台.软件平台5部分. 3 数据库的三级模式:内模式.模式.外模式. 4 三级模式之间的映射:外模式/模式,模式/内模式. 5 常用的数据库数据模型:层次模型.网状模型.关系模型. 6 关系数据库的规范化: (1)1NF:原子性,字段不可分. (2)2NF:唯一性,有主键,非主键关键字依赖于主键. (3)3NF:去除传递依赖(非

PHP图形操作之Jpgraph学习笔记_php技巧

本文实例讲述了PHP图形操作之Jpgraph学习笔记.分享给大家供大家参考,具体如下: 一.Jpgraph安装配置 下载Jpgraph安装包 解压后放置磁盘中,(最好是放在和网页一起) 修改php.ini文件: 1.内存  memory_limit=X,至少为32M 2.执行时间  max_execution_time=X,对于复杂的图片加载时需要较多的时间,根据图片的复杂度做相应的修改 3.缓存  output_buffering  注释掉缓存,便于调试 二.使用Jpgraph创建图形的基本步