同时托管J2EE应用程序的多个版本 - 编程入门网
B 的远程接口及其对应的实现类、客户端类(包括使用接口的类)。在设计可串行 化的或者用于传递对象或值对象(这些对象在组件接口之间传递)的可外化的类(请参见 参考资料)时,也要特别加以注意。
同一个服务器同时托管不同版本的应用程序组件的一种方法是,将不同版本的应用程 序组件类放在不同的 JAR 文件中,并且不同版本的应用程序使用不同的类加载器,但这 种方法的价值不大。这种方法只有在所有的版本变化仅仅局限于类的实现时才是一种适用 的方法。如果组件接口变化了(例如 EJB 接口),那么相应版本的所有客户端类也要具 有不同的版本,即使客户端不会使用任何改动的功能也是如此。因此,对 J2EE 组件接口 (例如 EJB 接口)做出很小的改动,就会牵扯到改变大量的客户端类。通过应用面向对 象的设计方法来管理单个的 J2EE 组件实现类及接口如何变化,可以更好地对此进行处理 。 使用面向对象方法的其他好处包括可以重用不同版本类的通用功能。使用不同的包名 ,可以避免不同版本之间的类命名冲突。这也可以允许一个组件访问其他组件的不同版本 (例如,同一个 EJB 组件的不同版本可以被同一个引用它的 servlet 支持)。在后面描 述的示例 J2EE 应用程序中,我们将看到如何改变组件的接口以便同时托管。 封装选择 J2EE 应用程序类可以封装在 EJB 模块( .jar )或 Web 模块( .war )中。封装企 业应用程序不同版本的一个最简单的方法就是,将每个版本的所有 EJB 和 Web 模块封装 到它们自己的企业应用程序模块中( .ear )。尽管这样做可能不会带来太多的困难,但 是这或许不是最好的解决方案,因为企业应用程序模块通常是由大量的 EJB 和 Web 模块 组成的,并且所有的组件不会同时从一个版本升级到另一个版本,而实际上可能会是一次 升级只涉及到单个的组件。在本文的后面提供了一种封装选择,这种选择可以得到较细粒 度的应用程序版本。 跟踪分布式组件的变化 EJB JAR 和 WAR 清单文件(manifest file)提供了跟踪不同包版本的方法。可以在 运行时利用版本信息来检查 J2EE 应用程序分布式组件之间的兼容性。尽管在运行时使用 J2EE 规范可以表达和检索单个组件的版本信息,但是没有一种方法来表达一个版本模块 对另一个版本模块的依赖性。检查和执行这种依赖性必须通过运行时的应用程序逻辑来完 成。 会话对象的不兼容性 如果应用程序持续使用可串行化的对象,并且会对这些可串行化的对象的类做出改变 ,那么在做出这些改变的时候要加以考虑。 样本 J2EE 应用程序 为了展示如何解决上面列出的问题,我们将考虑一个小型的 J2EE 应用程序,我们将 其称作为 MyBank。 图 2. 样本 J2EE 应用程序:MyBankk MyBank 应用程序被封装在 MyBankCMP.ear 文件中,并且由下面列出的 J2EE 组件和 模块组成(如图 2 所示): EJB 模块(以绿色显示): MyBankCMPEJB.jar 包名: com.ibm.mybank.ejb ,由以下元素组成: Account ——是一个实体 bean,表示一个用户的帐号,并且允许用户查看 帐号信息、提款和存款,而且还可以让用户查看以及设置帐号类型。 Transfer ——是一个会话 bean,这个会话 bean 可以使用户查看帐号余 额,并且可以将资金从一个帐号转到另一个帐号。 AccountValue ——是一个传递对象,这个对象表示从 Account 实体 bean 远程接口获取的帐号信息。 Web 模块(以黄色显示): MyBankCMPWeb.war 包名: com.ibm.mybank.web ,由以下 Web 组件组成: CreateAccount ——这是一个 servlet,这个 servlet 调用 Account 本 地接口的创建操作,并且通过一个新构建的 AccountInfo 值对象来传递这个 servlet。 Create ——这是一个静态的 HTML 页面,这个页面提 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |