同时托管J2EE应用程序的多个版本

引言

J2EE 应用程序由多种不同类型的组件构成,例如 servlet、EJB 组件和 J2EE 客户端 ,这些组件可以封装在不同的模块中。随着 J2EE 应用程序的日趋成熟,也就有必要不断 使用新的应用程序功能。普遍的做法是通过小规模的增强或者对组件接口(或者其实现) 加以改进来获得新应用程序功能,而不是对整个企业应用程序进行大规模的改变。因此, 在许多情况下,对每个应用程序组件的不同版本加以支持(同时可以重用其他相关的组件 ,而这些相关的组件不受新版本变化的影响)是人们所期望的事情。

为了实现上述功能,有必要对需要升级的应用程序组件进行增量式,而不是使用一种 “大手笔”的方法对整个企业应用程序进行更换。要想实现这种增量式,就有 必要使同一个应用程序服务器能够支持企业应用程序组件的多个不同的版本。

本文论述和讲解为了支持在一个 WebSphere Application Server 实例中同时托管 J2EE 应用程序的多个版本所需要解决的关键问题。尽管其中的一些问题可以在部署阶段 解决,但是也有一些问题需要在应用程序设计和开发的阶段加以解决。我们在此使用一个 小型的 J2EE 应用程序(由 EJB 组件、servlet、JSP 以及 HTML 构成)对如何解决这些 关键问题进行了示范。

有不同的方法可以使企业应用程序从一个版本完全转换到另外一个版本,例如在同一 WebSphere 网络域中使用不同的单元。这些方法不在本文的讨论范围之内,本文只在 EJB 组件、servlet 或静态内容的层面上以较细的粒度论述应用程序的版本。

同时托管的冲突和问题

同时托管的 J2EE 应用程序的不同版本需要使用共同的应用程序服务器资源,如类加 载器、JNDI 名称空间、应用程序 URL 和其他的外部资源,这些因素会产生冲突。我们将 这些冲突列举如下(并且在本文的后面将其进行讨论)。

类加载冲突

不同版本的 J2EE 组件类需要加载到同一个应用程序服务器的 Java 虚拟机进程中。 通过在 WebSphere 应用程序服务器中使用多种类加载器,可以避免这些冲突。

servlet 路径冲突

不同版本的 Web 应用程序组件(例如 servlet、JSP 和 HTML 模块)会有冲突的 URL 。这些冲突可以通过对每个版本使用不同的上下文根来解决。

JNDI 名称空间冲突

J2EE 应用程序组件可能会引用远程和(或)本地的持久性对象,这可能包括 EJB 本 地接口。多个版本的 J2EE 应用程序组件不能在同一应用程序服务器域的同一个 JNDI 名 称空间注册相同的名称。解决名称空间冲突的方法是避免在应用程序代码中使用硬编码的 JNDI 名称空间,而依赖于 java:comp/env 名称空间中的应用程序环境项(正如 J2EE 1.2 规范中所定义的)。通过这种方式,在部署阶段可以为不同的版本指定实际的 JNDI 名称空间。

外部资源冲突

不同版本的 J2EE 应用程序可能会使用相同的外部资源的不同版本,例如数据库结构 。可以通过资源管理器(例如 JDBC 数据源)使不同版本的应用程序使用同一外部资源的 不同版本,并且通过应用程序的 java:comp/env 环境来访问资源管理器。通过这种方式 ,直到部署阶段才将外部资源和使用它的应用程序代码绑定起来,因而可以在部署阶段指 定外部资源的不同版本。

图 1 突出显示了在同时托管两个不同版本的 J2EE 应用程序时发生冲突的部分。

图 1. 在同一个应用程序服务器上同时托管的不同版本的 J2EE 应用程序之间的冲突 。

另外,除了以上的各种冲突,也要考虑下面的应用程序设计和开发问题:

时间: 2024-08-01 19:05:36

同时托管J2EE应用程序的多个版本的相关文章

在IBM WebSphere Application Server上部署J2EE应用程序

本文将介绍http://www.aliyun.com/zixun/aggregation/7155.html">开发人员如何利用此框架将他们在 IBM® WebSphere® Application Server 上部署的 J2EE 应用程序与这些 C++ 库相集成. IBM® WebSphere® Application Server 是一个兼容 Java® EE 6 的.健壮且高度可用的中间件环境,它提供了一个平台来托管和管理各种不同的企业应用程序.一些用户可能遇到过这样的场景,他们需

一个用于J2EE应用程序的异常处理框架

在大多数Java项目中,大部分代码都是样板代码.异常处理就属于此类代码.即使业务逻辑只有3到4行代码,用于异常处理的代码也要占10到20行.本文将讨论如何让异常处理保持简单和直观,使开发人员可以专心于开发业务逻辑,而不是把时间浪费在编写异常处理的样板代码上.本文还将说明用于在J2EE环境中创建和处理异常的基础知识和指导原则,并提出了一些可以使用异常解决的业务问题.本文将使用Struts框架作为表示实现,但该方法适用于任何表示实现. 使用checked和unchecked异常的场景 您是否曾经想过

PHP5中使用Web服务访问J2EE应用程序(1)

j2ee|php5|web|web服务|程序|访问 很多 Web 开发人员喜欢 PHP 的丰富功能和简单易用,但有时候他们需要访问 J2EE 应用程序服务器中已有的业务逻辑.本文将通过一些例子说明如何通过 PHP 5 中新的 SOAP 扩展使用 Web 服务来访问 J2EE 应用程序,而不必脱离 PHP 环境,也不用学习新的编程模型. PHP.Web 服务和 SOAP 简介 本文将介绍如何从 PHP 脚本中访问企业应用程序.您可能是一位 PHP 程序员,需要为部门 Web 应用程序编写代码,以便

精通J2EE应用程序开发之交叉分析J2EE

j2ee|程序 在不久前的一段时间内,Java 开发人员在准备一个新的企业 Java 开发项目时,事先就知道将要使用的工具.当时,一切都很简单:J2EE 是新的,HTML 浏览器是公认的用户界面标准,而复杂性(至少从推测的角度而言)已成为过去的事情.而如今,事情变得如此复杂. "开发人员面对的选择令人眼花缭乱." 开发人员面对的选择令人眼花缭乱,从"轻型容器"(如 Spring.NanoContainer 或 HiveMind)到"web 框架"

Oracle9iAS下J2EE应用程序部署

j2ee|oracle|程序 Oracle 9iAS J2EE 应用程序发布和配置安装配置应用服务器操作系统安装Oracle 9iAS 9.0.2 企业版①       Oracle 9i Application Server Infrastructure : 其中:Oracle 9iAS Infrastructure Instance Name :ora9ias_is:口令:ora9ias 安装目录:d:\Ora9is ②       Oracle 9iAs Application Serve

PHP5中使用Web服务访问J2EE应用程序

j2ee|php5|web|web服务|程序|访问 很多 Web 开发人员喜欢 PHP 的丰富功能和简单易用,但有时候他们需要访问 J2EE 应用程序服务器中已有的业务逻辑.本文将通过一些例子说明如何通过 PHP 5 中新的 SOAP 扩展使用 Web 服务来访问 J2EE 应用程序,而不必脱离 PHP 环境,也不用学习新的编程模型. PHP.Web 服务和 SOAP 简介 本文将介绍如何从 PHP 脚本中访问企业应用程序.您可能是一位 PHP 程序员,需要为部门 Web 应用程序编写代码,以便

教你使用TSAM扩展来管理J2EE应用程序

Tivoli Service Automation Manager 7.2.2 引入了扩展 的概念,该扩展是一组 TSAM 软件组件,可以向 TSAM 平台添 加更多功能.一个扩展通常(但不限于)可以实现以下功能: 可以实现一个新的 IT 服务自动化解决方案,该解决方案在 TSAM 中称为服务定义:例如,一个存储即服务解决方案可 以为一所大学的学生提供主目录. 可以向现有服务定义添加功能:例如,将开箱即用 TSAM 扩展为一个服务解决方案,使它能够将除启动磁盘以外的更多 磁盘连接到虚拟机中. 这

一个用于J2EE应用程序的Backbase Ajax前端

动态HTML技术已经出现了多年.最近,Google的最新Web应用程序GMail.Google Suggests和Google Maps,在前端页面中重新引入了基于标准的DHTML开发模型.Google证明了,DHTML开发模型能够让开发人员创建具有可视化吸引力和高度交互式的Rich Internet Application(丰富网络应用程序,RIA). Adaptive Path公司的Jesse James Garrett为这个基于标准的RIA开发模型创造了术语Ajax (Asynchrono

J2EE应用程序的Web层状态复制

大多数具有一定重要性的 Web 应用程序都要求维护某种会话状态,如用户购物车的内容.如何在群集服务器应用程序中管理和复制状态对应用程序的可伸缩性有显著影响.许多 J2SE 和 J2EE 应用程序将状态存储在由 Servlet API 提供的 HttpSession 中.本文作者分析了状态复制的一些选项以及如何最有效地使用 HttpSession 以提供好的伸缩性和性能. 不管正在构建的是 J2EE 还是 J2SE 服务器应用程序,都有可能以某种方式使用 Java Servlet -- 可能是直接