`
zhjump
  • 浏览: 9677 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

EJB中三种Bean的总结

    博客分类:
  • Java
阅读更多

EJB中三种Bean的总结

会话bean(session bean):负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作。 
会话bean分为两种: 
无状态会话bean (Stateful Session Bean):平常我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高。正因为一个bean实例被多个用户使用,那么前一个用户设置的值有可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因此是无状态的。 
当客户机和服务器建立连接之后,无状态会话bean处理单一的用户请求或商务过程。无状态会话bean不需要从以前的请求中提取任何状态。例如,用户的用户密码确认。用户输入密码后,发送请求。组件返回真或假来确认用户,一旦过程完成,无状态会话bean也宣告结束。 
如: 
Java代码

  1. import javax.ejb.Remote;   
  2. import javax.ejb.Stateless;   
  3. import com.mixele.ejb3.HelloWorld;   
  4. @Stateless //该注解指明这个程序是个无状态的会话Bean   
  5. @Remote(HelloWorld.class)   
  6. public class HelloWorldBean implements HelloWorld {   
  7.     @Override  
  8.     public String sayHello(String name) {   
  9.         return name + "Say: Hello,World!";   
  10.      }   
  11. }  


有状态会话bean (Stateless Session Bean):有状态bean平常使用的并不多,因为它的一个bean实例只供一个用户使用,所以性能开销比较大,正因为它的实例只被一个用户使用,用户为它设置的值是不会被其他用户修改,所以可以正确保存用户设置的值,因此是有状态的。 
当客户机和服务器建立连接之后,状态会话bean将一直在客户机和服务器之间保持着用户的某个状态。例如:用户使用银行的ATM时,经过验证之后,用户可以连续执行多次操作,在这个过程当中,用户的合法状态将一直被保留,直到她将信用卡取出,结束这次操作。这时,状态会话bean也就被销毁。 
Java代码

  1. @Stateful //该注解指明这个程序是个有状态的会话Bean   
  2. @Remote(HelloWorld.class)   
  3. @Local(HelloWorldLocal.class)   
  4. public class HelloWorldBeanStateful implements HelloWorld, HelloWorldLocal {   
  5.     public String sayHello(String name) {   
  6.         return name + " Say: Hello,World! -- in HelloWorldBeanStateful";   
  7.      }   
  8. }  


有状态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代码

  1. @Entity //标注该Bean为实体Bean   
  2. @Table(name="person") //标注该Bean与数据库的person表进行映射   
  3. public class Person implements Serializable {   
  4.     private static final long serialVersionUID = 1L;   
  5.     private Integer id;   
  6.     private String name;   
  7.        
  8.     @Id //标注id属性是数据库表的主键,这个注解时实体Bean必须的   
  9.     @Column(name="id") //标注id属性与数据库表的id字段进行映射   
  10.     @GeneratedValue(strategy=GenerationType.AUTO) //指定主键生成策略   
  11.     public Integer getId() { return id; }   
  12.     public void setId(Integer id) { this.id = id; }   
  13.     @Column(name="name",length=20,nullable=false)   
  14.     public String getName() { return name; }   
  15.     public void setName(String name) { this.name = name; }   
  16.     public int hashCode() { ………… }   
  17.     public boolean equals(Object obj) { ………… }   
  18. }  


消息驱动bean(message-driven bean):它是专门用于异步处理java消息的组件,具有处理大量并发消息的能力。只有在需要一个JMS客户的时候才会实用消息驱动bean。换句话说,消息驱动bean可以监听来自JMS消息服务的消息。客户绝对不会直接调用消息驱动bean;要想让消息驱动做点什么事情,客户必须向一个消息服务发出一条消息。这说明,消息驱动bean没有相应的EJBObject,因为服务器会从消息服务直接得到客户请求,而不是当客户向bean发出调用时截获客户请求。NewCustomerNotification订购者就是一个典型的消息驱动bean。

分享到:
评论

相关推荐

    JavaEE5学习笔记05-EJB之会话Bean总结

    JavaEE5学习笔记05-EJB之会话Bean总结...

    JavaEE5学习笔记06-EJB之消息驱动Bean总结

    EJB之消息驱动Bean的总结。ejb 消息驱动Bean j2ee jms java

    EJB3中MessageDrivenBean知识

    个人总结的EJB3中MessageDrivenBean的相关知识,现分享与大家,欢迎下载。

    Java中BEAN与EJB的区别浅析

    主要介绍了Java中BEAN与EJB的区别浅析,本文总结了它们之间的不同之处,需要的朋友可以参考下

    EJB3 PPT教程

    自己总结的EJB3上课教案,包括SessionBean、EntityBean、MDB、O/R映射与继承映射、持久化实体管理器、EJB3-QL、JTA等的教案.

    EJB入门程序

    EJB入门程序,包括远程、本地的比较,有状态、无状态的比较,以及会话Bean周期、拦截器、以来注入的学习。还有消息驱动Bean和实体Bean的学习。在使用之前有学会配置,否则程序不能运行。下载使用的人不...

    EJB(2.0\3.0)串讲

    EJB2和EJB3的架构异同.doc EJB3.0运行环境配置.doc EJB的角色.ppt Java分布式处理技术.doc 会话Bean的开发.doc 面试常考的EJB知(总结).doc 实体Bean的开发.doc 消息驱动Bean的开发.doc

    java 面试题 总结

    Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...

    吴天雄--Spring笔记.doc

    第一天内容:Spring框架简介(EJB、JMX、Spring核心功能、Spring模块详解、Spring重要概念(容器)、Spring容器初始化的整个流程、Spring后处理器),IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性...

    java三大框架

    这三种框架在一起并不冲突,所以现在最常用的框架就是 struts+hibernate+spring就像我们盖房子一样,先把框架搭好,我们在在上面写代码就很规范。 Struts框架介绍 : Struts只是一个MVC框架(Framework),用于...

    Java面试宝典2010版

    46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...

    Spring中文帮助文档

    11.1.1. 选择一种工作模式 11.1.2. Spring JDBC包结构 11.2. 利用JDBC核心类控制JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 ...

    weblogic平台J2EE调优策略

    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 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    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(Java EE)技术总结-J2EE学习精华教程-电子书

    本书内容非常全面,涵盖了多册J2EE书籍所有知识要点,并结合作者自己经验总结而编写,内容相当丰富 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的废话、例子,以增加书本厚度,使得阅读者...

    Struts原理、开发及项目实施

    Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。 流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的...

    Spring面试题

    在对由三部分组成的 Spring 系列 的第 1 部分进行总结时,我使用了一个示例,演示了如何通过 Spring IOC 容器注入应用程序的依赖关系(而不是将它们构建进来)。 我用开启在线信用帐户的用例作为起点。对于该实现,...

    Spring API

    11.1.1. 选择一种工作模式 11.1.2. Spring JDBC包结构 11.2. 利用JDBC核心类控制JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 ...

    crud-jsf:带有 PrimeFaces(插入、更新和删除)的 JSF 应用程序示例

    作者:阿德里亚诺·桑托斯·拉莫斯技术:CDI、JSF、JPA、EJB、JPA 总结:jsf 中的 crud 示例来源: : 信息 它是一个带有 crud 的 Maven 3 项目,在 JBoss Enterprise Application Platform 6 或 JBoss AS 7 上使用...

Global site tag (gtag.js) - Google Analytics