

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon ECS 上从 Oracle 迁移 WebLogic 到 Apache Tomcat (ToMee)
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs"></a>

*Anya Epishcheva 和 Harshad Gohil，Amazon Web Services*

## Summary
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-summary"></a>

此模式讨论了使用亚马逊弹性容器服务 ([Amazon ECS) 将运行 Oracle 的本地 Oracle Solaris SPARC 系统迁移 WebLogic 到运行 Apache toMee（增加了容器支持的 Apache Tom](http://tomee.apache.org/) cat）的基于 Docker 容器的安装的步骤。

有关将与要从 Oracle 迁移的应用程序关联的数据库迁移 WebLogic 到 Tomcat 的信息，请参阅此目录中的数据库迁移模式。 

**最佳实践**

迁移 Java 和 Java Enterprise Edition (Java EE) Web 应用程序的步骤有所不同，具体取决于应用程序使用的容器特定资源的数量。基于 Spring 的应用程序通常更容易迁移，因为它们对部署容器有少量依赖项。相比之下，使用企业 JavaBeans (EJBs) 和托管容器资源（例如线程池、Java 身份验证和授权服务 (JAAS) 以及容器管理的持久性 (CMP)）的 Java EE 应用程序需要付出更多努力。 

为 Oracle Application Server 开发的应用程序经常使用 Oracle Identity Management 套件。迁移至开源应用程序服务器的客户通常会选择使用基于 SAML 的联合身份验证来重新实现身份和访问管理。其他人则使用 Oracle HTTP Server Webgate 来处理无法从 Oracle 身份管理套件迁移情况。 

Java 和 Java EE Web 应用程序非常适合部署至基于 Docker 的 Amazon Web Services 上，例如 AWS Fargate 和 Amazon ECS。客户经常选择预装最新版本的目标应用程序服务器（例如 TomEE）和 Java 开发工具包（JDK）的 Docker 映像。他们将应用程序安装在基础 Docker 映像之上，将其发布到 Amazon Elastic Container Registry (Amazon ECR) 注册表中，并使用它在 AWS Fargate 或 Amazon ECS 上进行应用程序的可扩展部署。 

理想情况下，应用程序部署是有弹性的；也就是说，应用程序实例的数量根据流量或工作负载而缩小或缩小。这意味着应用程序实例需要上线或终止按根据需求调整容量。 

将 Java 应用程序迁移至 AWS 时，请考虑将其设置为无状态。这是 AWS Well-Architected Framework 的一项关键架构原则，将使用容器化实现水平扩缩。例如，多数基于 Java 的 Web 应用程序在本地存储用户会话信息。为了避免由于亚马逊弹性计算云 (Amazon EC2) 中的自动扩展或其他原因而导致应用程序实例终止，应在全球范围内存储用户会话信息，以便 Web 应用程序用户无需重新连接或重新登录网络应用程序即可继续无缝透明地工作。这种方法有多种架构选项，包括 Amazon ElastiCache for Redis，或者将会话状态存储在全局数据库中。TomEE 等应用程序服务器具有插件，可以通过 Redis、数据库和其他全局数据存储实现会话存储和管理。

使用可轻松与 Amazon 和 AWS X-Ray 集成的通用集中式日志 CloudWatch 和调试工具。迁移提供了改进应用程序生命周期功能的机会。例如，您可能希望自动化构建过程，以便使用持续集成和持续交付 (CI/CD) 管道轻松进行更改。这可能需要对应用程序进行更改，以便可以在不停机的情况下部署。 

## 先决条件和限制
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-prerequisites-and-limitations"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account 
+ 源代码 Java 代码和 JDK 
+ 使用 Oracle 构建的源应用程序 WebLogic
+ 为身份和访问管理定义的解决方案（SAML 或 Oracle Webgate）
+ 为应用程序会话管理定义的解决方案（移动 like-for-like或与 Amazon 一起移动 ElastiCache，或者根据需要使应用程序处于无状态状态）
+ 了解团队是否需要重构特定于 J2EE 的库才能移植到 Apache ToMee（参见 Apache 网站上的 [Java EE 7 实施状态](http://tomee.apache.org/javaee7-status.html)） 
+ 根据安全要求强化 ToMee 镜像
+ 带有预装目标 ToMee 容器镜像 
+ 同意并在需要时实施应用程序补救措施（例如，记录调试版本、身份验证）

**产品版本**
+ Oracle WebLogic OC4 J、9i、10g 
+ Tomcat 7（使用 Java 1.6 或更高版本） 

## 架构
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-architecture"></a>

 **源技术堆栈**
+ 使用 Oracle 构建的 Web 应用程序 WebLogic
+ 使用 Oracle Webgate 或 SAML 身份验证 Web 应用程序
+ 连接到 Oracle 数据库 10g 及以上版本的 Web 应用程序 

**目标技术堆栈**
+ 在Amazon ECS 上运行的 ToMee（增加了容器支持的 Apache Tomcat）（另请参阅[部署 Java Web 应用程序](https://aws.amazon.com/answers/web-applications/aws-web-app-deployment-java/) 和 [Java Microservices on Amazon ECS](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/)） 
+ 适用于 Oracle 的 Amazon Relational Database Service (Amazon RDS)； 有关 Amazon RDS 支持的 Oracle 版本，请参阅 [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/)** **

**目标架构**

![](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d5e7b3fa-062f-4559-af56-aa6058f96755/images/762193cf-aa68-4195-b3c7-6541caee61c9.png)


 

## 工具
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-tools"></a>

若要在 ToMee 上运行，必须将 Java 应用程序重新构建为.war 文件。在某些情况下，可能需要更改应用程序才能在 TomEE 上运行应用程序；您应该检查以确保正确定义了必要的配置选项和环境属性。  

此外，还应正确定义 Java 命名和目录接口 (JNDI) 查找和 JavaServer 页面 (JSP) 命名空间。 考虑检查应用程序使用的文件名，以避免与内置 T 库发生命名冲突。例如，persistence.xml 是 Apache OpenJPA 框架（在 ToMee 中与 OpenEJB 捆绑在一起）用于配置目的的文件名。PUI 中的 persistence.xml 文件包含 Spring 框架 bean 声明。  

Tomee 版本 7.0.3 及更高版本（Tomcat 8.5.7 及更高版本）针对带有特殊字符的原始（未编码）返回 HTTP 400 响应（错误请求）。 URLs 服务器响应对最终用户显示为空白页。[Tomee 和 Tomcat 的早期版本允许在中使用某些未编码的特殊字符 URLs；但是，正如 CVE-2016-6816 网站上所述，它被认为是不安全的。](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6816)要解决网址编码问题， JavaScript 必须使用 **encodeURI () 方法对直接 URLs 传递给浏览器的内容进行编**码，而不是用作原始字符串。

在 Tomee 中部署.war 文件后，在 *Linux cat*监视任何缺失的共享库的*启动日志*，并监视特定于 Oracle 的扩展，以添加 Tomcat 库中缺少的组件。 

 

**一般过程**
+ 在 ToMee 配置应用程序。
+ 识别并重新配置应用程序服务器特定的配置文件和资源，从源格式转换为目标格式。
+ 识别和重新配置 JNDI 资源。
+ 将 EJB 命名空间和查询调整为目标应用程序服务器所需格式（如适用）。
+ 重新配置 JAAS 应用程序容器特定的安全角色和主映射（如适用）。
+ 将应用程序和共享库打包至 WAR 文件。
+ 使用提供的 Docker 容器在 ToMee 部署.war 文件。
+ 监控*启动日志*，找出任何缺少的共享库和部署描述符扩展。如果找到任何任务，请返回第一项任务。
+ 针对还原的 Amazon RDS 数据库测试已安装的应用程序。
+ 按照[部署 Docker 容器](https://aws.amazon.com/getting-started/tutorials/deploy-docker-containers/)中的说明启动带有负载均衡器和 Amazon ECS 集群的完整架构。
+ 更新为指 URLs 向负载均衡器。
+ 配置管理数据库 (CMDB) 

## 操作说明
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 执行应用程序发现（当前状态占用空间和性能基准）。 |  | BA，迁移主管 | 
| 验证源和目标数据库的版本。 |  | 数据库管理员 | 
| 验证源应用程序和目标应用程序的设计（身份和会话管理）。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 确定目标服务器实例的硬件要求。 |  | 数据库管理员， SysAdmin | 
| 根据容量、存储功能和网络功能选择正确的实例类型。 |  | 数据库管理员， SysAdmin | 
| 确定源数据库和目标数据库的网络访问安全要求。 |  | 数据库管理员， SysAdmin | 
| 确定应用程序迁移/切换策略。 |  | 数据库管理员，迁移主管 | 
| 完成应用程序迁移设计与迁移指南。 |  | 构建主管，迁移主管 | 
| 完成应用程序迁移运行手册。 |  | 构建主管，割接主管，测试主管，迁移主管 | 

### 配置基础设施
<a name="configure-the-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 |  | SysAdmin | 
| 创建安全组。 |  | SysAdmin | 
| 配置和启动 Amazon RDS 数据库实例。 |  | 数据库管理员， SysAdmin | 
| 配置 Amazon ECS 部署。 |  | SysAdmin | 
| 将应用程序打包为 Docker 映像。 |  | SysAdmin | 
| 将镜像推送到 Amazon ECR 注册表（或者跳过此步骤并将其推送到 Amazon ECS 集群）。 |  | SysAdmin | 
| 配置应用程序和 Amazon ECS 服务选项的任务定义。 |  | SysAdmin | 
| 配置集群，查看安全设置，设置 AWS Identity and Access Management (IAM) 角色。 |  | SysAdmin | 
| 根据应用程序迁移运行手册启动设置并运行测试。 |  | SysAdmin | 

### 迁移数据
<a name="migrate-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获得安全保障团队的许可，将生产数据转移至 AWS。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 创建或获取对端点访问权限，以获取数据库备份文件。 |  | 数据库管理员 | 
| 使用原生 Microsoft SQL Server 工具或第三方工具迁移数据库对象和数据。 |  | 数据库管理员 | 
| 从应用程序迁移运行手册中运行必要的测试，以确认数据迁移成功。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 

### 迁移应用程序
<a name="migrate-the-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 提交变更申请 (CR) 以进行迁移。 |  | 割接主管 | 
| 获得 CR 批准，以进行迁移。 |  | 割接主管 | 
| 遵循应用程序迁移运行手册的应用程序迁移策略。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 升级应用程序（如需要）。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 完成功能测试、非功能测试、数据验证、SLA 与性能测试。 |  | 测试负责人、应用程序所有者、应用程序用户 | 

### 割接
<a name="cut-over"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获得应用程序所有者或企业主的签名。 |  | 割接主管 | 
| 运行表格主题练习，演练割接运行手册的所有步骤。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 
| 将应用程序客户端切换至新基础设施。 |  | 数据库管理员，迁移工程师，应用程序所有者 | 

### 关闭项目
<a name="close-the-project"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭临时 AWS 资源。 |  | DBA，迁移工程师， SysAdmin | 
| 审核和验证项目文档。 |  | 迁移主管 | 
| 收集与迁移时间、工具成本节约等相关的指标。 |  | 迁移主管 | 
| 关闭项目并提供反馈。 |  | 迁移主管，应用程序所有者 | 

## 相关资源
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-related-resources"></a>

**参考**
+ [Apache Tomcat 7.0 文档](https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html) 
+ [Apache Tomcat 7.0 安装指南](https://tomcat.apache.org/tomcat-7.0-doc/appdev/installation.html) 
+ [Apache Tomcat JNDI 文档](https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html) 
+ [Apache ToMee 文档](http://tomee.apache.org/) 
+ [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/) 
+ [Amazon RDS 定价](https://aws.amazon.com/rds/pricing/) 
+ [Oracle 和 AWS](https://aws.amazon.com/oracle/) 
+ [Oracle on Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS Multi-AZ 部署](https://aws.amazon.com/rds/details/multi-az/) 
+ [Amazon ECS 入门](https://aws.amazon.com/ecs/getting-started/)
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/) 

**教程和视频**
+ [在 Amazon RDS 上运行 Oracle 数据库的最佳实践](https://www.youtube.com/watch?v=j2wqT0EPDbw) 