|
|
翻译:Smiling_Sundoc:李高健 企业JavaBeans组件(企业beans)是企业版JAVA 2 平台(J2EE)架构的关键建立块。这章包括: · J2EE架构的主要思想。 · 企业beans所充当的角色和EJB™层J2EE模型的其它元素。 · EJB应用程序的组件和工作流程 · EJB Builder建立器,它是在Sun Java System (SUN开放的网络环境)环境下,为JAVA企业版软件(如Sun Java System Studio 4 IDE,集成开发环境),提供自动生成的集合并为其他图形用户接口(GUI)提供支持。 如果你已经熟悉了J2EE和开发Enterprise Beans ,并且特别想知道如何使用IDE 生成并使用你的企业Beans,请看第三章到第九章和附录。 一个enterprise beans只有当它放在EJB模块相关的部件里,并组装进应用程序程序中,并且在服务器上配置后才可作用。可将开发,组装,配置等任务分配给具有不同特长的开发者或工作组。本文档主要讨论EJB开发者在上交最终组装进一个应用程序中并在服务器上配置好的版本的部件之前所做的工作。这一系列的另一篇文档,Building J2EE Applications ,讨论了J2EE的设计,组装,和配置。 注: Sun Java System Studio 4 IDE 支持Enterprise JavaBeans Specification,(企业JAVA部件的说明),2.0版。 J2EE文档描述了基于服务的应用结构,其中,交易,升级,安全,轻便的JAVA组件等可进行配置和再配置,数据库,服务器和基于J2EE模型的客户访问机理等各层次的结合,你的组织可以开发支持你整个公司的应用程序。 一个J2EE应用程序结构典型的有下面主要特性:
图1-1 由Sun Java System Studio IDE支持的J2EE应用模型 一个enterprise bean 就是一个Java 组件,一系列构成商业实体的JAVA接口和类,这些接口和类包括一些在应用服务器上实现商业逻辑的方法。Enterprise bean中一种类型也包括可以映射到数据库列的字段,Enterprise bean另一种类型可以管理同一应用程序的内部关联。Enterprise bean可进行任何不同类型的组件(如图1-1所示)组合生成应用程序。 尽管enterprise beans和JavaBeans™部件都是使用JAVA编程语言,它们是不同的。你可以与设计工具一起使用JavaBeans,定制JAVA类,并且可以通过事件联结定制的对象。另一方面,Enterprise beans实现多用户的分散的,容器式处理的服务。 EJB级的设计使得Java部件更模块化和更灵活,正因如此,作为一个开发者的工作就应更多模块化设计:你可以将更多的注意力放在一个应用程序的商业数据而不是其分布式的计算处理实现,当你建立一个使用JavaBeans部件的处理,你也必须建立服务器构架。然而,当你使用enterprise beans建立一个J2EE模型的应用,服务器侧的架构已经建立在应用服务器上。你将不需要提供如交易,安全,或远程访问的支持的通用服务。 典型的EJB应用程序的主要配置如图1—2所示:一个应用客户端,一个应用服务器,EJB容器,至少一个enterprise bean,和一个数据存储器。在图中,使用数据库。 图1-2 EJB应用程序的典型配置 在enterprise bean部件,EJB容器和应用服务器之间的协议(就是,交联和应用协议)使得J2EE更灵活和有更多功能,同时简化了产生enterprise beans的过程。 与对象相比,EJB容器更是一个概念,它是在EJB服务器上包含enterprise beans的环境,EJB服务器提供软件生存周期管理,安全,分布式事务支持和其它服务。 一个或更多的enterprise bean使用标准的Java Naming and Directory Interface 容器对它的 beans和客户端应用程序起到协调作用,当一个客户端需要一个enterprise beans工作时,容器中途截取方法调用,容器除了代表enterprise beans和它们的客户端作用,还可以通过调用,组件,甚至运行在其它服务器上容器来进行管理服务(如安全和交易)这种设计特性使得容器能自由、透明地使用服务。 对于独立的enterprise beans部件,容器可以管理数据库的持续(persistence)和交易。这就确保了一个状态管理事件的标准方法。这就意味着,即使没有你,EJB开发者写SQL代码或直接使用JDBC API(除非你需要忽略容器的默认行为),你的beans部件也可进行访问数据库操作。 容器的服务确保了客户端中断或服务器关闭时,enterprise bean中持续的数据得到保存。 应用服务器提供了低级的支持如:命名服务,目录服务和电子邮件服务等。 Enterprise beans 有三种主要类型:会话 bean,实体 bean 和信息驱动 bean。这些类型的更多详细细节在第二章讨论。下面简要描述一下每一种类型: · 会话bean管理客户机和EJB服务器之间的会话,能管理实体bean间的复杂的相互调用关系。例如,请求数据时,会话bean可以将请求传递给实体bean,并为结果数据打包,返回给客户端。 ·实体beans通常代表一个实体,或数据库中的一个数据表。在应用服务器上,许多实体bean可通过Java虚拟机(JVM)协调工作。 ·信息驱动bean形成客户端和服务器间的功能层。这种类型接收客户消息通知,异步启动与配置在服务器上的其他enterprise beans 部件的交互作用。 完成的enterprise beans 部件打包进入EJB模块(它是EJB JAR 文件的一个逻辑结构),组装进应用程序中并在服务器上部署。一个应用服务器可包含一个或多个J2EE应用程序,一个J2EE应用程序可包括一个或多个EJB模块,一个EJB模块可允许一个或多个enterprise beans 部件。 J2EE结构使用一种方法论,支持在应用程序建立过程按照职责不同,分为不同的角色。在一个典型的开发组织,一些组成员有更多的商业知识,而另外一些可能更熟练于系统级的开发,如果J2EE模型应用于一个组织,而且不是每个人都负责相同的工作,商业或领域专家可能是bean部件提供者和EJB开发者,而更多的有系统思想的开发者可能进行组装或配置工作。 在开发环境中至少三个角色是相同的
IDE,与它内建的enterprise beans 部件支持,被设计为建立J2EE应用程序。当你使用IDE建立你的enterprise beans 时,你可以更多的关注于写你的应用程序所需的商业逻辑。作为EJB开发的角色,你只需为组装和配置做最少的工作。 然而,需要时,一个人可充当所有的三个角色。IDE将为enterprise beans 部件开发,组装,和配置提供无缝的支持。 典型的EJB应用程序如图1-3所示,许多客户程序可以同时的访问应用程序的核心,它驻留在EJB服务器并由EJB容器管理。在EJB层,两个不同的会话beans的实例(一个由消息驱动bean提示)管理四个不同实体beans的交互,让客户机查找约定的日期和指定时间会面的地方。数据库的数据被读进实体bean的实例,实体bean实例的客户修改被写进数据库。 图1-3所有的三种enterprise beans 应用程序的例子 一个enterprise beans 中的元素 所有的enterprise beans 部件至少有一个类。
关于enterprise beans 接口更多的类信息,可看“接口类型”。 EJB应用程序的每一个元素的职责如下:
Bean方法 一个J2EE应用程序 通过客户端调用bean 的方法工作的,一个enterprise bean包括的方法种类在下面简要讨论,(详细的将在3章到第7章讨论)。所有的方法声明将由IDE自动的加上去或通过开发者显性声明。为了加上方法声明的所有部分,你可以参照对话框中的简短的顺序声明。
IDE在每一个实体 bean 的 local home 接口中(如果有,并可在 bean 的 home 接口 )自动生成一个 findByPrimaryKey 方法的声明。IDE也在每个实体bean部件的bean类中进行相应的 ejbFindByPrimaryKey 方法声明,管理自己的持久化存储(也就是,一个管理 bean 的持久化存储( persistence )的实体 bean,或 BMP 的实体 bean )的。如果开发者增加另外的 finder 方法,IDE 也在本地 home 或 home 接口中放置相应的方法声明,对于 BMP 实体 beans,在 bean 类中声明。增加的 finder 方法包括 EJBC 查询语言声明(EJB QL), beans 的应用服务器插件自动的转换成服务器需要的 SQL 代码的种类。
IDE在每个会话 bean 的 home 接口中生成 creat 方法的声明(如果有 beans 的本地 home 接口,在其中声明),IDE在 bean 类中放置一个相应的 ejbCreate 方法的声明,IDE 也在每个信息驱动的 bean 类中生成 ejbCreate 方法的声明。由于实体 bean 部件必须包含 creat 方法,IDE 不是自动生成实体 bean 部件声明。然而,如果开发者为实体 bean 增加一个 creat 方法,IDE 在相应的类中生成 create, ejbCreate, 和 ejbPostCreate 方法的声明,一个实体 bean 部件可能多个 create 方法。
开发者显性地增加business方法给bean部件,IDE不生成默认的business方法声明,然而,当开发者指定一个business方法,IDE在bean类和远程接口,本地接口,或远程与本地接口中放置相配的方法声明。
开发者可以显性的给bean类增加一个或多个select方法,select 方法包括EJB查询语言(EJB QL)的声明,bean的应用服务器插件自动地将它转化成服务器需要的SQL代码类型。
IDE自动地为每个bean类型生成适当的life-cycle方法声明,并将他们放在bean类中。 由于会话beans常由应用客户端调用,且生存于enterprise beans应用服务器之外,IDE提供远程类型(remote- type)的接口(也就是,remote接口和home接口)作为每一个会话bean的默认类型。然而,根据特定的会话bean的调用方法,在生成bean时,开发者可选择接口类型的一种或两种。 实体bean通常由同一个应用服务器内的会话bean和其他实体bean调用,这样的实体bean只需要本地类型(remote-type)的接口(也就是,本地接口和本地home接口),local-type接口保存处理时间,因为它们通过引用传送参数而不是一系列的参数值。然而根据位置,开发者可能在实体bean中使用其中之一或两种接口。 注:使用IDE测试特性进行测试的任何bean必须有远程接口。 下面讨论四种接口类型。 远程接口(remote) 客户端通过bean远程接口查看和访问enterprise bean。客户端能调用的business方法的签名在远程接口上,但business方法的完整代码在bean 类中,容器产生一个实现远程接口的类。 远程接口扩展为java.ejb.EJBOject,客户应用程序使用该接口通过调用JNDI 查找定位home接口,调用home接口的方法归档指定的bean实例(和作为返回类型的远程接口),然后调用实例的business方法。 当你使用Sun Java System Studio 4 IDE产生enterprise bean ,它带有remote-type 类型接口(通过接口,bean可以从服务器外调用),EJB Builder's GUI 支持和帮助,确保了远程接口的方法是依据J2EE文档中定义的规则。这些规则包括:
接口节点看上去象IDE浏览器窗口: Home 接口 Enterprise bean 的home 接口扩展为javax.ejb.EJBHome,定义了客户端调用的creat和finder方法,客户程序使用JNDI定位home接口,容器提供实现home 接口的类。 当你使用 IDE产生enterprise bean ,它带有remote-type 类型接口,EJB Builder's GUI 支持和帮助,确保了home接口的方法是依据 enterprise bean定义的主要规则。这些规则包括:
接口节点看上去象IDE浏览器窗口: Local (本地)接口 Local 本地接口与remote远程接口在某些方面相似,这种类型接口包括可由bean调用的business方法的签名。方法的完整代码在bean类中。容器生成实现本地接口的类,然而,一个bean 本地接口的调用必须来自同一服务器中另一个bean部件或web组件。 Local 接口的扩展名为javax.ejb.EJBOLocalObject,客户应用程序通过调用JNDI查询,使用该接口定位本地home接口,调用本地home接口的方法归档bean的特定的实例,然后调用实例的business方法。 当你使用 IDE产生enterprise bean ,它带有local-type 类型接口,EJB Builder's GUI 支持和确认帮助,确保了local本地接口的方法是依据 J2EE文档定义的规则。这些规则包括:
接口节点看上去象IDE浏览器窗口: 本地home接口 某些方面与home接口类似,enterprise bean的本地home 接口扩展为javax.ejb.EJBLocalHome,定义create 和finder方法,它们可由相同服务器上另一个bean调用,容器提供了实现本地home接口的类。 当你使用 IDE产生enterprise bean ,它带有local-type 类型接口,EJB Builder's GUI 支持和确认帮助,确保了本地home接口的方法是依据 enterprise beans部件中定义的主要规则。这些规则包括:
接口节点看上去象IDE浏览器窗口: Bean 类 Bean类是enterprise bean的核心,包括在其它两个类中定义的实现。一个实体bean的bean类扩展了javax.ejb.EntityBean接口,会话bean的bean类扩展了javax.ejb.SessionBean,并且消息驱动的bean的bean类扩展为javax.ejb.MessageDrivenBean。bean 类实现了enterprise bean的finder,creste,business,home,和select方法。类也实现了容器调用的life-cycle方法。 当你使用Sun Java System Studio IDE产生enterprise bean ,EJB Builder's GUI 支持和帮助,确保了bean类是依据 enterprise beans 这些和其它的主要规则。这些规则包括:
Bean类节点看上去象IDE浏览器窗口: EJB QL当你增加一个finder方法或select方法给CMP实体bean时,你可以插入EJB 查询语言的声明定义方法的查询,用EJB QL语言写的查询语句,你的bean能浏览在它的schema中定义的关系,也就是,bean的persistence和关系的配置描述的部分。EJB QL还可查询所有相关的实体beans部件(打包在相同的EJB JAR文件)的schema。 当你的bean配置到应用服务器上,EJB QL查询也被转化成存在的数据存储的目标语言。这样,使用EJB QL的实体bean就适用于不同的数据存储系统。 配置描述器 enterprise bean的配置描述器阐述了bean如何配置在服务器上,配置描述器,是一个XML文件,列出并描述了组成enterprise bean类,与其它的beans的传递参数地址,bean操作的环境设定,以及bean在运行时如何管理。文件也列出了实体bean的persistence字段,它代表容器的persistence管理。 当你利用Sun Java System Studio IDE生成enterprise bean,EJB Builder建立器自动生成配置描述器,并确保跟踪J2EE标准,(因为你通常通过enterprise bean 属性表工作,而不是直接处理配置描述器,描述器文件不会出现在IDE浏览窗口。然而,你可以通过浏览器打开描述器文件。) 运行EJB应用程序的工作流程 运行时,应用客户端首先与enterprise bean的home接口通讯,然后与远程接口通讯,但不会直接与enterprise bean对象通讯,所有的客户操作都是通过EJB容器。 运行时,应用程序各部分相互作用如图1-4所示,具体的每步在下面解释。(这是一个通用的工作流,使用的例子仅是一个带有romote-type类型接口的enterprise bean。其中的有些步骤,例如如实例池的操作,可能并不会适用于某些类型的enterprise beans 部件。) 图1-4 运行的应用程序的工作流 1. 客户端在应用服务器中和容器中找到enterprise bean(也就是,客户使用JNDI查找方法,获取enterprise bean的home接口的远程引用。)在客户端生成相应的存根(stub)。 2. Home对象在服务器端生成实现bean的home接口,home 存根请求bean的home的对象(充当工厂),产生一个enterprise bean实例,供客户应用在会话时使用。 3. 容器从池中取走一个bean实例。 4. 在服务器侧生成远程对象实现bean的远程接口,客户应用通过远程调用和远程对象,调用bean实例的business方法。 5. 从数据库中读出数据到bean实例并传送到客户,任何的更新将被写到数据库事务中。 6. 客户应用程序收到它请求的结果,容器返还实例到池中。 注意没有多线程编程的情况下,这种结构如何支持多并发用户的。因为enterprise bean 用户从池中获得它们自己的bean实例,开发者可以写简单的,单线程的代码。 Enterprise bean 的开发周期 如图1-5所示,一个enterprise bean生成后,在你准备使用之前,还需经过几个步骤。 图1-5 开发,组装,和配置enterprise bean部件
作为一个EJB开发者使用Sun Java System Studio IDE,你要根据如下步骤生成enterprise bean ,并准备编译和配置。 1. 使用EJB Builder 向导和GUI支持(在3至7章中描述)生成enterprise bean类。 2. 使用IDE’Sourse Editor和GUI支持进行denterprise bean 编码,如果能让EJB容器管理你的会话bean的交易和实体bean的persistence,你可有更少的代码要写。 3. 使用IDE,与其它的enterprise beans一起,在EJB模块内,给enterprise bean打包,使用EJB属性表,增加对配置描述器的beans部件的外部依赖关系。 4. 使用IDE的EJB应用程序测试(第9章描述)为bean生成WEB 测试客户程序,并测试。为了准备这一步,你要进行组装和配置步。注意bean能在后来的生产环境中可配置到不同 如果你将手动开发enterprise bean,许多工作你将不得不做,并且整个过程需要十分小心;而Sun ONE Studio IDE可以让你避开这些烦琐的事情,自动生成EJB。下面就是一些你在使用IDE时需要做的工作。
在IDE中开发enterprise beans 你可使用EJB Builder Wizard向导生成enterprise bean的框架,向导让你选择bean类型:会话的,实体或消息驱动的bean,并有bean的持续数据资然的选项和bean的事务管理和持续等选项。向导将带你通过所有的生成主要组件的步骤。 图1-6显示了一个IDE 生成的典型enterprise bean的各部分,和各部分如何出现在IDE浏览窗口中。这个图使用了带有remote-type类型接口的会话bean部件。 图1-6 浏览窗口所显示的enterprise bean的生成的各元件 在向导生成这些主要的元件后,你可使用EJB Builder 的其它GUI特性给你的bean增加方法,并且使用Source Editor完成编码。 产生相关的CMP实体beans的集合 EJB Builder 向导允许你在一个过程中,与EJB 模块一起,生成CMP实体beans的全部集合的框架,如果你的beans所代表的数据表与外部键相关,该特性更有用。在实体的bean集中,这些外部键作为管理容器关系的键保存。 提供事务处理 在 enterprise bean部件模型中,事务处理被设计为隐性地和显性地处理。当方法在bean 实例中调用时,EJB 容器将介入,并管理事务处理。你将不得不编写事务处理,或控制事务边界的调试代码。通过EJB Builder 向导作一些选择,你可以声明的bean的事务处理属性,以后你可使用bean的EJB模块的属性表更精确地调整属性。 然而,通常,你可能需要在一个会话bean中显性地编写事务处理。IDE允许你忽略容器进行声明,并支持JDBC API和Java Transaction API(JTA)的使用,管理你的beans部件的事务处理。 提供persistence 与事务处理一起,IDE允许你指定beans的persistence处理完全赋给EJB容器,或你自己编写persistence代码。如果你自己处理它,你需要写JDBC代码,如果你想容器管理persistence,你通过EJB Builder向导做一些选择开始,最后在属性表中作一些声明,使得容器能找到你的存在的数据存储。 提供安全 如果仅是特定的用户可以调用enterprise bean方法,你可能需要增加安全编程给 bean部件。然而,你不需要在你的bean源代码中写完整的安全程序,在你的代码中的安全参考匹配一个为方法生命的安全角色。为了匹配,可以简单地改变bean的属性表格的一项,那么安全信息就加到配置描述器中。 当客户试图调用bean 的安全方法,EJB容器将比较用户的角色和你的访问控制表(你授权的用户可执行bean的方法),并且允许或拒绝执行。 产生客户应用程序 除了开发enterprise beans部件,构成应用程序的EJB层,你可使用IDE生成应用客户端。应用客户端是一个独立的JAVA程序,以自己的main方法开始,运行在J2EE容器中,与其它的J2EE应用组件包括EJB模块共同作用。对于设计和开发客户机的细节参考Building J2EE Applications 设计enterprise bean和EJB层的细节,请参考在http://java.sun.com/products/ejb/docs.html 上的Enterprise JavaBeans Specification, version 2.0,
|
|
||||||||||||||||||||||||||||||||||||||||||||