1、1 J2EE 应用的运行重构 亚斯明卡 玛特威斯卡 -梅耶,萨沙 奥里格斯,威廉哈塞尔伯林 计算机科学系,软件工程组,奥尔登堡大学, 26121奥尔登堡, 德国 matevska-meyerinformatik.uni-oldenburg.de, olligesinformatik.uni-oldenburg.de, hasselbringinformatik.uni-oldenburg.de 摘 要: 改变运行 系统 的运行时重构 ,不仅 在 安全和关键任务系统 方面 起着提供高可用性的一个重要角色,而且对商业网络应用提供专业 服务。 据此,主要的关切 点 是维持 在由重构时导致的 在重新配
2、置和最大限度地减少其停机 期间 运行系统的一致性 。本文的重点是平台独立的 ,基于作为能够使基于 组件系统运行重构的执行系统 部署 新 的 J2EE API 模块的 子系统。 我们的 “控制运行时重新部署 ”包括 以结构调整为允许补充 的延伸 热部署和动态刷新。 关 键词: 基于组件的软件工程,部署,动态 /自 主重构 /修改 1 简介 该软件系统的要求就必须永久改变其演变。 业务流程在设计意在系统的在设计, 变异的管理办法设计 意在设计 包括部署后的系统适应变化的 系统。作为运行系统的必需的变化, 运行时重构起着提供软件系统的高可用性具有重要作用。 主要的关切 点 是维持 在由重构时导致的
3、在重新配置和最大限度地减少其停机 期间 运行系统的一致性 。 因此 ,决定 了系统的某些部分将在重构停止 和继续运行的技术是需要的 ,因此,该系统可继续进行重构 1执行的部分。为了确定受影响的作为一个最小集合部分 的 组件,我们需要一个系统的描述,它提供了其运行时基本上是关于使用的组件的实例依赖关系 2行为 的 一个信息。此外,我们必须能够重新组合在系统其运行 期间 。 我们有关 所谓 重新部署 的 运行时重构的方法提供了一个控制运行时的热部署和动态刷新概念延伸3。此外,我们 也 考虑 1运行系统 的 结构上相一致的 变化。 本文组织如下 : 首先,我们简要地介绍了我们的做法以使基于组件 的系
4、统 在运行时重构(第 3节 ),其次,我们提出一个系统架构(图 2-1)。在 2.1节我们提出了我们对 J2EE部署的 API 4的执行情况。最后,在第三节 阐述 我们进一步的工作的结论。 2 运行时启用基于组件的系统的重构 我们 关注作为一个运行着的系统必须的变化的基于组件系统的重构 。我们 通过重构的结果: ( 1)功能,( 2)非功能性,( 3)结构 方面来区分三种不同的 重构。所有类型的重组可以发生在不同的粒度级别(即,可满足整个系统或单个子组件)。功能重构包括对单个组件的功能变化,以及一个特定的子系统,甚至整个系统。非功能重构与质量有关的服务( QOS)的系统,可以影响单个组件(子系
5、统)或架构。同时考虑结构重构,改变单一组件接口和不断变化的组件之间(一个系统的体系结构更改的依赖)。 2 我们看到正在运行的系统 会在 一个 个 特定的时间间隔 内 接收重构 请求直到 重组完成。在已经部署和运行系统,我们 用实体组 成部分 的依赖关系 确定的时间限制, 那种关系 是由特定的结构依赖关系和特定的信息或派生组件协议约束实例使用的依赖关系。知道了所有可能受影响的组件的当前状态,以及他们未来的行为,我们可以排除过去的依存关系和未来的。这使我们能够建立一个最小的运行时依赖关系图匹配的特殊 请求 重构 1。 实例 图 2-1.C3元模型 我们的元模型如图 2-1, 提出了一种综合描述该系
6、统的静态结构和运行时的看法,从而使重组后的系统行为 和 其一致性检查和组成层次分解。 对于这 容 器组件的重要延伸到建立该系统的部 署和运行性能 模型 。 一个 容器提供了 活动的 组件运行环境 。为了描述这种系统运行行为 ,我们使用自动 影响 服务。对于确定的 重构的 时间点,我们提出了一个重组的消息序列图 ,所谓生存序列图 ,因为他们可以表达生机和时间 终结 。 最后,需要申请到已经部署和运行机制的变化通常会触发一个系统配置的变化,意味着 重构后,系统会 重建和重新部署,以取得一致。这里一个要解决主要的问题是组件运行管理中的依赖关系。我们的控制下运行时重新部署的概念提出了一种对 热 署和动
7、态刷新概念延伸 3。另外相对于前面提到的 ,我们 允许 运行系统的结构变化和只允许一个应 用程序或单个组件在运行时既简单交换其他概念的 管理一致性问题。 组件 组件描述 活跃组件 符合组件描述 原子组件描述 原子活跃组件 容器组件 服务组件 连接器组件 3 2.1 J2EE部署 API的实现 软件的 热重新部署在 J2EE( Java 2企业版的软件组件)平台 由 J2EE产品供应商作为一个 为组件开发者 不断 在运行环境中 执行 测试的可 选功能 而 实施。因此,热重新部署和实际操作,可能是无效的现有用户会话。松动会话状态不是很关键 在 而调试和测试组件 ,对 开发商没有问题。在生产系统,揭
8、露他们的服务真正的用户,部署是一个时间和错误敏感的过程。而方案的正确性,只有部分被部署过程的影响, 在处理部署问题时, 时间是一个重要因素。在大多 数情况下,维持生产系统的停机时间被认为是一个大问题,因为其他的业务流程 依赖着 系统可用性。 部署 API规范作为新的 J2EE 1.4 5需要更进一步重新部署的概念,以对用户是透明从而允许它在生产系统中使用。 在一个运行的系统没有使无效的会话情况下执行配置变化的可能会明显减少停机的时间。 图 2-2 重构管理 但是, 没有 任何 J2EE应用服务器包括一个 API规范的工作部署落实。我们的项目 “ 部署的 J2EE API实现 ” 4开发了一个
9、JBoss应用服务器 API实 现的技术基础。我们现在的工作 在规格说明中标注是可选的,就是 实施重新部署的功能。 这种 API执行的结果将会完整的集成到一个完整的系统使能在产品系统建立配置、部署、重构 J2EE应用程序。 我们 将我们的系统取名为 PIRMA(平台独立重构经理) ,它是激活重构的 请求。 它包括以下四个一流水平:重构分析仪,依赖管理,一致性管理器和 重构 组件。我们的部署在 J2EE API实现覆盖了 重构基本功能,并 为 一致性 管理 提供了一个接口。 2.1.1 执行部署的基本原则 重构确认或忽略 重构请求 重构分析仪 依赖管理 一致性管理器 重构 组件 用户 重构 /回滚报告 更新参数 重构许可 /回滚请求