Java 天地
企业JavaBeansTM技术介绍(4)
作者:不详 来源:天极网
安全是所有企业产品的需求。EJB组件模型充分发挥了核心Java平台安全模型的作用,
从而给予你两种设置安全的方法。第一, 你可以在Bean的EJB-JAR文件中设置安全描述符; 第二,
你可以使用java.security包实现对安全的程序化管理。
EJB的另一个设计特性是独立于对象的通信协议。这有许多好处, 首先,
它可以使编写客户端应用程序的程序员免于选择通信协议; 其次, 它允许EJB服务器的建立者实现对其用户最为重要的协议。例如,
ORB提供者可能仅仅实现CORBA协议, 而UNIX提供者则可能实现RMI和CORBA协议。但无论如何,
所用协议对Bean的开发人员是透明的, 他仅仅针对Java平台来编写程序。
Java平台为EJB服务器提供了许多继承性的优点。最明显的一点是, 一旦基于Bean的应用程序编成后,
它便可以在任何可运行企业Bean服务器的地方运行;其连带的优点是升级性。如果你目前的EJB应用程序在性能上出了问题,
你可以将应用程序的主要部分移植到另一个更高性能的平台的EJB服务器上。
专用容器可大大简化对现存企业应用程序的访问。这样的容器可使现存非Java语言应用程序作为Bean出现,
它使Java开发人员可在不了解现存系统和应用程序特点的情况下访问那些应用程序。
开发人员的角色分配
EJB技术将开发人员分成固有的五种角色: 服务器提供者、 容器提供者、
企业Beans提供者、 应用程序装配者和部署者。对上述五种角色描述如下: 服务器提供者是分布式事务管理方面的专家,
主要负责处理分布式对象和低层次系统服务。数据库和TP监控器厂商可典型地充当该角色。
容器提供者一般是系统编程方面的专家, 由于容器有能力将EJB环境与现存应用程序(如SAP
R/3和CICS)桥接起来, 因而这些专家有可能具备某一应用领域的经验。由于容器为Bean提供了安全、可升级和事务性的环境,
因而容器提供者需具备这些领域的经验。数据库和事务服务器厂商也适合这一角色, 并可提供标准容器。
企业Beans提供者为EJB应用程序提供"积木",
他们是典型的以Bean的形式编写商务逻辑的域专家,而他们不一定是数据库或系统编程方面的专家。他们生成包括所有组件在内的EJB
JAR文件。对象库厂商适合这一角色。
应用程序装配者是域专家, 他们的工作是用第三方Beans建立应用程序,
他们也有可能建立客户端GUI。典型的应用程序装配者通常是程序员,他们建立应用程序来可访问已部署的组件。
部署者通常熟悉企业的操作环境,
他们利用应用程序包并设置部分或全部应用程序的安全和事务描述符。部署者也有可能使用工具来修正Bean的商务逻辑。
开发过程
值得注意的是,
有几种不同的建立EJB应用程序和组件的方案。开发过程的不同主要取决于是否编写session Bean、entity
Bean和应用程序或上述三项的某种组合。
考虑一个有关帐目检查并编写session Bean的简单方案。
建立EJB组件的开发过程是简单的: 首先, 你应该使用IDE(如Java Workshop, Cafe
或JBuilder)为你的Bean或基于Bean的应用程序编写商务逻辑;编译后, Beans被打包到一个EJB JAR文件中,
它与常规的JAR文件相似, 但包含了一个序列化的DeploymentDescriptor类实例,
其中包括了对安全、事务行为等的设置;然后, 你应该使用服务器厂商提供的部署工具在EJB服务器上安装Bean。至此,
部署者(如数据库管理员)将设置Bean在特定站点的属性, 如事务模式或安全等级。一旦Bean被安装到了服务器上,
则客户可调用实例的远程方法。
请看一个有关电子商务的例子--
一个网上"购物车"。考虑一下你将如何建立一个购物车Bean? 或许你应该从建立Bean的远程接口开始:
public
interface ShoppingCart extends javax.ejb.EJBObject{ boolean
addItem(int itemNumber) throws
java.rmi.RemoteException; boolean purchase() throws
java.rmi.RemoteException; }
这个接口定义了两个方法:
additem()用于向购物车中增加物品, purchase()用于完成这笔交易。一旦公共接口的定义完成,我们必须编写Bean的类:
public class ShoppingCartEJB implements
SessionBean{ public boolean addItem(int itemNumber){ // the
code for adding items to the cart // may include JDBC
code. } public boolean purchase(){ //the code for
purchases } public ejbCreate(String accountName, String
account){ // object initialization
code } }
请注意, 企业Bean类不实现Bean的远程接口,
它是由EJBObject来完成的。另外, session Bean不支持自动的persistence。因而,
显式数据库访问必须在其方法中实现。例如, 在purchase()方法中, JDBCTM调用可被用来更新数据库,
而由容器在安装时生成的EJBObject可实现远程接口;EJBObject的作用就象是一个"代理人",
它将方法调用传递给安装在服务器中的Bean实例。
|