⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 19.html

📁 写给JSP初级程序员的书
💻 HTML
📖 第 1 页 / 共 4 页
字号:
      JavaBeans体系结构<BR></B><BR>  EJB服务器是管理EJB容器的高端进程或应用程序,并提供对系统服务的访问。EJB服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如CORBA服务)的访问,对SSL 
      3.0的支持等。一个EJB服务器必须提供对可访问JNDI的名字服务和事务服务支持。一些可能的EJB服务器的例子如:<BR><BR>?数据库服务器<BR>?应用服务器<BR>?中间件服务器<BR><BR><BR>  EJB容器是一个管理一个或多个EJB类/实例的抽象。它通过规范中定义的接口使EJB类访问所需的服务。容器厂商也可以在容器或服务器中提供额外服务的接口。<BR><BR>  现在没有EJB服务器和EJB容器间接口的规范。因为目前容器通常由EJB服务器来提供,所以一旦接口标准化了,厂商就可能提供可以在任何兼容的EJB服务器上运行的容器。<BR><BR>  Home接口列出了所有定位、创建、删除EJB 
      类实例的方法。Home对象是home接口的实现。EJB类开发者必须定义home接口。容器厂商应该提供从home接口中产生home对象实现的方法。<BR><BR>  远程接口(remote 
      interface)列出了EJB类中的商业方法。EJBObject实现远程接口,并且客户端通过它访问EJB实例的商业方法。EJB类开发者定义远程接口,容器开发商提供产生相应的EJBObject的方法。客户端不能得到EJB实例的引用,只能得到它的EJBObject实例的引用。当客户端调用一个方法,EJBObject接受请求并把它传给EJB实例,同时提供进程中必要的包装功能。客户端应用程序通过home对象来定位、创建、删除EJB类的实例,通过EJBObject来调用实例中的商业方法。客户端可以用Java来编程,通过Java 
      RMI来访问访问home对象和EJBObject,或用其他语言编程并通过CORBA/IIOP访问,使得部署的服务器端组件可以通过CORBA接口来访问。<BR><BR><IMG 
      height=407 src="ejb_img1.jpg" tppabs="http://www.chinajavaworld.com/doc/ejb/images/ejb_img1.jpg" 
      width=421><BR>   上图是Enterprise 
      JavaBeans体系结构的一个描述。下一节详细讨论了每个组件的细节。<BR><BR>************** 
      <P><SPAN class=txt><B><FONT 
      color=#ff0033>理解EJB组件<BR></FONT><BR>  </B>你现在应该已经熟悉了整个EJB体系结构及其主要的部件。这一节更详细地描述了这些部件,并解释它们运行时的行为语意。 
      <B>Home接口</B>  EJB库使用enterprise 
      bean的客户端通过它的home接口创建它的实例。Home接口包含一或多个用来创建enterprise 
      bean实例的create()方法。这个home接口不是由bean来现,而是通过称为home object的类来实现。一个home 
      object的实例在服务器中实例,使得客户端可以访问它们。<BR><BR>  定位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开发者和客户端应该忽略它。<BR><BR><B>Home接口中的方法<BR><BR>  </B>Enterprise 
      bean开发者定义ejbCreate()方法的同时必须在home接口中声明与其相应的create()方法。实体bean可以包含finder方法以使得客户端能定位已有的实体bean.<BR><BR>  Home接口是通过继承javax.ejb.EJBHome来定义的。该接口包含如下的方法:<BR>public 
      interface javax.ejb.EJBHome extends Remote {<BR>public EJBMetaData 
      getEJBMetaData() throws RemoteException;<BR>public void remove(Handle 
      handle) throws<BR>RemoteException,RemoveException;<BR>public void 
      remove(Object primaryKey) 
      throws<BR>RemoteException,RemoveException;<BR><BR>  一个bean的home接口可以象下面这样:<BR>public 
      interface myHome extends EJBHome {<BR>public myRem create() throws 
      RemoteException,CreateException;<BR>public myRem create(String str) 
      throws<BR>RemoteException,CreateException;<BR><BR>  其中public interface 
      myRem extends EJBObject { … 
      }容器开发商负责提供实现home接口的home对象,因为只有开发商才能实现存贮enterprise 
      bean的库的编码。容器定义容器在理解EJB规范时容器这个术语并不应从字面上简单地理解为类,而是一层代替bean执行相应服务的接口。容器开发商提供运行在EJB服务器中一套完成这些功能的工具和接口。<BR><BR>  这些服务包括:?与二级存储中交换(对会话bean)<BR>?持久性管理(对实体bean)<BR>?实现创建和查找服务的home 
      object的可用性<BR>?在可通过JNDI访问的名字空间home 
      object的可视性<BR>?正确的创建、初始化和删除bean<BR>?保证商业方法正确地运行在事务上下文中<BR>?实现某一基本的安全服务<BR>?从home 
      object和EJBObject上的RMI上产生stub和skeleton<BR><BR>  容器和EJBObject对规范经常引用由容器或EJBObject提供的服务。这些服务只是用来说明而不暗示特殊类的服务需求。支持enterprise 
      bean的EJBObject和容器类都由容器开发商提供。这些类必须完成bean容器的功能。对bean来说容器和EJBObject是不同的入口点,对某个特殊的服务提供支持独特的能力。例如,容器通过读部署描述符来知道应用于bean方法的事务属性。然而,这些商业方法通过EJBObject调用。EJBObject必须与容器通讯来确定调用商业方法的事务上下文。确定以后,EJBObject在调用商业方法以前建立事务上下文。重要的是EJBObject 
      和容器的协同工作来实现容器所需的事务。容器厂商提供二者的实现,但对二者的功能分割却是自由的。与home接口的关系<BR><BR>  目前厂商提供工具来读home 
      接口并产生作为容器的home object.在这种情况下厂商对每个enterprise 
      bean类使用不同的容器类。容器厂商可以使用其它的实现策略,如一个容器类实现多个home接口,甚至一个标准的容器类创建独立的home 
      object实现。唯一的必要条件是容器厂商必须使客户端能通过JNDI访问home object. 客户端和bean开发者都不需关心容器和home 
      object的实现细节。Enterprise JavaBeanEnterprise 
      bean是开发者编写的提供应用程序功能的类。开发者可以选择创建会话bean或实体bean,通过实现不同的接口声明其部署描述符来加以区分。<BR><BR>对于会话bean:<BR>public 
      class myBean implements javax.ejb.SessionBean …<BR>对于实体bean:<BR>public 
      class myBean implements javax.ejb.EntityBean 
      …<BR><BR>  客户端不会直接访问enterprise bean中的任何方法。客户端通过EJBObject 
      间接调用bean中的方法,EJBObject就象一个代理一样。在把调用通过EJBObject传递时,容器开发商通过包装编码插入其自己的功能,这称为方法插入。方法插入的一个例子是为每个方法调用创建一个新的事务上下文,当方法返回到EJBObject时提交或回滚事务。当容器厂商的工具在安装bean产生stub和skeleton时,它产生bean的EJBObject一个stub和skeleton.实际上它并不创建bean本身的stub和skeleton,因为bean不会通过网络被访问。EJBObject是真正的网络对象。Bean 
      是包含应用相关的商业编码的代表。容器也可以调用bean中的某个方法。例如,容器保证当一个bean 
      实例生成后,homeobject中的create()的任何参数会传递bean相应的ejbCreate()方法。 
      Enterprisebean还有其它的接口和要求。然而,会话bean和实体bean的要求是不同的。这些在随后详述会话和实体bean的章节中会cover.Remote 
      Interface编写完enterprise bean后开发者创建了一个客户端可访问创建方法的home interface,在home 
      interface中每一个create()方法在相应的bean中都必须有一个ejbcreate()方法。同样,开发者必须创建描述客户端能够访问的商业方法的remoteinterface。因为所有的客户端调用都通过EJBObject,因此实现这个接口的是EJBObject而不是homeobject. 
      Remote interface中列出的方法名和signature必须和实现bean的方法名和signature相同。这不同于home 
      interface--方法signature是一样的,而名字却不同。<BR><BR>  以下是一个remote 
      interface的例子:<BR>public interface Account extends javax.ejb.EJBObject 
      {<BR>public void deposit(double amount) throws RemoteException;<BR>public 
      void withdraw(double amount) throws RemoteException;<BR>public double 
      balance() throws 
      RemoteException;<BR>}<BR>  所有声明的方法都必须抛出一个RemoteException例外,因为规范要求客户端stub是RMI兼容的。但这并不意味着排除了用其它的传输方式的stub/skeleton实现,如CORBA/IIOP.Remote 
      interface继承javax.ejb.EJBObject接口,增加了额外的方法要求。EJBObjectEJBObject是网络上可视的对象,包含stub和skeleton,作为bean的代理。Bean的remoteinterface继承了EJBObject接口,而EJBObject类实现这个remote 
      interface,使得bean类有自己的EJBObject类。对每个bean类有一个定制的EJBObject类。<BR><BR>  如下是EJBObject接口的定义,被bean的remote 
      interface继承:<BR>public interface javax.ejb.EJBObject extends 
      java.rmi.Remote {<BR>public EJBHome getEJBHome() throws 
      RemoteException;<BR>public Object getPrimaryKey() throws 
      RemoteException;<BR>public Handle getHandle() throws 
      RemoteException;<BR>public void remove() throws 
      RemoteException,RemoveException;<BR>public boolean isIdentical(EJBObject 
      other) throws 
      RemoteException;<BR>}<BR>  实现这个接口的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的联系。<BR>****************</SPAN></P>
      <P><SPAN class=txt><B>会话bean<BR><BR>  </B>会话bean是一种通过home 
      interface创建并对客户端连接专有的enterprise 
      bean.会话bean实例一般不与其它客户端共享。这允许会话bean维护客户端的状态。会话bean的一个例子是购货车,众多顾客可以同时购货,想他们自己的购货车中加东西,而不是向一个公共的购货车中加私人的货物。<BR><BR>  定义一个会话bean可以通过定义一个实现javax.ejb.SessionBean接口的类来创建一个会话bean.该接口定义如下:<BR>public 
      interface javax.ejb.SessionBean extends javax.ejb.EnterpriseBean 
      {<BR>public void ejbActivate() throws RemoteException;<BR>public void 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -