同时托管J2EE应用程序的多个版本 - 编程入门网
构用于不同版本的实体 EJB 组件)。为了能够解决这些 外部资源冲突,就要通过资源管理器(例如 JDBC 数据源)来访问这些资源。这样做就能 够在编写应用程序代码时不必考虑部署应用程序时的情况,并且这也可以在部署阶段使不 同版本的应用程序绑定到不同的数据源。图 9 展示了在部署阶段如何为不同版本的实体 bean 指定数据源。不同版本的 J2EE 应用程序组件(例如访问相同外部数据库的实体 bean)在修改相同的数据表或数据记录的时候会存在同步问题。当然,应该避免这种情况 的发生。如果无法避免这种情况,那么就要使用适当的 EJB 缓存策略。(请参见 参考资 料。)
图 7. 在部署阶段通过 JNDI 名指定外部资源 同时托管J2EE应用程序的多个版本(5)时间:2011-04-02 IBM Indrajit Poddar应用程序设计问题 将应用程序版本粒度降低到单个的 J2EE 应用程序组件通常会对应用程序的设计做出 改变。通过不同的应用程序类加载器使不同版本的服务器端类(例如 EJB tie 及实现类 )得以分离,但是不同版本的客户端类可能需要同一个类加载器来加载。当改变 EJB 组 件接口,并且不同版本的 EJB 组件需要同一个客户访问时,这种情况变得尤为突出。为 了解决这种情况,可以使不同版本的客户端类(包括接口)分隔到不同的包中。不同版本 的 EJB 接口的之间的公共部分可以通过使用相同的父接口抽象出来。另外,可以通过修 改 Service Locator模式来访问合适版本的 EJB 本地及远程接口。 在样本应用程序中,需要做出以下改变以适应附加的字段 accountHolderName: Account 实体 bean 需要有一个附加的 CMP 字段,名为 accountHolderName。 AccountInfo 值对象需要有一个附加的字段和 accountHolderName 的访问器方法。 CreateAccount servlet 需要能够为 AccountHome.create() 方法提供附加的数据 (accountHolderName)。 Create HTML 页面表单和 CreateAccountJSP 应该有新的 accountHolderName 的文本 输入。 Transfer EJB 组件、Transfer servlet 和 TransferFundsJSP 依赖于 Account EJB 组件,但是它们并不需要使用 accountHolderName 属性。因此,这些组件不受添加这个 字段的影响。在与此类似的情况下,可以应用 Open-Closed 原则(请参见 [Martin])以 这种方式对 Account EJB 组件的变化进行建模,这样,像 Transfer EJB 这样的组件就 不受 Account EJB 变化的影响,除非这些组件会使用后者的新功能。在我们的样本应用 程序中,Account EJB 的基本功能可以抽象成一个基本接口(Account),并且提供一个 基本实现(AccountBean),这些基本接口及基本实现存放在包 com.ibm.mybank.ejb 中 。特定于版本的接口和实现可以扩展基本接口和基本实现。 不同的包应该用于不同的版本,例如: com.ibm.mybank.ejb.v1 可以用于封装 Account EJB 组件在版本 1 中的接口及实现 ,这个版本的 Account EJB 组件中包含的方法不希望在将来的版本中使用。 com.ibm.mybank.ejb.v2 可以用来封装改变了的 Account EJB 接口及实现,例如,新 字段 accountHolderName 的访问器。 com.ibm.mybank.ejb 可以用来封装和版本无关的 Account EJB 组件的基本接口,这 个包也可能包含其他的 EJB 组件,例如 Transfer EJB,这个组件在后面的版本中不受任 何影响。 每个版本的 Account 本地接口只能在特定于版本的包中,因此其本地接口的 create 方法会返回一个相应版本的新创建的 AccountEJB。图8显示了一个类结构图,其中包含形 成 Account EJB 不同版本的抽象。 CreateAccount servlet 需要创建特定于版本的 Account,以及特定于版本的 AccountValue 对象。因此,在特定于版本的包中需要 CreateAccount servlet 的特定于 版本的实现。例如, com.ibm.m |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |