选择显示字体大小

enterprise javabeans导论二

理解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的联系。


出处 www.apusic.com    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons