〗裉?, 对企业开发人员来讲, 难以编写分布式商务应用程序和其它任何较大的应用程序是他们所面临着一个 1 2 3 4 5 6 :$
EJB技术的设计目标
服务器端环境和其所需工具极大地影响了EJB技术的设计目标。 一个主要的设计目标是减少(尽可能地)建立分布式应用程序的过程;它是通过将一般需要手工编码的特性转化为企业Beans简单声明属性来实现的, 这些声明属性使开发效率大大提高, 因为某些行为, 如安全和事务不是以代码形式, 而是通过Bean自身的"标记" 来设定的,。这种设计特性也是EJB技术使开发人员将注意力集中于编写商务逻辑的另一条途径。
EJB规范创建了一种底层结构, 它关系到系统级编程, 如事务、安全、线程、命名、对象生命周期、资源 1 2 3 4 5 6 :$
EJB 结构 上图显示了EJB技术的体系结构。EJB规范支持任何类型的客户, 因为该规范不强制要求任何远程对象的"网线"协议;这就意味着一个服务器可支持多种协议, 如RMI、IIOP(CORBA)和DCOM等;它也说明, 一个EJB服务器的客户程序不一定要用Java语言来编写。
EJB服务器实际是各种支持EJB安装的服务的集合, 这些服务包括分布式事务管理、分布式对象管理和对这些对象的分布式调用以及低层次系统服务。简而言之, EJB服务器管理那些支持EJB组件所需要的资源。一个EJB服务器提供商可提供一个容器的实现(详情见后), 他也可以为第三方厂商提供API以使其能嵌入附加EJB容器。EJB规范在服务器的设计和实现上给了开发人员以极大的自由。
EJB服务器正象是EJB组件的一个家, 而容器则是Bean生活的地方, 就象是一个记录"生活"在数据库中一样。它提供了一个可升级、安全和事务性的环境, 在该环境中Bean可以操作。处理对象生命周期(包括创建和销毁一个对象)的正是容器。容器也负责Bean的状态管理。
容器对客户是透明的, 容器上没有客户API。当一个Bean被安装在容器中时, 该容器提供两种实现: Bean的EJBHome接口的实现(详情见后)和Bean的远程接口的实现。容器也负责保证在JavaJNDI 中能够获得Bean的EJBHome接口。
要构造一个Bean, 你必须首先实现商务方法。 例如, 如果你正在编写一个帐目检查Bean, 你可能要实现一个"借方"方法用来作为接口的一部分;你还必须实现两种类型的EJB接口之一 --Session Bean或Entity Bean;这些接口包括了诸如与工作设置管理相关的方法并且不暴露给客户。
当把一个Bean安装在服务器上时, 远程接口(在CORBA中通常称作skeleton)则被自动生成。远程接口的实现被称为EJBObject, 它只将程序员指定的远程接口暴露出来。尽管企业Bean类包含了同样的方法, 但它并不实现远程界面。 EJBObject的作用就象是一个代理人, 它截取远程对象调用并调用企业Bean实例中的适当的方法。
一个EJB容器可实现安装在该容器中的每个企业Bean的EJBHome接口, 它允许Bean的创建和清除, 并且可查询有关Bean的信息或"元数据"。该容器使客户通过JNDI便可获得EJBHome接口。对Entity Beans来说, EJBHome接口也包含了一个或多个"finder"方法, 使客户用一个主键即可查询有关Bean的信息。
特性
应用程序开发人员所面临的最复杂的问题之一是编写分布式事务应用程序。EJB技术的一个主要特性就是它对分布式事务的支持;EJB技术使你可编写访问跨越多个EJB服务器的多重分布式数据库的应用程序。为使这一工作变得简单, EJB规范允许你在部署阶段就以声明的形式指出事务行为, 而管理事务行为的负担被转移给服务器, 特别是转移给容器和EJB服务器提供者。如果Bean的开发人员有更高的事务需求, 则可使Bean通过程序来管理事务界限。
$ 安全是所有企业产品的需求。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()用于完成这笔交易。一旦公 1 2 3 4 5 6 :$ 客户做的第一件事是使用JNDI为所需要的Bean定位EJBHome。在本例子中, EJBHome对象可能以下列形式出现:
public interface CartHome extends javax.ejb.EJBHome{
Cart create(String customerName , String account)
throws RemoteException, BadAccountException;
}
CartHome接口包含一个create()方法, 当客户请求一个新的Bean的时候该方法将被调用。请注意, 这个方法是在EJBObject中实现的并将在被调用时调用Bean类中的ejbCreate()方法。
ShoppingCart类的EJBHome对象可使用下列代码来定位:
Context initialContext = new InitialContext();
CartHome cartHome = (CartHome) initialContext.lookup
("application/mall/shopping-carts");
在本例中, 调用InitialContext()以得到JNDI命名层次的根;lookup()方法被用来得到CartHome。 在此种情况下, "applications/mall/shopping.carts"是JNDI到达你感兴趣的CartHome的路径。此时, cartHome持有了ShoppingCartEJB的EJBHome对象的引用。然而, 请注意客户的JNDI的命名空间可能被设置为包括分布于网络上的多种机器上的EJB容器; EJB容器的实际位置一般来说对客户是透明的。
$ 下例显示了客户是如何使用EJBHome对象并调用方法的:
ShoppingCart cart = cartHome.create("Emma","0507");
Cart.addItem(100);
Cart.addItem(251);
Cat.purchase();
在上述代码中, create()方法创建了一个新的session Bean, 变量cart 包括了一个对远程EJB Object的引用, EJB Object允许你调用它的方法additem()和purchase()。cartHome中的create()方法将调用对应的Bean中的ejbCreate()方法。
EJB的未来
EJB规范1.0是在1998年JavaOne大会期间发布的, 它为建立分布式商务对象系统提供了坚实的结构体系基础, 它不应该被认为是这一研究主题的结束, 而应该是进一步完善这一体系结构的开始。该规范的一些内容还需改进, 特别是处理persistence对象的EJB模型。另外, 还应考虑标准化开发工具和开发系统之间的协定,以为所有开发环境提供统一的调试界面。
将来, SunMicrosystem还将研究兼容性问题。有两个领域涉及到兼容性问题, 一是"EJB兼容的"服务器到底是由什么组成的? 一个兼容性计划有望在不久的将来出现; 二是保证不同厂商的EJB服务器具有相互操作性。Sun正在就这些问题征求其合作伙伴的意见, 以决定如何发展。
结论 企业JavaBean技术为我们提供了一种开发、部署和管理分布式商务应用程序的新途径。它使开发人员编写作为可重复使用的服务器组件的分布式商务应用程序变得更简单, 并且不必担心系统级编程问题。企业JavaBean组件结构代表了在简化企业应用程序的开发、部署和管理方面的一个巨大进步。有关企业JavaBean技术的完整描述, 请访问企业JavaBean的网。
1 2 3 4 5 6
| 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。 |