并不是所有应用程序都适合于在 Enterprise JavaBeans (EJB) 环境中使用。按照这篇最佳实践中所列的标准对您的应用程序进行评估,就可以确定该应用程序是否适合于迁移到 EJB 环境。
读者: 架构设计师、开发人员和项目经理
产品:
WebSphere Application Server
版本:
3.0 或更高版本
平台:
所有平台
关键字: 企业 bean、 EJB
主题: 数据访问、EJB、迁移、可伸缩性和安全性
并不是所有企业应用程序都适合于在 Enterprise JavaBeans (EJB) 环境中使用。按照这篇最佳实践中所列的标准对您的应用程序进行评估,就可以确定该应用程序是否适合于迁移到 EJB 环境。
|
企业 bean 是用于企业应用程序的新 Java 组件模型。请注意:
在将您的应用程序迁移到 WebSphere Application Server 3.0 或更高版本 EJB 环境之前,需要考虑下列标准。如果您的应用程序符合其中的一条或多条标准,那么企业 bean 就适合于您的应用程序。
应 用程序软件(尤其是组成业务逻辑的规则和数据结构)通常是关键的公司财产,而且需要加以保护。例如,维护股票交易网站的金融机构可能要确保公众无权访问他 们的私有分析工具的源代码或目标代码。在类似这种情况下,需要将业务逻辑置于一组安全防火墙之后(经常称为 DMZ)。
企业 bean 所提供的分布式对象组件体系结构允许将宝贵的公司财产置于防火墙之后加以隔离,同时仍然允许表示代码访问防火墙后的 EJB 服务器。图 1 说明了这种类型的分布式解决方案。
|
| |
|
|
图 1:防火墙内的企业 bean
|
|
| |
该模型做了如下假设:
单个应用程序经常有需要访问相同数据的多种客户机类型。例如,应用程序可以有供外部客户使用的有限制的基于 Web 的 HTML 客户机,以及供内部用户使用的更完整的基于 Java 的客户机。这两种客户机都需要访问相同的数据源(数据库表)。
在 EJB 环境中,您可以将常用数据和业务逻辑置于单组企业 bean 中。这些 bean 被不同类型的客户机访问(例如,servlet/HTML 客户机和应用程序客户机)。企业 bean 控制对后端数据的访问,并且在内部管理当前事务和数据库锁定。
这一编程模型比传统解决方案更有效,传统解决方案为共享相同数据源的同一应用程序编写两个版本。使用企业 bean 除去了重复的应用程序代码需要,也减少了在编写数据库控制逻辑上所做的工作。
传统的“胖客户机”解决方案要求应用程序在数据库级别上管理对共享数据的访问。在这一级别上访问数据涉及处理数据库锁定和并发以保持数据完整性的复杂方案。
WebSphere Application Server 3.0 中的企业 bean 自动处理复杂的线程操作和同时发生的数据共享问题。在保持数据完整性的同时,它们控制对后端数据的访问并在内部对当前事务和数据库锁定进行管理。
许 多应用程序必须能够访问多个数据源。例如,请考虑一个使用中间层 Oracle 数据库和具有 MQseries 接口的大型机 CICS 或 IMS 系统上的数据的应用程序。下订单时,应用程序将该订单信息存储在 Oracle 数据库中,并同时通过 MQSeries 接口将发货订单发送给大型机系统。在类似情况下,为了维护数据源内数据的完整性,对数据的访问必须完全是事务性的。如果数据库更新或 MQSeries 排队操作失败,整个事务就必须回滚。
WebSphere Application Server 3.0 中的企业 bean 现在支持具有跨多个 DB2 数据源完全两阶段提交和回滚能力的多个并发事务。对其它数据源(例如 Oracle、MQSeries 和 CICS)的支持只具有一阶段提交能力。不必再为这类应用程序使用如 CICS、Encina 或 Tuxedo 之类的事务监视器。
应用程序要求对象级安全性同 HTML 和 JSP 文件、servlet 和客户机登录的安全性紧密集成
有些应用程序要求复杂的安全性限制。例如,基于保险的应用程序必须按照规章准则限制对病人数据的访问。
企 业 bean 现在允许任何企业 bean 或方法上的方法级安全性。创建用户和用户组并且要么给予要么拒绝它们对任何企业 bean 或方法的执行许可。此外,WebSphere Application Server 使您能够授权或拒绝用户组对 Web 资源(例如,JSP 和 HTML 文件)的访问,并且它通过底层安全性框架无缝地将用户 ID 从 Web 资源传递到企业 bean。
许多应用程序开发人员迫切希望开发不依赖特定平台、供应商或应用程序服务器实现的应用程序。
EJB 体系结构是这一目标的理想选择。它是一种工业标准组件体系结构。在 WebSphere Application Server 中开发的企业 bean 经常部署在竞争者的应用程序服务器上,反之亦然。虽然还没有一个完全标准、可移植并且基于组件的体系结构,虽然利用先于标准化之前出现的一些特性通常更容 易、更快捷,但是使用企业 bean 却提供了最佳的长期优势。此外,有许多可以用来帮助应用程序开发人员的 EJB 标准的工具和优化实现。
应 用程序需要满足用户的需要。因此,应用程序开发人员需要一种编写可伸缩以满足使用需求的业务逻辑的方法,无论这意味着每天 24 小时、每周 7 天运行并且处理几百万并发用户的系统,还是只在营业时间运行并且处理几十个并发用户的系统。您必须获得可伸缩性又不牺牲开发或标准化的方便性。
WebSphere Application Server 3.0 中的 EJB 环境支持具有下列特性的这种类型的应用程序伸缩性和可用性:
您无需将这些特性特别地编程到您的应用程序中去。您可以不改变服务器端代码就可更改为 WebSphere Application Server 创建的 EJB 应用程序的大小。
虽 然 WebSphere Application Server 支持其它服务器端技术(如 Java Servlet 和 JSP 文件)的分布、克隆以及自动故障转移,但是这些面向表示的技术是充当企业 bean 的补充而不是竞争者。每当重要的是可用性和可伸缩性时,企业 bean 都应该是整体解决方案的一部分。
某金融机构的一组开发人员创建了一个基于 Java 和远程方法调用(RMI)技术的应用程序。他们的系统有以下体系结构:
|
| |
|
|
图 2:RMI 服务器体系结构
|
|
| |
此外,开发人员包含了两个体系结构图中不可见的框架:
由于该应用程序具有下列特征,因此它是到 EJB 环境的迁移的一个好的侯选者:
开发小组迅速重新设计应用程序以使用企业 bean,如图 3 中所示。
|
| |
|
|
图 3:新的基于 EJB 的体系结构
|
|
| |
应 用程序开发人员用在 WebSphere Application Server 和 VisualAge for Java 中提供的实体 bean 容器管理的持久性(CMP)实现替换其数据库映射框架。他们还用基于 EJB 的安全性替换定制安全性框架,这使得他们能够维护方法级安全性,同时却极大地简化了代码。
总之,通过使用与实体 bean 一起部署的会话 bean 系统重新设计使网络流量最小化。
|
这一节描述了可为该最佳实践所用的应被取代的方法。对于满足向 EJB 环境迁移的任一标准的应用程序,不推荐使用这些方案。
该最佳实践假定后端业务逻辑比表示逻辑更有价值。您仍然可以使用 图 1中 描绘的略加修改的体系结构。您必须将整个 WebSphere 安装(除 servlet 插件和可选的用于 servlet 的因特网 ORB 间协议(Internet Inter-ORB Protocol (IIOP))重定向器之外)置于第二层防火墙之后。然而这降低了整体性能。
您 可以使用与企业 bean 不同的技术来使多个客户机类型能够访问共享数据。例如,Java 应用程序客户机和浏览器客户机可以通过 HTTP 访问 Java servlet。然而,如果 servlet 用于在浏览器中显示信息,则强制它包含一些表示逻辑,而向另一个程序传输信息时并不需要它们。结果,您有两套部分重叠的 servlet 用来处理这两种情形。
此外,对于程序到程序通信,HTTP 可能是低效的。您必须在程序之间沿 HTTP 管道传送信息,通常要么以类似 XML 的基于文本的格式要么以类似 Java 序列化的面向对象格式来传送。两种选项都涉及大量的编程工作,并且二者都没有和使用本机 IIOP 一样快。
您 可以使用与企业 bean 不同的技术来创建需要对多个数据源进行完全事务性访问的应用程序。您可以使用事务处理软件(例如 CICS、Encina 或 Tuxedo)来编写这类应用程序。然而,这些软件产品使用非标准接口,并且通常需要您用例如 COBOL、C 或 C++ 之类的语言来编写应用程序。
一组以评估新技术为任务的开发人员设计了一个使用企业 bean 的应用程序。图 4 说明了系统体系结构。
|
| |
|
|
图 4:蹩脚的基于 EJB 的体系结构
|
|
| |
虽然企业 bean 似乎是项目的最好选择,但是比起本文档中描述的标准,下面的体系结构性细节表明并非如此:
总之,这一应用程序只不过将企业 bean 用作 servlet 和大型机中存储的数据之间的一种数据映射机制。这一应用程序没有利用任何 EJB 环境的下列特性:
企业 bean 的使用极为显著地降低了系统的速度。可以通过直接将数据映射编码成在与 Java servlet 相同的 JVM 中运行的 JavaBeans 来改进性能。
另外,企业 bean 的使用给应用程序添加了不必要的复杂性。它需要宿主和远程接口以及分布代码。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-130505/ ,如需转载,请注明出处,否则将追究法律责任。