- 浏览: 449892 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
鱼里的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 1680OSWorkflow是一个灵活的工作流引擎,设计成可嵌入到企业 ... -
EJB学习之五---MDB(消息驱动EJB)
2010-09-06 13:32 2309前面已经介绍过EJB的Session Bean,这篇文章主要介 ... -
SSL单双向验证原理(转)
2010-06-07 22:34 2931Key points SSL验证 双向SSL ... -
Spring2.5学习之三----AOP研究
2010-05-31 12:09 6511Key Points AOP的基本概念 Advice的类型 A ... -
Spring2.5学习之二----依赖注入
2010-05-30 17:22 2467Key points 依赖注入的原理 依赖注入的方式---XM ... -
Spring学习之一----创建Bean的三种方法
2010-05-30 14:29 27721关键字 BeanFactory ApplicationCont ... -
EJB3学习之四----EJB3新特性(元数据注解和依赖注入)
2010-05-13 01:39 4177EJB3新特性 元数据注解 依赖注入 一 EJB3新特性 ... -
EJB学习之三---Local和Remote接口
2010-05-10 23:12 8312这篇文章主要来学习Ejb的组成元素,重点介绍Local和Rem ... -
Ejb学习之一---EJB3+Jboss4.2配置开发
2010-05-09 02:59 2897昨天,打算把Ejb整理下,最早用到Ejb+Jboss是在三年前 ... -
Struts Taglib库之(一)Bean讲解
2010-05-05 23:29 0最近准备换工作,也想把一些工作中用到的技术进行链接起来,就把它 ... -
转:Hibernate中cascade和inverse的相关
2011-11-19 17:51 680FROM:http://developer.51cto.com ... -
Struts1和Struts2有何不同?
2010-04-19 00:42 0Struts1和Struts2的区别和对比: Action ... -
Struts2中的Vistor模式
2010-04-19 00:40 1557Visitor访问者模式定义 作用于某个对象群中各个对象的操作 ... -
Spring中的Singleton模式和Prototype模式
2010-04-19 00:06 1832对于在Spring+Struts2结合配置Action=&qu ... -
WebService介绍
2010-04-18 17:01 2981记得初次接触WebService是 ... -
Spring中的Singleton模式和Java中的Singleton模式
2010-04-17 17:09 12694对于Spring中实现Singleton模式,是以IOC容器为 ... -
JavaMail来读取和发送邮件的基本流程
2010-04-15 01:21 1943在应用程序中使用JavaMail来读取邮件的基本流程如下: ... -
SSH框架优缺点【转】
2010-04-15 00:53 6174在过去的一年里,可能 ... -
J2EE面试题
2010-04-14 11:17 0一、基础问答 1.下 ... -
JTOM
2010-04-13 00:24 0JTOM是一个基于Java开放源代码的事物处理管理器。它遵 ...
相关推荐
5. **ejb-3_0-pfd-spec-ejbcore.pdf**:这份文档详细介绍了EJB 3.0的核心概念,包括Bean的类型、生命周期、安全性、事务管理和并发控制等内容。 6. **ejb-3_0-pfd-spec-persistence.pdf**:这份文档主要关注EJB 3.0...
标题中的“ejb3-entitybean-maven-archetype”是一个基于Maven的EJB 3实体Bean项目模板,用于快速构建Java企业级应用程序。EJB(Enterprise JavaBeans)是Java EE平台的一部分,它提供了一种标准的方式来开发可复用...
1. EJB Core (ejb-3_0-fr-spec-ejbcore.pdf): EJB Core涵盖了EJB的基础架构,包括会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。在EJB 3.0中,主要引入了注解驱动...
在本文中,我们将详细介绍ejb-jar文件的配置说明。 ejb-jar文件的配置主要包括以下几个部分:<ejb-jar>、、<display-name>、<small-icon>、<large-icon>、<enterprise-beans>等。 <ejb-jar>元素是ejb-jar文件的根...
**EJB 3.0 学习指南** EJB(Enterprise JavaBeans)是Java平台企业版(Java EE)的一部分,用于构建可扩展、安全且事务处理能力强大的分布式应用程序。EJB 3.0是该技术的一个重要里程碑,它极大地简化了开发过程,...
3. **无接口的会话Bean**:在EJB 3.0之前,会话Bean需要实现特定的接口。EJB 3.0允许创建无接口的会话Bean,只需要一个公共类即可,这降低了学习曲线。 4. **依赖注入(Dependency Injection)**:EJB 3.0引入了...
此外,EJB 3还引入了JSR 330的`@Inject`注解,它是通用的依赖注入注解,不仅限于EJB,也可以用于注入其他类型的依赖,如CDI(Contexts and Dependency Injection)中的bean。 至于“ejb3HelloWorld”这个压缩包文件...
了解这些基础知识后,开发者可以深入学习EJB3的高级特性,如安全性、定时器服务和异步方法调用,以及JBoss AS7的集群和热部署功能。同时,掌握分布式事务处理对于构建高可用性和高并发的分布式系统至关重要。
在这个ejb-3_1-pr-api.zip文件中,我们主要关注的是EJB 3.1的编程模型和API。 EJB 3.1的重要特性包括: 1. **注解驱动的开发**:与EJB 2.x相比,EJB 3.1大量使用了Java注解,使得开发者无需编写大量的XML配置文件...
传统实体bean(CMP, Container-Managed Persistence)由容器管理持久性,而bean-managed persistence(BMP)由开发者自己管理。 - EJB 3.0引入了Java Persistence API(JPA),用注解替代XML配置,简化了实体bean的...
【ejb-3_0-fr-api】:这是一个与企业级JavaBeans(EJB)3.0规范相关的资源,特别是它的法语版API文档。EJB是Java平台企业版(Java EE)的核心组件之一,用于构建可扩展、分布式、事务处理和安全的服务器端应用程序。...
EJB3提供了多种bean类型,包括无状态会话bean、有状态会话bean、消息驱动bean和实体bean。 2. **本地接口** 本地接口是bean暴露给客户端调用的一种方式,它不需要远程通信,因此比远程接口更高效。在EJB3中,我们...
基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-...
首先,实体Bean是EJB的一种类型,代表业务逻辑中的持久化对象。在EJB 3中,实体Bean的实现相比之前的版本更为简化,通过注解(Annotations)和JPA(Java Persistence API)进行配置,使得开发更加便捷。 1. **注解...
在提供的`ejb3HelloWorld`示例中,我们可能看到一个简单的EJB 3.0应用,包含一个状态less session bean(如`HelloBean`)和对应的接口(如`Hello`)。这个例子通常会演示如何声明bean,如何注入依赖(如`@...
EJB规范定义了三种主要的组件类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。 **1. 会话bean** 会话bean代表一次会话或一个客户的工作流。它们是无状态或有...
本篇内容将基于提供的文件信息——“ejb-3_0-fr-spec-persistence.pdf”进行深入分析,探讨EJB 3.0中的关键概念和技术要点。 #### 核心概念 1. **EJB 3.0简介**: - EJB 3.0是EJB技术的一个重要里程碑,它在保留...
《ejb-3_0-pfd-spec-...总结而言,《ejb-3_0-pfd-spec-persistence.pdf》不仅详细介绍了EJB 3.0的规范,还深度解析了Java Persistence API的关键概念和技术细节,对于理解和实践企业级应用开发具有重要指导意义。