- 浏览: 442149 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
鱼里的yeol:
正在学习EJB 感觉有些吃力
Ejb3学习之二----Ejb3的Ejb Bean类型介绍 -
phoenix5870:
默认就是singleton的。
Spring中的Singleton模式和Java中的Singleton模式 -
jhys7s8jd:
pdf打印机下载 无水印http://www.onlinedo ...
PDFCreate工具的使用 -
wang371134086:
:e vil:
浅谈Struts2中的拦截器实现责任链模式 -
liu765023051:
亲,local与remote有什么区别呢
EJB学习之三---Local和Remote接口
关于Ejb3的Ejb bean类型介绍,有三种类型:Session bean,Entity Bean和MessageDriven bean(Mbean).在这篇文章中,主要介绍Session bean.
Key:
定义
Stateful bean
Stateless bean
Sample
一 Session Bean定义
用于实现业务逻辑,分为stateful bean(有状态的Session Bean)和Stateless Bean(无状态的Session Bean)。每当Client发出request时,容器就会查找对应的Session Bean来做响应。
二 Stateful Bean
1.特点
可以保持每个客户端在请求处理中调用所有方法的状态。对于复杂业务的处理,尤其重要。例如:在在线购物系统中,每个客户都拥有购物车(Stateful bean),而装载的货物和货物的数量在Session Bean中通过方法来操作。因此,对于Stateful bean而言,系统需要用更多的内存来分配给bean,在性能不如Stateless Bean.
2. 生命周期
(1) 分为三个状态:就绪/不存在/激活。
(2) bean初始化时,会发生如下过程:容器调用newInstance方法;如果bean使用DI,所有依赖的资源、bean和环境组件都要注入进来。session bean的初始化可以在装载配置文件时开始,也可以在用户首次调用该bean时开始.
(3) 池化:类似数据库的连接池.ejb的“池”开启时会先创建一定的bean实例(默认的数目,不过不知道具体是多少),如果不够用了再创建新的实例,是被客户端删除或超时的时候被销毁。此外,如果客户端删除了Ejb bean,则和Ejb Bean相关联的其他bean也会一同被删除。
3. 方法
在Ejb容器中,供Stateful bean而言,有五个方法可以被调用:setSessionContext,ejbCreate,ejbRemove,ejbActive,ejbPassivate.
4. programs rules
(1) 至少有一个业务接口。
(2) 必须是具体类,不能是final或抽象类。
(3) 必须有空构造函数。
(4) 可以是其它sessionbean或pojo的子类。
(5) 注解继承需要受到限制,超类中@Stateless or @Stateful注解在部署时将要被忽略。但定义的任何回调方法和资源注入都将被继承.
(6) 必须定义所有的方法为public的,但不能是final或static的.在远程业务接口中的定义的参数和返回值类型必须实现java串行化接口.
(7) bean实例变量用于存储会话状态,这些变量必须是java基本数据类型或实现串行化接口.
(8) bean由于不能池化和进行重用,如果没有方式进行销毁会非常危险,因此必须定义业务方法进行销毁.我们使用@Remove注解。
(9) 除了postContruct和preDestory外,bean还有prePassivate和postAcitivate生命周期回调方法。分别在钝化前和激活后调用。
三 Stateless bean
1. 特点
不能保留处理过程中状态。所有的事务处理在一个方法中处理完成,并且能与其它用户共享信息。正因为如此,其性能较高。一般在实际应用中,都会进行序列化(Searialize).
2. 生命周期
(1) 分为两个状态:就绪和不存在。
(2) bean初始化时,会发生如下过程:容器调用newInstance方法;如果bean使用DI,所有依赖的资源、bean和环境组件都要注入进来。session bean的初始化可以在装载配置文件时开始,也可以在用户首次调用该bean时开始.
(3) 池化:类似数据库的连接池.ejb的“池”开启时会先创建一定的bean实例(默认的数目),如果不够用了再创建新的实例。一般是等“池”销毁的时候销毁,例如宕机的时候,或者必要的时候人为销毁。
(4) 通过少量的实例来处理实际的并发的访问。理论上可以有多个@postContruct和@preDestroy生命周期回调方法,但很少这样做:PostConstruct--实例创建并DI之后调用,PreDestroy--bean销毁前调用,比如释放资源;生命周期回调方法不能有参数,而且不能抛出受检查的异常(运行时异常的子类)。
3. 方法
在Ejb容器中,供Stateless bean而言,有三个方法可以被调用: setSessionContext,ejbCreate,ejbRemove.
4. program rules
(1) 至少有一个业务接口。
(2) 必须是具体类,不能是final或抽象类。
(3) 必须有空构造函数。
(4) 可以是其它sessionbean或pojo的子类。
(5) 注解继承需要受到限制,超类中@Stateless or @Stateful注解在部署时将要被忽略。但定义的任何回调方法和资源注入都将被继承。
(6) 必须定义所有的方法为public的,但不能是final或static的.在远程业务接口中的定义的参数和返回值类型必须实现java串行化接口.
四 Sample:
1. Stateless Bean 实例:
1) interface(HelloWorldEjb):
2) Ejb Session Bean:
deploy后,发布的Ejb bean name是HelloWorldEjbBean.
3) Client:
run :
可以看出,在Stateless bean中,其信息被其它所有用户共享。
2. stateful bean
1) interface:
2) Ejb bean:
deploy后,其Session bean name为:HelloWorldStatefulEjbBean。
3) Client:
run,console出现的log信息:
说明每个Stateful bean,其资源是独立的,只能自己使用。
Key:
定义
Stateful bean
Stateless bean
Sample
一 Session Bean定义
用于实现业务逻辑,分为stateful bean(有状态的Session Bean)和Stateless Bean(无状态的Session Bean)。每当Client发出request时,容器就会查找对应的Session Bean来做响应。
二 Stateful Bean
1.特点
可以保持每个客户端在请求处理中调用所有方法的状态。对于复杂业务的处理,尤其重要。例如:在在线购物系统中,每个客户都拥有购物车(Stateful bean),而装载的货物和货物的数量在Session Bean中通过方法来操作。因此,对于Stateful bean而言,系统需要用更多的内存来分配给bean,在性能不如Stateless Bean.
2. 生命周期
(1) 分为三个状态:就绪/不存在/激活。
(2) bean初始化时,会发生如下过程:容器调用newInstance方法;如果bean使用DI,所有依赖的资源、bean和环境组件都要注入进来。session bean的初始化可以在装载配置文件时开始,也可以在用户首次调用该bean时开始.
(3) 池化:类似数据库的连接池.ejb的“池”开启时会先创建一定的bean实例(默认的数目,不过不知道具体是多少),如果不够用了再创建新的实例,是被客户端删除或超时的时候被销毁。此外,如果客户端删除了Ejb bean,则和Ejb Bean相关联的其他bean也会一同被删除。
3. 方法
在Ejb容器中,供Stateful bean而言,有五个方法可以被调用:setSessionContext,ejbCreate,ejbRemove,ejbActive,ejbPassivate.
4. programs rules
(1) 至少有一个业务接口。
(2) 必须是具体类,不能是final或抽象类。
(3) 必须有空构造函数。
(4) 可以是其它sessionbean或pojo的子类。
(5) 注解继承需要受到限制,超类中@Stateless or @Stateful注解在部署时将要被忽略。但定义的任何回调方法和资源注入都将被继承.
(6) 必须定义所有的方法为public的,但不能是final或static的.在远程业务接口中的定义的参数和返回值类型必须实现java串行化接口.
(7) bean实例变量用于存储会话状态,这些变量必须是java基本数据类型或实现串行化接口.
(8) bean由于不能池化和进行重用,如果没有方式进行销毁会非常危险,因此必须定义业务方法进行销毁.我们使用@Remove注解。
(9) 除了postContruct和preDestory外,bean还有prePassivate和postAcitivate生命周期回调方法。分别在钝化前和激活后调用。
三 Stateless bean
1. 特点
不能保留处理过程中状态。所有的事务处理在一个方法中处理完成,并且能与其它用户共享信息。正因为如此,其性能较高。一般在实际应用中,都会进行序列化(Searialize).
2. 生命周期
(1) 分为两个状态:就绪和不存在。
(2) bean初始化时,会发生如下过程:容器调用newInstance方法;如果bean使用DI,所有依赖的资源、bean和环境组件都要注入进来。session bean的初始化可以在装载配置文件时开始,也可以在用户首次调用该bean时开始.
(3) 池化:类似数据库的连接池.ejb的“池”开启时会先创建一定的bean实例(默认的数目),如果不够用了再创建新的实例。一般是等“池”销毁的时候销毁,例如宕机的时候,或者必要的时候人为销毁。
(4) 通过少量的实例来处理实际的并发的访问。理论上可以有多个@postContruct和@preDestroy生命周期回调方法,但很少这样做:PostConstruct--实例创建并DI之后调用,PreDestroy--bean销毁前调用,比如释放资源;生命周期回调方法不能有参数,而且不能抛出受检查的异常(运行时异常的子类)。
3. 方法
在Ejb容器中,供Stateless bean而言,有三个方法可以被调用: setSessionContext,ejbCreate,ejbRemove.
4. program rules
(1) 至少有一个业务接口。
(2) 必须是具体类,不能是final或抽象类。
(3) 必须有空构造函数。
(4) 可以是其它sessionbean或pojo的子类。
(5) 注解继承需要受到限制,超类中@Stateless or @Stateful注解在部署时将要被忽略。但定义的任何回调方法和资源注入都将被继承。
(6) 必须定义所有的方法为public的,但不能是final或static的.在远程业务接口中的定义的参数和返回值类型必须实现java串行化接口.
四 Sample:
1. Stateless Bean 实例:
1) interface(HelloWorldEjb):
public interface HelloWorldEjb { public String sayHelloWorld(String userName); public int computeCallCount(); }
2) Ejb Session Bean:
import javax.ejb.Remote; import javax.ejb.Stateless; /** * @author Jamson Huang * */ @Stateless @Remote public class HelloWorldEjbBean implements HelloWorldEjb { private int callCnt; public String sayHelloWorld(String userName){ return "Hello World! "+userName; } public int computeCallCount(){ callCnt = callCnt+1; return callCnt; } }
deploy后,发布的Ejb bean name是HelloWorldEjbBean.
3) Client:
import javax.naming.InitialContext; import com.ejb.bean.HelloWorldEjb; /** * @author Jamson Huang * @version 1.0.0 */ public class HelloWorldEjbClient { public static void main(String[] args) throws Exception{ // Properties props = new Properties(); //props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); //props.setProperty("java.naming.provider.url", "localhost:1099"); // props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); InitialContext context = new InitialContext(); HelloWorldEjb helloWorldEjb = (HelloWorldEjb)context.lookup("HelloWorldEjbBean/remote"); System.out.println(helloWorldEjb.sayHelloWorld("Jamson")); System.out.println(helloWorldEjb.computeCallCount()); System.out.println(helloWorldEjb.sayHelloWorld("Jamson")); System.out.println(helloWorldEjb.computeCallCount()); HelloWorldEjb helloWorldEjb2 = (HelloWorldEjb)context.lookup("HelloWorldEjbBean/remote"); System.out.println(helloWorldEjb2.sayHelloWorld("Jamson")); System.out.println(helloWorldEjb2.computeCallCount()); System.out.println(helloWorldEjb2.sayHelloWorld("Jamson")); System.out.println(helloWorldEjb2.computeCallCount()); } }
run :
Hello World! Jamson 5 Hello World! Jamson 6 Hello World! Jamson 7 Hello World! Jamson 8
可以看出,在Stateless bean中,其信息被其它所有用户共享。
2. stateful bean
1) interface:
/** * @author Jamson Huang * */ public interface HelloWorldStatefulEjb { public String sayHelloWorld(String userName); public int computeCallCount(); }
2) Ejb bean:
import javax.ejb.Remote; import javax.ejb.Stateful; /** * @author Jamson Huang * */ @Stateful @Remote public class HelloWorldStatefulEjbBean implements HelloWorldStatefulEjb { private int callCnt; public String sayHelloWorld(String userName){ return "Hello World! "+userName; } public int computeCallCount(){ callCnt = callCnt+1; return callCnt; } }
deploy后,其Session bean name为:HelloWorldStatefulEjbBean。
3) Client:
import javax.naming.InitialContext; import com.ejb.bean.HelloWorldStatefulEjb; /** * @author Jamson Huang * @version 1.0.0 */ public class HelloWorldStatefulEjbClient { public static void main(String[] args)throws Exception{ // Properties props = new Properties(); // props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); // props.setProperty("java.naming.provider.url", "localhost:1099"); // props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); InitialContext context = new InitialContext(); HelloWorldStatefulEjb helloWorldEjb = (HelloWorldStatefulEjb)context.lookup("HelloWorldStatefulEjbBean/remote"); System.out.println(helloWorldEjb.sayHelloWorld("Jamson")); System.out.println(helloWorldEjb.computeCallCount()); System.out.println(helloWorldEjb.sayHelloWorld("Jamson")); System.out.println(helloWorldEjb.computeCallCount()); HelloWorldStatefulEjb helloWorldEjb2 = (HelloWorldStatefulEjb)context.lookup("HelloWorldStatefulEjbBean/remote"); System.out.println(helloWorldEjb2.sayHelloWorld("Jamson")); System.out.println(helloWorldEjb2.computeCallCount()); System.out.println(helloWorldEjb2.sayHelloWorld("Jamson")); System.out.println(helloWorldEjb2.computeCallCount()); } }
run,console出现的log信息:
Hello World! Jamson 1 Hello World! Jamson 2 Hello World! Jamson 1 Hello World! Jamson 2
说明每个Stateful bean,其资源是独立的,只能自己使用。
发表评论
-
OS Workflow Intruction
2011-03-14 01:58 1643OSWorkflow是一个灵活的工作流引擎,设计成可嵌入到企业 ... -
EJB学习之五---MDB(消息驱动EJB)
2010-09-06 13:32 2269前面已经介绍过EJB的Session Bean,这篇文章主要介 ... -
SSL单双向验证原理(转)
2010-06-07 22:34 2894Key points SSL验证 双向SSL ... -
Spring2.5学习之三----AOP研究
2010-05-31 12:09 6471Key Points AOP的基本概念 Advice的类型 A ... -
Spring2.5学习之二----依赖注入
2010-05-30 17:22 2428Key points 依赖注入的原理 依赖注入的方式---XM ... -
Spring学习之一----创建Bean的三种方法
2010-05-30 14:29 27659关键字 BeanFactory ApplicationCont ... -
EJB3学习之四----EJB3新特性(元数据注解和依赖注入)
2010-05-13 01:39 4139EJB3新特性 元数据注解 依赖注入 一 EJB3新特性 ... -
EJB学习之三---Local和Remote接口
2010-05-10 23:12 8221这篇文章主要来学习Ejb的组成元素,重点介绍Local和Rem ... -
Ejb学习之一---EJB3+Jboss4.2配置开发
2010-05-09 02:59 2864昨天,打算把Ejb整理下,最早用到Ejb+Jboss是在三年前 ... -
Struts Taglib库之(一)Bean讲解
2010-05-05 23:29 0最近准备换工作,也想把一些工作中用到的技术进行链接起来,就把它 ... -
转:Hibernate中cascade和inverse的相关
2011-11-19 17:51 646FROM:http://developer.51cto.com ... -
Struts1和Struts2有何不同?
2010-04-19 00:42 0Struts1和Struts2的区别和对比: Action ... -
Struts2中的Vistor模式
2010-04-19 00:40 1509Visitor访问者模式定义 作用于某个对象群中各个对象的操作 ... -
Spring中的Singleton模式和Prototype模式
2010-04-19 00:06 1794对于在Spring+Struts2结合配置Action=&qu ... -
WebService介绍
2010-04-18 17:01 2946记得初次接触WebService是 ... -
Spring中的Singleton模式和Java中的Singleton模式
2010-04-17 17:09 12653对于Spring中实现Singleton模式,是以IOC容器为 ... -
JavaMail来读取和发送邮件的基本流程
2010-04-15 01:21 1916在应用程序中使用JavaMail来读取邮件的基本流程如下: ... -
SSH框架优缺点【转】
2010-04-15 00:53 6129在过去的一年里,可能 ... -
J2EE面试题
2010-04-14 11:17 0一、基础问答 1.下 ... -
JTOM
2010-04-13 00:24 0JTOM是一个基于Java开放源代码的事物处理管理器。它遵 ...
相关推荐
JavaEE5学习笔记05-EJB之会话Bean总结...
基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-...
NULL 博文链接:https://gavin-chen.iteye.com/blog/352527
EJB3图文教程之开发Session Bean
EJB3 的bean类将更像常规的Java bean。不要求像过去那样实现特殊的回调界面或者扩展EJB类。所以它 将使EJB的开发更像常规的Java 开发。 作者对EJB3.0 接触的时间很短,所以一些新的概念和知识理解也难免有误,有些...
EJB3图文教程之开发Message Driven Bean
2.2 运行一个EJB3例子.......9 2.3 在独立的TOMCAT 中调用EJB....9 2.4 发布在JBOSS集成环境中的WEB应用调用EJB.....10 第三章开发前的准备............10 3.1 熟悉JBOSS的目录结构10 3.2 JBOSS中的部署...............
ejb实体bean eclipse mysql
EJB之消息驱动Bean的总结。ejb 消息驱动Bean j2ee jms java
NULL 博文链接:https://8366.iteye.com/blog/438239
它包含一个可选的EJB-JAR文件的描述,可选显示的名称,可选小图标的文件名,可选的大图标的文件名,必须的所有被包含的enterprise bean 的结构信息 ,可选的应用装配描述器,可选的针对当前ejb-jar文件的ejb-client-jar ...
NULL 博文链接:https://8366.iteye.com/blog/419329
在EJB3.0中开发实体Bean非常简单,你可以象开发一般的java bean一样编程,只需做少量的注释。一个实体bean不需要实现Home接口或者Remote、Local接口。
EJB3开发Entity EJB3开发Entity
详细介绍了EJB3中关于实体bean的增删改查等操作,并给出了多种示例,非常详细。
Message-Driven Bean EJB实例源代码
NULL 博文链接:https://8366.iteye.com/blog/413863
EJB实体Bean的学习,增删改查.表有自动增长列
EJB学习资料,讲解EJB的三大bean的使用