Chinaunix首页 | 论坛 | 博客
  • 博客访问: 483582
  • 博文数量: 1496
  • 博客积分: 79800
  • 博客等级: 大将
  • 技术积分: 9940
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 13:22
文章分类

全部博文(1496)

文章存档

2011年(1)

2008年(1495)

我的朋友

分类:

2008-09-09 13:27:57


  开发Beans
  一、会话Beans介绍
  按功能可把EJB分为两类:Session Beans 与 Entity Beans。
  
  1. 企业级Beans类
  
  为了使Beans可以在任一容器中工作,Beans必须被附在接口中。在EJB中,在enterprise Beans class中提供了企业级Beans组件的实现。这是个简单的遵循接口的类。 一个enterprise Beans class 包含对组件的实现细节。会话Beans的实现不同于实体Beans的实现, 一个Session Beans针对单一的客户完成一次连接或会话,其生存直到客户完成连接与会话,或系统意外中止。
  
  当一个新的客户从EJB Server访到一个Session Beans时,那么EJB Container创建一个新的Session Beans实例,其运行直到会话结束,Session Beans必须实现接口x.eJb.SessionBeans。 Entity Beans实现接口Javax.eJb.EntityBeans,其描述了特定数据源中的数据,能长时间存在于EJB Container中,不会随系统的意外中止而消失,并且可以让多个客户同时访问。
  
  EJB规范定义了许多Beans类能够实现的标准接口。定义了所有的Beans类必须有的方法。容器调用这些方法用来管理Beans。所有Beans类(无论是会话Beans还是实体Beans)必须实现的最基本的接口是Javax.eJb.EnterpriseBeans接口。
  
  public interface Javax.eJb.EnterpriseBeans extends Java。io。Serializable
  {
  }
  
  值得注意的是:它继承了Java。io。Serializable。所有的会话Beans必须实现Javax.eJb.SessionBeans,所有的实体Beans必须实现Javax.eJb.EntityBeans。
  
  EJB对象
  当客户想使用enterprise Beans class的一个实例时,客户不必直接在实际的实例上调用方法,调用过程被EJB容器截取,Beans实例被容器中对象所代表。
  
  1、Enterprise Beans class不能通过网络直接被调用,我们知道EJB容器可以操纵网络,因此它通过容器将Beans包装成可在网络上使用的对象。
  
  2、通过截取请求,容器可以自动执行许多必要的管理工作。
  
  3、EJB容器可以跟踪哪个方法被调用,在系统管理者的用户接口上显示其用法等等。
  
  因此,EJB容器可以看作间接的存在于客户代码和Beans之间的层。这个间接的层使用单独的网络对象来表示自己,这个对象称为EJB对象。EJB对象作为容器物理的部分;所有的EJB对象都有针对容器特殊要求的代码。因此,容器提供商提供专门工具,用来自动为EJB对象产生类文件。
  
  远程接口
  
  我们前面了解到,Beans客户调用EJB对象上的方法来代替调用Beans,为了执行它,EJB对象必须复制Beans类中的每个业务方法。但是,怎样才能使自动产生的EJB对象知道复制了哪个方法呢?这就用到了Beans提供者写的一个特殊的接口,这个接口复制所有的与Beans类相关联的业务逻辑方法。这个接口被称为远程接口。这个接口必须遵循EJB规范的定义,所有的远程接口必须从sun公司提供的通用接口继承而来,即Javax.eJb.EJBObJect。
  
  EJB对象
  public interface Javax.eJb.EJBObJect
  extends Java.rmi.Remote
  {
  public abstract Javax.eJb.EJBHome getEJBHome()
  throws Java.rmi.RemoteException;
  
  public abstract Java。lang。ObJect getPrimaryKey()
  throws Java.rmi.RemoteException;
  
  public abstract void remove()
  throws Java.rmi.RemoteException,
  Javax.eJb.RemoveException;
  
  public abstract Javax.eJb.Handle getHandle()
  throws Java.rmi.RemoteException;
  
  public abstract boolean isIdentical(Javax.eJb.EJBObJect)
  throws Java.rmi.RemoteException;
  }
  
  以上是对于所有EJB对象必须拥有的方法,你不需实现这些方法,这些方法的实现,生成EJB对象时由容器自动生成。客户端代码通过调用Javax.eJb.EJBObJect的方法来和Beans协同工作。
  
  Java RMI和EJB对象
  你应当注意到:Java。eJb。EJBObJect继承了Java.rmi.Remote。Java.rmi.Remote接口是Java远程方法调用(RMI)的一部分,任一个实现Java.rmi.Remote的对象都是rmote对象,它可以被另外的Java虚拟机所调用。
  
  被容器提供的EJB对象实现了远程接口,同时也间接实现了Java.rmi.Remote,这样也就意味着你的EJB对象是完全符合网络需要的,可以被网络上的其他Java虚拟机调用。当然,EJB接口也必须遵守EJB规范。
  
  EJB远程接口必须遵守Java的RMI远程接口规范。例如:错误处理,二者相同。
  
  远程接口同样也必须遵守Java RMI参数传递规范。不是什么都可以通过VM方法调用来在网络上传递,传递的参数必须符合RMI类型。EJB也继承了RMI的优点,对于RMI,你正在调用的远程对象的物理地址是不可见的。这个特点同样也适用于EJB。客户代码不必关心正使用的EJB对象是在邻近的计算机上还是从internat传递来的。这样,EJB对象可以和客户端处在同一个Java VM中。
  
  EJB保证了本地分布式组件的透明度。这种透明对于多层配置来说是非常必要的。客户端代码是非常容易移植的,不受限于特殊的多层配置。EJB容器可以以最佳化方式在本地执行。
  
  Home对象
  
  我们看到,客户端代码处理EJB对象,而从不直接操作Beans。那么,客户端如何得到EJB对象的参考呢?客户端不直接将EJB对象实例化。因为EJB对象可以存在于不同的机器中。同样的,EJB使本地透明化,因此客户端不知道它的确切所在。客户端代码通过EJB对象工厂得到EJB对象的参考。EJB规范里称这种工厂为home对象。它主要起一下作用:
  
  建立EJB对象。
  
  找到已经存在的EJB对象。
  
  删除EJB对象。
  
  在一些细节方面,EJB对象工厂同EJB对象的特征相同。
  
  Home接口
  
  Home接口简单的定义了建立、删除和寻找EJB对象的方法。容器的home对象实现了home接口。
  
  通常,EJB定义了所有home接口必须支持的许多方法,这些必须的方法被定义在Javax.eJb.EJBHome接口上,home接口必须继承Java。eJb。EJBHome接口。
  
  public interface Javax.eJb.EJBHome
  extends Java.rmi.Remote
  {
  public abstract EJBMetaData getEJBMetaData()
  throws Java.rmi.RemoteException;
  public abstract void remove(Handle handle)
  throws Java.rmi.RemoteException
  Javax.eJb.RemoveException;
  public abstract void remove(ObJect primaryKey)
  throws Java.rmi.RemoteException,
  Javax.eJb.RemoveException;
  }
  
  Javax.eJb.EJBHome接口
  注意Javax.eJb.EJBHome继承了Java.rmi.Remote,这意味着home接口同样也支持RMI远程对象,传递的参数和RMI也相同。
  
  Home对象
  
  所有home对象所需的方法
  
  配置描述符
  
  配置描述符允许EJB容器向企业级的Beans组件提供隐含的中间件服务。隐含的中间件服务是Beans可以获得不必将任何中间件API解码,可以自动获得服务的一种服务。
  
  Beans的特殊属性
  
  最后,你还需要有一个基于Java的Beans的属性文件。Beans在运行时读这些属性,这些属性在使用Beans函数时会被用到。
  
  EJb-Jar文件
  
  一旦生成Beans的类、home接口、远程接口、配置描述符和Beans的属性,我们就可以把它们打包成一个实体。这个实体称作EJb-Jar文件。这是个压缩文件。
  
  建立EJb-Jar文件
  
  什么是会话Beans,一个Session Beans针对单一的客户完成一次连接或会话,其生存直到客户完成连接与会话,或系统意外中止。Session Beans必须实现接口Javax.eJb.SessionBeans。
  
  会话Beans的生存期
  会话Beans和实体Beans的主要不同是它们的生存期的长短。会话Beans的生存期短。与客户的会话时间相当。在与客户连接端开时,EJB容器会破坏会话Beans。相反,实体Beans可以存活相当长的时间,实体Beans是永久存取的一部分,例如:数据库。会话Beans不能保存永久的数据,但是,它可以进行数据库操作。所有的会话Beans都需要管理callback方法,容器定时的调用它,用来对Beans的重要事件发出警告。这个方法仅能被容器调用。
  
  Conversational versus Nonconversational Session Beans
  
  如何写会话Beans
  写会话Beans的类,必须实现Javax.eJb.SessionBeans接口
  public interface Javax.eJb.SessionBeans
  extends Javax.eJb.EnterpriseBeans
  {
  public abstract void setSessionContext(SessionContext ctx)
  throws Java.rmi.RemoteException;
  
  public abstract void eJbPassivate()
  throws Java.rmi.RemoteException;
  
  public abstract void eJbActivate()
  throws Java.rmi.RemoteException;
  
  public abstract void eJbRemove()
  throws Java.rmi.RemoteException;
  }
  
  会话Beans和实体Beans都继承了Javax.eJb.EnterpriseBeans接口,让我们详细看看接口中的各种方法:
  
  setSessionContext(SessionContext ctx)
  容器调用这个方法来通过会话上下文与Beans连接。
  Beans可以通过会话上下文向容器查询当前事物的状态和当前的状态等。
  import Javax.eJb.*;
  public class MyBeans implements SessionBeans {
  private S
【责编:admin】

--------------------next---------------------

阅读(125) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~