理解EJB组件
你现在应该已经熟悉了整个EJB体系结构及其主要的部件。这一节更详细地描述了这些部件,并解释它们运行时的行为语意。
Home接口
EJB库使用enterprise bean的客户端通过它的home接口创建它的实例。Home接口包含一个或多个用来创建enterprise bean实例的create()方法。这个home接口不是由bean来实现,而是通过称为home object的类来实现。一个home object的实例在服务器中实例化,使得客户端可以访问它们。
定位home object 一个home object的引用被放在名字服务中,客户端能通过JNDI访问它。EJB服务器一般提供某种名字空间的实现,虽然有时可以使用外部的名字空间。在这两种情况下客户端都必须知道名字空间的位置以及JNDI的上下文类。例如,一个客户端的applet可能接收名字空间和JNDI上下文类作为applet的参数。
除了提供位置和类名,客户端也必须知道在名字树中定位home object.这些必须在客户端启动时提供。当部署者把enterprise bean部署进EJB服务器中时,他必须可以以参数形式指定名字树,如ejb/accounting/AccountsPayable.客户端必须获得这个完整的路径名来定位并获得AccountsPayable home object的引用。并不是说客户端通过JNDI获得容器。客户端使用JNDI查找home接口的实现。Home接口的实现由某个特殊的container来提供,但这是该容器厂商的细节,enterprise bean开发者和客户端应该忽略它。
Home接口中的方法
Enterprise bean开发者定义ejbCreate()方法的同时必须在home接口中声明与其相应的create()方法。实体bean可以包含finder方法以使得客户端能定位已有的实体bean. Home接口是通过继承javax.ejb.EJBHome来定义的。该接口包含如下的方法:
public interface javax.ejb.EJBHome extends Remote {
public EJBMetaData getEJBMetaData() throws RemoteException;
public void remove(Handle handle) throws
RemoteException,RemoveException;
public void remove(Object primaryKey) throws
RemoteException,RemoveException;
一个bean的home接口可以象下面这样:
public interface myHome extends EJBHome {
public myRem create() throws RemoteException,CreateException;
public myRem create(String str) throws
RemoteException,CreateException;
其中
public interface myRem extends EJBObject { … }
容器开发商负责提供实现home接口的home对象,因为只有开发商才能实现存贮enterprise bean的库的编码。
容器
定义容器在理解EJB规范时容器这个术语并不应从字面上简单地理解为类,而是一层代替bean执行相应服务的接口。容器开发商提供运行在EJB服务器中一套完成这些功能的工具和接口。
这些服务包括:
·与二级存储中交换(对会话bean)
·持久性管理(对实体bean)
·实现创建和查找服务的home object的可用性
·在可通过JNDI访问的名字空间home object的可视性
·正确的创建、初始化和删除bean
·保证商业方法正确地运行在事务上下文中
·实现某一基本的安全服务
·从home object和EJBObject上的RMI上产生stub和skeleton
容器和EJBObject对规范经常引用由容器或EJBObject提供的服务。这些服务只是用来说明而不暗示特殊类的服务需求。支持enterprise bean的EJBObject和容器类都由容器开发商提供。这些类必须完成bean容器的功能。对bean来说容器和EJBObject是不同的入口点,对某个特殊的服务提供支持独特的能力。例如,容器通过读部署描述符来知道应用于bean方法的事务属性。然而,这些商业方法通过EJBObject调用。
EJBObject必须与容器通讯来确定调用商业方法的事务上下文。确定以后,EJBObject在调用商业方法以前建立事务上下文。重要的是EJBObject 和容器的协同工作来实现容器所需的事务。容器厂商提供二者的实现,但对二者的功能分割却是自由的。与home接口的关系
目前厂商提供工具来读home 接口并产生作为容器的home object.在这种情况下厂商对每个enterprise bean类使用不同的容器类。容器厂商可以使用其它的实现策略,如一个容器类实现多个home接口,甚至一个标准的容器类创建独立的home object实现。唯一的必要条件是容器厂商必须使客户端能通过JNDI访问home object. 客户端和bean开发者都不需关心容器和home object的实现细节。
Enterprise JavaBean
Enterprise bean是开发者编写的提供应用程序功能的类。开发者可以选择创建会话bean或实体bean,通过实现不同的接口声明其部署描述符来加以区分。
对于会话bean:
public class myBean implements javax.ejb.SessionBean …
对于实体bean:
public class myBean implements javax.ejb.EntityBean …
客户端不会直接访问enterprise bean中的任何方法。客户端通过EJBObject 间接调用bean中的方法,EJBObject就象一个代理一样。在把调用通过EJBObject传递时,容器开发商通过包装编码插入其自己的功能,这称为方法插入。方法插入的一个例子是为每个方法调用创建一个新的事务上下文,当方法返回到EJBObject时提交或回滚事务。
当容器厂商的工具在安装bean产生stub和skeleton时,它产生bean的EJBObject一个stub和skeleton.实际上它并不创建bean本身的stub和skeleton,因为bean不会通过网络被访问。EJBObject是真正的网络对象。Bean 是包含应用相关的商业编码的代表。
容器也可以调用bean中的某个方法。例如,容器保证当一个bean 实例生成后,home object中的create()的任何参数会传递bean相应的ejbCreate()方法。 Enterprise bean还有其它的接口和要求。然而,会话bean和实体bean的要求是不同的。这些在随后详述会话和实体bean的章节中会cover.
Remote Interface
编写完enterprise bean后开发者创建了一个客户端可访问创建方法的home interface,在home interface中每一个create()方法在相应的bean中都必须有一个ejbcreate()方法。同样,开发者必须创建描述客户端能够访问的商业方法的remote interface。
因为所有的客户端调用都通过EJBObject,因此实现这个接口的是EJBObject而不是home object. Remote interface中列出的方法名和signature必须和实现bean的方法名和signature相同。这不同于home interface--方法signature是一样的,而名字却不同。以下是一个remote interface的例子:
public interface Account extends javax.ejb.EJBObject {
public void deposit(double amount) throws RemoteException;
public void withdraw(double amount) throws RemoteException;
public double balance() throws RemoteException;
}
所有声明的方法都必须抛出一个RemoteException例外,因为规范要求客户端stub是RMI兼容的。但这并不意味着排除了用其它的传输方式的stub/skeleton实现,如CORBA/IIOP.
Remote interface继承javax.ejb.EJBObject接口,增加了额外的方法要求。
EJBObject
EJBObject是网络上可视的对象,包含stub和skeleton,作为bean的代理。Bean的remote interface继承了EJBObject接口,而EJBObject类实现这个remote interface,使得bean类有自己的EJBObject类。对每个bean类有一个定制的EJBObject类。
如下是EJBObject接口的定义,被bean的remote interface继承:
public interface javax.ejb.EJBObject extends java.rmi.Remote {
public EJBHome getEJBHome() throws RemoteException;
public Object getPrimaryKey() throws RemoteException;
public Handle getHandle() throws RemoteException;
public void remove() throws RemoteException,RemoveException;
public boolean isIdentical(EJBObject other) throws RemoteException;
}
实现这个接口的EJBObject类是一个RMI服务器对象,因为它是他实现了一个RMI remote interface.注意bean本身不是一个remote object,在网络上是不可视的。当容器实例化了这个EJBObject类时,容器会初始化bean实例的引用,使得它能正确地delegate商业方法调用。
厂商的实现是维护EJBObject实例和bean实例的一对一关系。因为remote interface包含EJBObject接口的方法,所以bean不必显式地实现这个接口,虽然它提供了列出的商业方法的实现。因为EJBObject必须正式地实现bean的remote interface,容器在bean安装时产生EJBObject的源代码,这些产生的源代码实现了bean的remote interface.典型的EJBObject有一个独特的类名,作为EJBObject类和bean的联系。
FROM:http://java.chinaitlab.com/EJB/20117.html
分享到:
相关推荐
Applying Enterprise JavaBeans Second Edition
由于提供的文件内容中并没有实际的关于"Enterprise JavaBeans 3.0"的具体知识点,而只是提到了一本书的标题、描述和标签,并且重复了大量访问网站的信息。为了满足您的要求,我将从标题和描述中提到的《Enterprise ...
本书主要介绍EJB3.0标准,是获奖权威参考书Enterprise JavaBeans的最新第5版。全书内容主要分为两大部分,第一部分是EJB 3.0的标准技术手册,主要介绍EJB概念、EJB工作原理及使用方法;第二部分是JBoss实践指南,...
### Enterprise JavaBeans 3.0概述 #### 一、企业级应用开发背景 在现代企业级应用开发领域,Java技术一直扮演着至关重要的角色。随着业务需求的不断增长和技术的快速发展,开发人员需要构建出更加灵活、高效且可...
Mastering Enterprise JavaBeans Chinese Version.
Enterprise JavaBeans(EJB)是Java平台上用于构建可扩展、安全和事务处理的企业级应用程序的框架。EJB 3.0是该技术的一个重大更新,它引入了许多改进,旨在简化开发过程并提高开发者效率。本文档集合是EJB 3.0规范...
- **EJB (Enterprise JavaBeans)**:是一种服务器端组件模型,主要用于构建企业级应用程序,提供了事务管理、安全性、持久性等功能支持。 ##### 2. **EJB容器的作用** - **容器管理**:EJB容器负责管理EJB组件的...
### 《Mastering Enterprise JavaBeans 第三版》关键知识点概览 #### 一、书籍基本信息 - **书名**:《Mastering Enterprise JavaBeans》第三版 - **作者**:Ed Roman, Gerald Brose, Rima Patel Sriganesh - **...
《Enterprise JavaBeans 4th Edition》是一本专为深入理解J2EE(Java 2 Platform, Enterprise Edition)和Web服务的开发者所准备的经典教程。在Java企业级开发领域,Enterprise JavaBeans(EJB)是核心组件之一,它...
《Reilly.Enterprise.JavaBeans.3.1.6th.Edition.2010》是针对JEE6(Java Enterprise Edition 6)平台的一本权威指南,特别关注于Enterprise JavaBeans(EJB)3.1版本。这本书由Oracle Corporation认证,为希望获得...
Enterprise JavaBeans™ is the core component technology of the Java Enterprise Edition platform. It is an enterprise infrastructure designed to provide developers with the automatic management of many...
Enterprise JavaBeans(EJB)是Java平台企业版(Java EE)的核心组成部分,用于构建可扩展、安全且事务处理能力强的服务器端应用程序。 在EJB 2.0版本中,主要包含了三种类型的组件:会话bean(Session Beans)、...
### Enterprise JavaBeans™ 3.1 技术详解 #### 概览 Enterprise JavaBeans (EJB) 3.1 是一项重要的企业级应用开发技术规范,它在 EJB 3.0 的基础上进一步简化了应用程序的开发流程,并引入了一系列的新特性来提高...
2. **EJB容器**:学习EJB容器如何为Bean提供服务,如生命周期管理、事务处理、安全性和资源管理。理解无状态会话Bean和有状态会话Bean的区别。 3. **JNDI**:Java Naming and Directory Interface在EJB中的应用,它...
《精通企业JavaBeans 3.0》一书深入探讨了JavaBeans规范的最新版本,即3.0版,这是Java企业级开发中的一个重要里程碑。JavaBeans是Java平台的一部分,主要用于构建可重用的组件,这些组件可以被集成到各种应用程序中...
涵盖了从EJB体系结构的基础到开发事务性,可伸缩且安全的多用户企业应用程序所需的,从EJB开发开始的所有内容。
《Special Edition Using Enterprise JavaBeans 2》是一本深入探讨企业级JavaBeans(EJB)技术的专业书籍,专注于第二版的内容。EJB是Java平台上的一个核心组件,它为构建可扩展、安全且易于管理的企业级应用程序...
Special Edition Using Enterprise JavaBeans™ 2.0