当设计应用程序并考虑使用 Enterprise JavaBean(EJB)时,可以从许多选项中选择。这些选项具有不同级别的复杂性、优点和缺点。基于模型-视图-控制器(MVC)体系结构,您可以将会话 bean 用作实体 bean 的前端。前端会话 bean 通过降低网络调用的数量来改进性能。除了性能改进,前端会话 bean 隐藏了导致表示逻辑与商业逻辑分离的 EJB 的复杂性。
适用读者: 架构设计师,开发者
产品: WebSphere Application Server,VisualAge for Java
版本: 3.0.2.x、3.5.x 和 4.0
平台: 所有平台
关键字: Enterprise JavaBeans、EJB、模型-视图-控制器、MVC、会话、实体、会话 bean、无状态、前端
· 摘要当您设计应用程序且考虑使用 Enterprise JavaBean(EJB)时,会有多种选择。不同的方法具有不同级别的复杂性、优点和缺点。使用基于“模型-视图-控制器(MVC)”的体系结构,您可以将会话 (session) bean 用作实体(entity)bean 的前端。前端会话 bean 可通过减少网络调用数量来增强性能,它还将表示逻辑与商业逻辑分离,从而降低了 EJB 的复杂性。
· 建议
使用前端会话的主要优点是从前端会话 bean 对实体 bean 的调用是本地方法调用,从而避免了大量网络通信的开销。当客户机和服务器正在同一 Java 虚拟机(JVM)中运行时,WebSphere 对象请求代理(ORB)处理远程调用的方式不同。ORB 从客户机到服务器进行本地调用,而不是在远程方法调用/因特网 ORB 间协议(RMI/IIOp)上发送远程调用。使用前端会话的另一个原因是由于 EJB 远程方法调用是在 RMI/IIOp(RMI 的一个扩展)上,序列化对象可以在这些调用之间传递。序列化对象可以包含来自一个或多个实体 EJB 的所有信息,降低方法调用数并且将大量参数和复杂性隐藏到单一方法调用中。
使用前端会话 bean 也遵循模型-视图-控制器 (MVC)编程模型。MVC 使应用程序中的表示逻辑与商业逻辑分离,且会将特定安全模型应用到表示逻辑和商业逻辑中,并且将角色分离应用于开发组,其中页面设计师的工作与商业逻辑开发者的独立工作可以平滑地集成在一起。表示逻辑和商业逻辑的分离是由三个部分定义的。
- 模型 - 通常通过 JavaBeans 或 EJB 来封装商业逻辑和规则并且实现商业处理。
- 视图 - 通常通过 JavaServer pages(JSp)来显示商业过程的结果并实现对用户的响应界面。
- 控制器 - 管理控制用户和应用程序之间的所有交互。控制器通常是 servlet,它接收用户请求并将所有输入参数传递到完成实际工作的模型中。最后,控制器调用视图以显示生成结果。
图 1. 基于“模型-视图-控制器”体系结构的应用程序
无状态 EJB Sessionbean 作为对请求程序(通常是执行控制器功能的 servlet)隐藏实体 bean 复杂性的前端,正确地遵循了 MVC 模型并将表示逻辑与商业逻辑分离。它提供了远程接口中实体 bean 的商业方法和本地接口中的实体 bean 的创建和查找程序方法。
图 2. 使用前端会话 bean 来隐藏实体 bean 复杂性的应用程序
有了更改 EJB 实现中的商业逻辑或 servlet 接口中的表示逻辑而不互相影响的能力,就可在改动应用和添加新功能时有更灵活的选择。
· 替代方法
当利用 EJB 设计应用程序时,直接访问和Access Bean 是两种不同的方法。虽然两个方法都有一些比使用前端会话 bean 更好的优势,但是缺少表示逻辑和商业逻辑之间的分离限制了更好的发展。
· 直接访问
“EJB 的直接访问”很容易实现,需要在 servlet 的 init 方法中初始化实体 Bean 。因为初始化是在客户机方的 servlet 上发生的,所以表示逻辑和商业逻辑之间的分离就不存在了。当更改应用程序中的商业逻辑而又要求不影响表示逻辑时,使用“EJB 的直接访问”的开发者就会遇到困难。即当 servlet 正在与 EJB 容器相同的系统(同一 JVM)上运行时,使用“直接访问”,客户机执行的每个方法调用都是远程调用,导致通过 TCp/Ip 栈对方法进行路由分配。
· Access bean 方法
“Access Bean”方法比“EJB 的直接访问”快得多。因为它可将 EJB 缓存在 Access Bean 中象其它的缓存一样被执行。“Access Bean”还允许没有 EJB 知识的开发者编写可访问 enterprise JavaBeans 的 servlet 和 JSp 并且显示其属性。通过修改企业 bean 的实现,可以大大减少通过网络远程调用的数目,从而显著地提高性能。然而,由于实现方法唯一,导致 Access Bean 与其它选项不可兼容。它另一个缺点是包含在关联中的 Access Bean 是可导航的。调用Access Bean 的导航方法会返回与Entity bean 相对应的Access Bean。因为通过Access Bean 方法后继续关联时将产生错误,所以需要开发者为关联中相关的所有企业 bean 生成对应的Access Bean。
·
关于作者
该最佳实践是由 WebSphere 最佳实践团队创建的。有关附加信息、问题或意见可以通过 [email protected] 与该组联系。








