`
isiqi
  • 浏览: 16595882 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

EJB 3.0的三大类型详解

阅读更多
  无论你创建bean会话是为了执行特定任务,还是把表映射到实体bean以更新数据,都可以使用普通的Java对象和接口来完成这些工作,并且可以通过在业务方法中使用注释,把方法提供给客户端。
  Enterprise JavaBean (EJB) 是可重用的、可移植的 J2EE 组件。EJB 由封装业务逻辑的方法组成。譬如说,EJB 可能有这样的业务逻辑:包含了更新数据库中客户数据的方法。众多远程和本地客户端可以调用该方法。另外,EJB 在容器里面运行,这样开发人员只要关注bean里面的业务逻辑,不必担心复杂、容易出错的问题,譬如事务支持、安全性和远程对象访问等。EJB 作为普通Java对象(POJO)的形式来开发,开发人员可以使用元数据注释(metadata annotations)来指定容器如何管理这些bean。
  EJB 包括三种主要类型:会话 bean、实体 bean和消息驱动的bean。会话bean执行独立的、解除耦合的任务,譬如检查客户的信用记录。实体bean是一个复杂的业务实体,它代表数据库中存在的业务对象。消息驱动的bean用于接收异步JMS 消息。下面,让我们进一步研究EJB 3.0规范中的这些类型。
  一、会话bean
  会话bean通常代表业务流程里面的操作,譬如“处理订单”。可根据对话状态的保持性,即有状态和无状态对会话bean进行分类。
  无状态的会话 bean没有内部状态。它们不跟踪记录从一个方法调用传递到另一个方法调用的信息。因此,每次调用无状态的业务方法都独立于前一次调用,譬如计算税款或者运费。用某个应税值调用计算税款的方法时,对税款值进行计算并返回给调用方法,而不必保存调用者的内部状态供以后调用。因为这些bean并不保持状态,所以容器对它们进行管理就很简单。客户端请求无状态的bean实例时,可以从容器保持的无状态的会话bean 实例池当中接收一个实例。另外,因为无状态的会话 bean可以共享,所以容器可保持数量较少的实例为许多客户端提供服务。想指定Java Bean作为无状态的会话bean加以部署及管理,只需要为该bean添加注释@Stateless。
  有状态的会话 bean在方法调用时可保持对话状态,譬如客户的网上购物车。客户开始网上购物时,可以从数据库中检索客户的详细信息。客户往购物车里面添加商品或者从里面删除商品、下订单等时调用的其他方法也可以使用这些详细信息。不过,有状态的会话bean是暂时性的,因为出现会话终止、系统崩溃或者网络故障后,状态不复存在。客户端请求有状态的会话bean实例时,就为该客户端分配一个有状态的实例,并为该客户端保持该组件的状态。要指定容器在某个方法完成后删除有状态的会话bean实例,只要为该方法添加注释@Remove。
  会话 bean示例如下:
  import javax.ejb.Stateless.*;
  /*A simple stateless session bean implementing the incrementValue() method of the * CalculateEJB interface.*/
  @Stateless(name="CalculateEJB")
  public class CalculateEJBBean
  implements CalculateEJB
  {
  int value = 0;
  public String incrementValue()
  {
  value++;
  return "value incremented by 1";
  }
  }
  二、实体bean
  实体bean是管理持久性数据的一个对象,有可能使用几个相关的Java对象,并可以通过主键实现惟一性。通过添加@Entity注释,可以把某类指定为实体bean。实体bean代表数据库中的持久性数据,如客户表中的一行或者员工表中的一条员工记录。实体bean还可以在多个客户端之间共享。譬如说,某个员工实体bean可以由多个客户端用于计算某员工的年薪或者更新员工地址。实体bean对象的特定字段可以成为持久性字段。实体bean中没有被@Transient注释标记的所有字段都被视为持久性字段。EJB 3.0的一个主要特性就是,能够使用元数据注释来创建包含对象/关系映射的实体bean。譬如说,想指定把实体bean的empId字段映射到 Employees表中的EMPNO属性,就要使用@Table(name="Employees") 来注释表名,使用 @Column(name="EMPNO") 来注释字段,如下面的例子所示。另外,EJB 3.0 的一个特性是,在开发期间可以方便地测试实体bean,因为现在使用 Oracle 应用服务器实体测试工具,就可以在容器外面运行实体bean。
  实体 bean示例如下:
  import javax.persistence.*;
  import java.util.ArrayList;
  import java.util.Collection;
  @Entity
  @Table(name = "EMPLOYEES")
  public class Employee implements java.io.Serializable
  {
  private int empId;
  private String eName;
  private double sal;
  @Id
  @Column(name="EMPNO", primaryKey=true)
  public int getEmpId()
  { return empId;}
  public void setEmpId(int empId)
  { this.empId = empId; }
  public String getEname()
  { return eName; }
  public void setEname(String eName)
  { this.eName = eName; }
  public double getSal()
  { return sal; }
  public void setSal(double sal)
  { this.sal = sal; }
  public String toString()
  {StringBuffer buf = new StringBuffer();
  buf.append("Class:")
  .append(this.getClass().getName()).append(" ::") .append(" empId:").append(getEmpId()).append(" ename:") .append(getEname()).append("sal:").append(getSal());
  return buf.toString();}
  }
  三、消息驱动的bean
  消息驱动的bean(MDB)为实现异步通信提供了一种比使用直接的Java消息服务(JMS)更简单的方法。MDB用于接收异步JMS消息。容器处理JMS队列和主题所需的大部分设置进程。它把所有消息发送给相关的MDB。MDB允许J2EE应用程序发送异步消息,随后这些消息由应用程序来处理。要把bean指定为MDB,需要实现javax.jms.MessageListener接口,并且用@MessageDriven注释该bean。
  消息驱动的bean示例如下:
  import javax.ejb.MessageDriven;
  import javax.ejb.ActivationConfigProperty;
  import javax.ejb.Inject;
  import javax.jms.*;
  import java.util.*;
  import javax.ejb.TimedObject;
  import javax.ejb.Timer;
  import javax.ejb.TimerService;
  @MessageDriven(
  activationConfig = {
  @ActivationConfigProperty(propertyName="connectionFactoryJndiName",
  propertyValue="jms/TopicConnectionFactory"),
  @ActivationConfigProperty(propertyName= "destinationName", propertyValue="jms/myTopic"),
  @ActivationConfigProperty(propertyName= "destinationType", propertyValue="javax.jms.Topic"),
  @ActivationConfigProperty(propertyName= "messageSelector", propertyValue="RECIPIENT = 'MDB'") } )
  /** A simple Message-Driven Bean that listens to the configured JMS Queue or Topic and gets notified via an * invocation of it's onMessage() method when a message has been posted to the Queue or Topic.The bean
  * prints the contents of the message. */
  public class MessageLogger implements MessageListener, TimedObject
  {
  @Inject javax.ejb.MessageDrivenContext mc;
  public void onMessage(Message message)
  { System.out.println("onMessage() - " + message);
  try
  {
  String subject = message.getStringProperty("subject");
  String inmessage = message.getStringProperty("message");
  System.out.println("Message received\n\tDate:" + new java.util.Date() + "\n\tSubject:" + subject + "\n\tMessage:" + inmessage + "\n");
  System.out.println("Creating Timer a single event timer");
  TimerService ts = mc.getTimerService();
  Timer timer = ts.createTimer(30000, subject);
  System.out.println("Timer created by MDB at:" + new Date(System.currentTimeMillis()) +" with info:"+subject); }
  catch (Throwable ex)
  { ex.printStackTrace(); }
  }
  public void ejbTimeout(Timer timer)
  { System.out.println("EJB 3.0:Timer with MDB");
  System.out.println("ejbTimeout() called at:" + new Date(System.currentTimeMillis()));
  return; }
  }
  四、使用 EJB 3.0
  EJB客户端是访问bean的应用程序。它不必位于客户端层上,但可以是独立的应用程序、Java服务器页面(JSP)、服务器小程序或者另一个EJB。客户端通过bean的远程或本地接口来使用EJB的方法,远程还是本地取决于客户端是在同一个JVM里面还是不同的JVM里面。这些接口定义了bean的方法,而bean类负责实际实现这些方法。客户端访问bean类的方法时,容器就会为bean生成一个代理,名为远程或者本地对象。远程或者本地对象接收请求后,交给相应的bean实例,并将结果返回给客户端。想调用bean的方法,客户端需要通过使用EJB部署描述符(deployment descriptor)里面定义的bean名称来找到该bean。在以下的示例中,客户端使用Context对象找到名为“Statelessejb”的bean。

本文转自
http://java.chinaitlab.com/EJB/356299.html
分享到:
评论

相关推荐

    李腾飞EJB3.0 源码 源代码

    "李腾飞EJB3.0 源码 源代码"可能包含的是李腾飞教授或团队关于EJB 3.0技术的实践示例或教学资源。通过分析这些源码,开发者可以深入理解EJB 3.0的实现细节,例如如何使用注解定义Bean、如何处理持久化、如何进行依赖...

    EJB 3.0实例教程.pdf

    **企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上用于构建分布式企业级应用的重要组件模型。EJB 3.0是EJB规范的一个重大革新,它极大地简化了EJB的开发过程,引入...

    EJB3.0 EJB3.0

    **企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上用于构建分布式企业级应用程序的一种组件模型。EJB 3.0是EJB规范的一个重大革新,它极大地简化了EJB的开发过程,...

    EJB3.0详解

    在EJB3.0中,主要定义了三种类型的Bean: 1. **会话Bean(Session Bean)**:会话Bean负责业务逻辑的实现。它们分为有状态会话Bean(Stateful Session Bean)和无状态会话Bean(Stateless Session Bean)。无状态...

    EJB3.0实例教程(源代码).rar )

    **企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的组件模型。EJB 3.0是其一个重要版本,它引入了许多改进,使得开发过程更为简化,降低了EJB的复杂性,更加...

    EJB3.0 帮助文档

    **企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的分布式应用程序的一种组件模型。EJB 3.0是EJB规范的一个重大革新,它极大地简化了开发过程,并引入了许多...

    EJB3.0+weblogic操作文档

    【EJB3.0+weblogic操作文档】详解 EJB (Enterprise JavaBeans) 是Java EE平台中的核心组件,用于构建分布式、事务处理和安全的企业级应用。EJB3.0是EJB规范的一个重大改进,它引入了注解驱动的编程模型,大大简化了...

    EJB3.0 ——黎活明

    **企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上用于构建可扩展、安全且事务处理能力强大的分布式应用程序的组件模型。EJB 3.0作为其第三个主要版本,引入了许多...

    yeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程详解

    ### yeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程详解 在深入探讨如何在yeclipse7.0与JBoss5.0环境下构建和测试EJB3.0应用之前,让我们先了解一些背景知识。EJB(Enterprise JavaBeans)是Java平台的一部分,用于...

    EJB3.0 实例教程(pdf)以及所带源代码(10M)

    **EJB3.0 实例教程详解** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建可扩展的、安全的、事务性的企业级应用。EJB3.0是EJB的一个重大更新,引入了许多改进,使得开发过程更为简化,降低了对...

    最新EJB3.0实例教程

    ### 最新EJB3.0实例教程知识点概览 #### 一、EJB3.0简介及适用人群 - **EJB3.0**:即Enterprise JavaBeans 3.0,是Java EE平台中用于开发分布式企业级应用程序的核心组件模型之一。相比之前的版本,EJB3.0大幅简化...

    EJB3.0开发环境配置

    ### EJB 3.0 开发环境配置详解 #### 一、引言 EJB (Enterprise JavaBeans) 是 Java 平台为企业级应用提供的一种组件模型。随着技术的发展,EJB 3.0 引入了许多改进,简化了开发过程并增强了性能。本文将详细介绍...

    EJB3.0 实例教程 pdf

    **EJB3.0 实例教程详解** EJB(Enterprise JavaBeans)是Java平台上用于构建企业级应用的一种组件模型,而EJB3.0作为其一个重要的版本,引入了许多重大改进,极大地简化了开发过程,降低了学习曲线。本教程由黎活明...

    ejb3.0实例教程源码

    **ejb3.0实例教程源码详解** `ejb3.0`是Java企业版(Enterprise JavaBeans)的一个重要版本,它引入了许多创新特性,极大地简化了开发过程,提升了可维护性和性能。本实例教程源码涵盖了ejb3.0的核心概念和技术,...

    EJB.rar_EJB3_EJB3.0_ejb

    **EJB 3.0 开发详解:异常处理与常见问题解决方案** Enterprise JavaBeans (EJB) 是Java EE平台的核心组件之一,它提供了一种规范化的服务器端组件模型,用于构建可扩展、分布式的企业级应用。EJB 3.0是EJB规范的一...

    JSF1.2+EJB3.0实现的一个项目实例.zip

    **JSF 1.2 和 EJB 3.0 技术详解** JavaServer Faces (JSF) 是一种用于构建用户界面的 Java EE 标准框架,它专注于简化 web 应用程序的开发。JSF 1.2 版本是在 2006 年发布,是 JSF 的一个里程碑版本,它引入了许多...

    《EJB3.0入门经典》的精简版.pdf

    **企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级应用服务器上的组件模型。EJB 3.0是其一个重要版本,它引入了许多改进,旨在简化开发过程并提高生产力。这本书《EJB...

    EJB3.0课件.rar

    **企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的组件化应用程序的标准。EJB 3.0是这一技术的一个重要里程碑,它引入了许多重大的改进,使得开发更加简单、...

    EJB3.0实例教程 源代码

    **EJB3.0实例教程源代码详解** 本教程源代码是针对黎活明的《EJB3.0实例教程》和《EJB3.0入门经典》这两本经典著作中的示例进行编写的,旨在帮助读者深入理解并实践EJB3.0(Enterprise JavaBeans 3.0)的核心概念和...

Global site tag (gtag.js) - Google Analytics