EJB中三种Bean的总结
会话bean(session bean):负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作。
会话bean分为两种:
无状态会话bean (Stateful Session Bean):平常我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高。正因为一个bean实例被多个用户使用,那么前一个用户设置的值有可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因此是无状态的。
当客户机和服务器建立连接之后,无状态会话bean处理单一的用户请求或商务过程。无状态会话bean不需要从以前的请求中提取任何状态。例如,用户的用户密码确认。用户输入密码后,发送请求。组件返回真或假来确认用户,一旦过程完成,无状态会话bean也宣告结束。
如:
Java代码
- import javax.ejb.Remote;
- import javax.ejb.Stateless;
- import com.mixele.ejb3.HelloWorld;
- @Stateless //该注解指明这个程序是个无状态的会话Bean
- @Remote(HelloWorld.class)
- public class HelloWorldBean implements HelloWorld {
- @Override
- public String sayHello(String name) {
- return name + "Say: Hello,World!";
- }
- }
有状态会话bean (Stateless Session Bean):有状态bean平常使用的并不多,因为它的一个bean实例只供一个用户使用,所以性能开销比较大,正因为它的实例只被一个用户使用,用户为它设置的值是不会被其他用户修改,所以可以正确保存用户设置的值,因此是有状态的。
当客户机和服务器建立连接之后,状态会话bean将一直在客户机和服务器之间保持着用户的某个状态。例如:用户使用银行的ATM时,经过验证之后,用户可以连续执行多次操作,在这个过程当中,用户的合法状态将一直被保留,直到她将信用卡取出,结束这次操作。这时,状态会话bean也就被销毁。
Java代码
- @Stateful //该注解指明这个程序是个有状态的会话Bean
- @Remote(HelloWorld.class)
- @Local(HelloWorldLocal.class)
- public class HelloWorldBeanStateful implements HelloWorld, HelloWorldLocal {
- public String sayHello(String name) {
- return name + " Say: Hello,World! -- in HelloWorldBeanStateful";
- }
- }
有状态Bean只是在类的注解上使用了:@Stateful
在代码上有状态Bean和无状态Bean区别不大,但是却是用了Bean实例的两种管理技术,即:
1. 无状态bean使用实例池技术管理bean。
2. 有状态bean使用激活(activation)管理bean。
每个用户都有自己的Bean实例,相当于有多少个用户就有多少个Bean实例为之服务。如果不采取任何机制,这样必然会导致服务器资源严重消耗,最后落个down机。为了解决这个问题,EJB引入了激活机制。激活机制实现的原理是这样的,在EJB服务器需要节省资源时,就从内存中收回bean实例,将其所保持的会话状态序列化到硬盘中,并且释放其所占有的内存,这个过程为钝化。若此时客户端对EJB再次发起请求,EJB容器会重新实例化一个Bean实例,并从硬盘中将之前的状态恢复。
实体bean(entity bean):它实际上属于java持久化规范(简称JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink等ORM框架各自为营的局面。
实体bean用来表示持久存储库里的一个东西。这通常就是指数据库里的一个东西,实体bean的一个实例就表示数据库表中的一行(不过,如果数据库得到了规范化,bean也有可能从多个表的数据行提取信息,也就是说,可能对应到多个表中的多个数据行)。实体bean的一个典型例子就是Customer(顾客),一个Customer实体bean可能表示Bo Olean,另一个Customer实体bean可能表示的是Trixia Lin。
实体bean只是数据模型,它不包括商务逻辑。实体bean可以将关系/对象数据库的数据映射到内存中供其它组件使用。实体bean是一直存在的,而且具有很高的容错性能。实体bean能供允许多用户同时访问。
如:
Java代码
- @Entity //标注该Bean为实体Bean
- @Table(name="person") //标注该Bean与数据库的person表进行映射
- public class Person implements Serializable {
- private static final long serialVersionUID = 1L;
- private Integer id;
- private String name;
- @Id //标注id属性是数据库表的主键,这个注解时实体Bean必须的
- @Column(name="id") //标注id属性与数据库表的id字段进行映射
- @GeneratedValue(strategy=GenerationType.AUTO) //指定主键生成策略
- public Integer getId() { return id; }
- public void setId(Integer id) { this.id = id; }
- @Column(name="name",length=20,nullable=false)
- public String getName() { return name; }
- public void setName(String name) { this.name = name; }
- public int hashCode() { ………… }
- public boolean equals(Object obj) { ………… }
- }
消息驱动bean(message-driven bean):它是专门用于异步处理java消息的组件,具有处理大量并发消息的能力。只有在需要一个JMS客户的时候才会实用消息驱动bean。换句话说,消息驱动bean可以监听来自JMS消息服务的消息。客户绝对不会直接调用消息驱动bean;要想让消息驱动做点什么事情,客户必须向一个消息服务发出一条消息。这说明,消息驱动bean没有相应的EJBObject,因为服务器会从消息服务直接得到客户请求,而不是当客户向bean发出调用时截获客户请求。NewCustomerNotification订购者就是一个典型的消息驱动bean。
相关推荐
JavaEE5学习笔记05-EJB之会话Bean总结...
EJB之消息驱动Bean的总结。ejb 消息驱动Bean j2ee jms java
个人总结的EJB3中MessageDrivenBean的相关知识,现分享与大家,欢迎下载。
主要介绍了Java中BEAN与EJB的区别浅析,本文总结了它们之间的不同之处,需要的朋友可以参考下
自己总结的EJB3上课教案,包括SessionBean、EntityBean、MDB、O/R映射与继承映射、持久化实体管理器、EJB3-QL、JTA等的教案.
EJB入门程序,包括远程、本地的比较,有状态、无状态的比较,以及会话Bean周期、拦截器、以来注入的学习。还有消息驱动Bean和实体Bean的学习。在使用之前有学会配置,否则程序不能运行。下载使用的人不...
EJB2和EJB3的架构异同.doc EJB3.0运行环境配置.doc EJB的角色.ppt Java分布式处理技术.doc 会话Bean的开发.doc 面试常考的EJB知(总结).doc 实体Bean的开发.doc 消息驱动Bean的开发.doc
Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...
第一天内容:Spring框架简介(EJB、JMX、Spring核心功能、Spring模块详解、Spring重要概念(容器)、Spring容器初始化的整个流程、Spring后处理器),IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性...
这三种框架在一起并不冲突,所以现在最常用的框架就是 struts+hibernate+spring就像我们盖房子一样,先把框架搭好,我们在在上面写代码就很规范。 Struts框架介绍 : Struts只是一个MVC框架(Framework),用于...
46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...
11.1.1. 选择一种工作模式 11.1.2. Spring JDBC包结构 11.2. 利用JDBC核心类控制JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 ...
1.5.4 如何选择和使用Entity Bean 1.5.5 其他的一些小技巧 第二章 应用服务器调优 2.1 JVM调优 2.1.1 垃圾收集和堆大小 2.1.2 jRockit调优 2.2 Server调优 2.2.1 尽量使用本地I/O库 2.2.2 调整默认执行线程数 2.2.3 ...
2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步...
其中HTML用于表现层的静态网页,JSP用于表现层的动态网页,CSS用于定义HTML/JSP网页中公用的外观样式,JAVA用于开发Servlet/Bean/EJB,JS用于浏览器端输入校验,XML用于描述系统配置等内容,SQL用于数据库访问。
本书内容非常全面,涵盖了多册J2EE书籍所有知识要点,并结合作者自己经验总结而编写,内容相当丰富 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的废话、例子,以增加书本厚度,使得阅读者...
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。 流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的...
在对由三部分组成的 Spring 系列 的第 1 部分进行总结时,我使用了一个示例,演示了如何通过 Spring IOC 容器注入应用程序的依赖关系(而不是将它们构建进来)。 我用开启在线信用帐户的用例作为起点。对于该实现,...
11.1.1. 选择一种工作模式 11.1.2. Spring JDBC包结构 11.2. 利用JDBC核心类控制JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 ...
作者:阿德里亚诺·桑托斯·拉莫斯技术:CDI、JSF、JPA、EJB、JPA 总结:jsf 中的 crud 示例来源: : 信息 它是一个带有 crud 的 Maven 3 项目,在 JBoss Enterprise Application Platform 6 或 JBoss AS 7 上使用...