介绍
应用程序的运行时体系结构是在进程视图中描述的,该体系结构视图描述系统的并行元素。这些指南提供关于如何为 J2EE 应用程序的进程视图建模的具体指导信息。
另请参阅概念:流程视图。
对流程视图建模
J2EE 组件(请参阅概念:J2EE 概述:J2EE 组件)部署到称为“容器”的环境中。关于 J2EE 定义的每一种容器的描述,请参阅概念:J2EE 概述:J2EE 容器。
每个容器都是一个并行元素,因此在体系结构的进程视图中应显示它。通常在高级进程视图中显示的其他重要并行元素是外部系统。
以下是 J2EE 应用程序的高级进程视图的典型示图。
从现实示例中,我们将看到特定供应商所给出的面向消息中间件(Message Oriented Middleware,MOM),以及特定的旧系统和应用程序客户机。但 Web 容器和 EJB 容器是应在所有 J2EE 进程视图中显示的标准容器。
注意,该图不显示这些系统在特定硬件节点上的实际分发。“部署模型”中展示了这种情况(请参阅技术:描述 J2EE 应用程序的分发)。
该示例显示了所选的、各容器之间运用的进程间通信机制。J2EE 提供了特定的进程间通信机制。它们是:
-
Java 远程方法调用(RMI),用于 Java 类之间的同步通信
-
RMI-IIOP,用于与 CORBA 客户机(通常是旧的应用程序)进行的互操作
-
HTTP/HTTPS,用于与基于 Web 的客户机进行通信(尽管也可能支持其他 Web 协议,例如与 XML Web Service 进行交互时)
-
Java 消息服务(JMS),用于与面向消息中间件(MOM)进行消息传递和交互
定义进程视图时的一个重要决定就是何时使用 JMS、RMI 或 RMI-IIOP。在该示例中,应用程序客户机、EJB 容器和另一旧系统采用消息传递来通信。 但对于哪些元素与哪些元素进行通信,这并不清楚。要排除这种不确定情况,则考虑从图中删除
MOM 系统,并将 JMS 显示为通过消息传递进行通信的元素之间的关联。
另一不确定情况是众多 EJB 之间是否通过消息传递来相互通信。通过显示从 EJB 容器到其自身的 JMS 关联,就可阐明这一点。最终的图为:
然而,进程视图并不仅仅是容器和高级系统。它还涉及到这些容器和系统内的并行。
进程视图应确定以下几种活动类并对其进行建模。
-
Java 线程
-
消息目标位置
-
由消息驱动的 Bean(因为它们是通过消息来异步调用的)。关于用于对消息驱动的 Bean 建模的特定构造型,请参阅技术:确定 Enterprise JavaBeans。
-
属于整体系统设计的附加流程。单独的计时流程就是这种流程的一个示例。
使用 JMS 时,可以选择直接将消息生产者与客户联系起来,或通过建模主题和队列更精确地对关系进行建模。
交互图用于显示设计元素之间的同步和异步通信。它们还可用于分析并行行为中存在的性能和逻辑问题。特别地,软件设计人员可查看网络中频繁传递消息或大量传送数据的情况。这可能会使设计人员重新设计控制线程之间、服务器之间或客户机与服务器之间的接口,或在控制线程之间、服务器之间或客户端与服务器之间重新分配设计元素。
注意,在 EJB 容器内,线程和进程是由 EJB 容器管理的 - EJB 不能创建或管理线程。在逻辑上,应将每个 EJB 看作是一个活动类,但由于会话 Bean 和实体 Bean
的调用是同步的阻塞调用,所以通常不将这些调用作为活动类来建模。EJB 容器的进程视图通常限于一种可用的并行机制 - JMS 以及 JMS 消息驱动 Bean。
即使通常不将会话 Bean 和实体 Bean 作为活动类来建模,也存在并行问题 - 例如在一个 EJB 读取数据库的同时,另一个 EJB 却写入该数据库。这些问题是使用事务来处理的。使用事务的方法应记录在特定于项目的指南中。
将设计元素分配给活动类
任务:描述运行时体系结构讨论了将设计元素分配给进程和线程的需要。在 J2EE 应用程序中,所有 Web 组件都分配给 Web
容器,而所有的 EJB 都分配给 EJB 容器。由于关系简单,故无需对这种分配建模。
但是,如果您的设计包括了附加的并行进程(例如两个不同的应用程序客户机),则指定对每个应用程序执行哪些设计元素,这是很有用的。
对于 Java 线程、消息驱动的 Bean 和 JMS 主题及队列,问题还涉及到这些元素如何相互通信以避免死锁、不一致数据等情况。检验包含这些元素的用例实现,即可最好地探讨这一点。
其他备选的建模方法
由于进程视图与部署视图相似,所以这些视图的高级示图常常是组合起来的。
同样,由于每个 J2EE 容器不仅仅是进程,它还是执行环境,所以可将其作为“逻辑节点”(而不是活动类)来建模。
|