498)this.style.width=498;">
图 4:J2EE 外观分层参考模型 然而,EJB 并不是唯一用作外观的结构。其他 Java 结构也可用于此目的—尤其是对象工厂(用作 JDBC 或实体 Bean 功能)和操作对象。本文主要介绍一个操作对象—一个根据服务激活者模式构造的对象—。当应用程序需要异步访问 EJB 以支持发布/预订或点对点消息时,服务激活者将负责接收异步请求、定位相应的 EJB 以及代理这些请求,还可以在成功完成请求处理后向请求者发送确认。在 J2EE,服务激活者对象执行 JMS 监听器和代理服务的角色,消息驱动 bean 通常用于此目的。 结构 那么,该解决方案的结构到底如何呢?如图 5 和图 6 所示,所有请求可以转到超级外观(称作 EJB 中介者),它用作 EJB 层的单个入口点,主要控制和同步对 EJB 层的并行访问。为响应请求,中介者按照事件处理器模式进行操作,并通过发送事件将相应的任务代理到通过其外观表示的不同的 EJB 子系统。更具体地说,对于服务请求,EJB 中介者将分解该请求,找到相关的服务外观,使用不同的 Web 服务接口发出子请求,然后撰写结果。如果多服务系统中存在复杂的服务请求,并在 EJB 体系结构的查找程序方法中嵌入了一组服务接口,则 EJB 中介者的任务是标识企业 bean、它们的通过 Web 服务公开的相关方法以及组合这些服务的方法。 498)this.style.width=498;" border=0>
图 5:“电子商店”示例 - EJB 外观分层方案 498)this.style.width=498;">
图 6:“电子商店”示例— EJB 中介者模型 EJB 中介者还有一个重要的功能:启用以文档为中心的服务与 RPC 样式服务。尽管仅该主题就需要一些专门的文章,但值得一提的是,通过在服务使用者与 EJB 层之间引入一个高级抽象层,我们现在能够有效地将会话外观模式与 XML 文档处理组合在一起。 EJB 中介者在其核心类中定义的一个最重要的接口是 IejbMediator 接口。它作为会话 bean 的远程接口(如下面的代码片段所示)实现,并定义了指定的 process_service() 方法。该方法是文档进程,它将 XML DOM(文档对象模型)文档作为它的输入参数并返回 XML DOM 文档: /** * imports */ import org.w3c.dom.*; import java.rmi.RemoteException; import ..... public interface IejbMediator { public Document process(Document domXMLInput) throws RemoteException, xxxException;
} |
现在,让我们回过头来介绍总体结构。对于客户体验管理子系统,它的 EJB 外观将所有事件转发到称作 EJB 控制程序的下一层外观,它是一个表示 EJB 层的客户体验管理子系统中的客户的会话状态会话 EJB。EJB 控制程序简化了处理并利用状态计算机模式控制应用程序状态。此外,EJB 控制器使用命令模式实现事件处理,并将创建或更改请求分派到下一层外观—逻辑 EJB 外观或实体 EJB 外观。逻辑 EJB 外观封装子系统的业务逻辑,而实体 EJB 外观提供了一个有效处理数据一致性的方法。 那么,使用这么多层的外观到底实现了哪些功能呢?首先也是最重要的是,使用外观嵌套可以封装参与工作流的服务器端业务对象中的复杂交互。它还可以保证高级别的可重用性—也许不是服务级别,但完全适用于业务对象。其次,该结构还提供了对负责客户交互的对象的快速访问。结构和简化算法使用外观嵌套处理“功能块”。每个块的关联粗粒度方法用于在层次结构中进行导航。此外,外观层次结构的垂直分层提供了高效的缓存功能和 EJB 集群。位于不同节点的 EJB 集群可以显著增强可伸缩性、可靠性和可用性。 您可能会问:外观模式与 EJB 集群之间存在什么关系?令人吃惊的是,有效的 EJB 集群在很大程度上取决于设计决策,尤其是外观结构—这主要是由于 EJB 集群需要很高程度的幂等性。(幂等性方法是可以使用相同参数重复调用并将相同结果存档的方法。)对于会话 bean,所有主要的 J2EE 应用服务器都只依靠 幂等性方法支持故障切换。在大型多功能 J2EE 系统中,外观嵌套允许建立大量 幂等性方法,从而实现了高效的 EJB 集群。 结论 在构建 J2EE 系统时应牢记 SOA 原则以便最大限度地增强灵活性和适应性。注意,SOA 不随 Web 服务和 SOAP 的启用而启动或停止。它需要通过建立多级 EJB 层分层(这将依次转换为灵活且经济有效的 SOA 实现)正确设计专用于实现更高级别的松散耦合的 J2EE 组件、功能自主和相关的 API。(责任编辑:朱晶)
<<上一页
1
2
3
4
5
|