第 2 章 使用规则入门


您可以通过创建规则或查看快速入门来开始创建自定义 MTR 规则。

2.1. 创建第一个 XML 规则

本小节介绍了创建和测试第一个基于 MTR XML 的规则的过程。这假设您已安装了 MTR。有关安装说明,请参阅 CLI 指南中的安装和运行 CLI

在本例中,您将编写一个规则来发现应用程序定义了包含 <class-loading> 元素的 jboss-web.xml 文件,并提供描述如何迁移代码的文档的链接。

2.1.1. 为规则创建目录结构

创建目录结构以包含您的第一条规则和用于测试的数据文件。

$ mkdir -p /home/<USER_NAME>/migration-rules/rules
$ mkdir -p /home/<USER_NAME>/migration-rules/data

此目录结构也将用于存放生成的 MTR 报告。

2.1.2. 创建数据来测试规则

  1. /home/<USER_NAME>/migration-rules/data/ 子目录中创建一个 jbossweb.xml 文件。
  2. 复制以下内容。

    <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
    <jboss-web>
        <class-loading java2ClassLoadingCompliance="false">
            <loader-repository>
                seam.jboss.org:loader=@projectName@
                <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
            </loader-repository>
        </class-loading>
    </jboss-web>

2.1.3. 创建规则

MTR 基于 XML 的规则使用以下规则模式:

when(condition)
  perform(action)
otherwise(action)

流程

  1. /home/<USER_NAME>/migration-rules/rules/ 目录中,创建一个名为 JBoss5-web-class-loading.windup.xml 的文件,其中包含以下内容:

    <?xml version="1.0"?>
    <ruleset id="<UNIQUE_RULESET_ID>"
      xmlns="http://windup.jboss.org/schema/jboss-ruleset"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
      <metadata>
          <description>
              <!-- Ruleset Description -->
          </description>
          <dependencies>
              <!-- Ruleset Dependencies -->
          </dependencies>
          <sourceTechnology id="<SOURCE_ID>" versionRange="<SOURCE_VERSION_RANGE>"/>
          <targetTechnology id="<TARGET_ID>" versionRange="<TARGET_VERSION_RANGE>"/>
          <tag>Reviewed-2015-05-01</tag>
      </metadata>
      <rules>
          <rule id="<UNIQUE_RULE_ID>">
            <when>
                <!-- Test for a condition here -->
            </when>
            <perform>
                <!-- Perform an action -->
            </perform>
          </rule>
       </rules>
    </ruleset>
    注意

    XML 文件名必须包含 .windup.xml 扩展。否则,MTR 不会评估新规则。

  2. 为 ruleset 和 rule 添加唯一标识符:

    • <UNIQUE_RULESET_ID> 替换为适当的规则集 ID,如 JBoss5-web-class-loading
    • <UNIQUE_RULE_ID> 替换为适当的规则 ID,例如 JBoss5-web-class-loading_001
  3. 添加以下 ruleset 附加组件依赖项:

    <dependencies>
      <addon id="org.jboss.windup.rules,windup-rules-javaee,3.0.0.Final"/>
      <addon id="org.jboss.windup.rules,windup-rules-java,3.0.0.Final"/>
    </dependencies>
  4. 添加源和目标技术:

    • <SOURCE_ID> 替换为 eap
    • <TARGET_ID> 替换为 eap
  5. 设置源和目标技术版本。

    • <SOURCE_VERSION_RANGE> 替换为 (4,5)
    • <TARGET_VERSION_RANGE> 替换为 (6,)

    如需更多信息,请参阅 Apache Maven 版本范围规格

  6. 完成 when 条件。由于此规则测试在 XML 文件中的一个匹配项,因此 xmlfile 被用于评估文件。

    要在作为 jboss-web 的子 class-loading 项上匹配,请使用 xpath 表达式 jboss-web/class-loading

    <when>
        <xmlfile matches="jboss-web/class-loading" />
    </when>
  7. 为这个规则完成 perform 操作。

    • 添加带有描述性标题的分类,以及 1 的工作量级别。
    • 提供提示以及描述迁移详情的文档的链接。

      <perform>
          <iteration>
              <classification title="JBoss Web Application Descriptor" effort="1"/>
              <hint title="JBoss Web XML class-loading element is no longer valid">
                <message>
                  The class-loading element is no longer valid in the jboss-web.xml file.
                </message>
                <link href="https://access.redhat.com/documentation/zh-CN/JBoss_Enterprise_Application_Platform/6.4/html-single/Migration_Guide/index.html#Create_or_Modify_Files_That_Control_Class_Loading_in_JBoss_Enterprise_Application_Platform_6" title="Create or Modify Files That Control Class Loading in JBoss EAP 6"/>
              </hint>
          </iteration>
      </perform>

该规则现已完成,应类似以下示例。

<?xml version="1.0"?>
<ruleset id="JBoss5-web-class-loading"
    xmlns="http://windup.jboss.org/schema/jboss-ruleset"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
    <metadata>
        <description>
            This ruleset looks for the class-loading element in a jboss-web.xml file, which is no longer valid in JBoss EAP 6
        </description>
         <dependencies>
            <addon id="org.jboss.windup.rules,windup-rules-javaee,3.0.0.Final"/>
            <addon id="org.jboss.windup.rules,windup-rules-java,3.0.0.Final"/>
        </dependencies>
        <sourceTechnology id="eap" versionRange="(4,5)"/>
        <targetTechnology id="eap" versionRange="[6,)"/>
    </metadata>
    <rules>
        <rule id="JBoss5-web-class-loading_001">
            <when>
                <xmlfile matches="jboss-web/class-loading" />
            </when>
            <perform>
                <iteration>
                    <classification title="JBoss Web Application Descriptor" effort="1"/>
                    <hint title="JBoss Web XML class-loading element is no longer valid">
                      <message>
                        The class-loading element is no longer valid in the jboss-web.xml file.
                      </message>
                      <link href="https://access.redhat.com/documentation/zh-CN/JBoss_Enterprise_Application_Platform/6.4/html-single/Migration_Guide/index.html#Create_or_Modify_Files_That_Control_Class_Loading_in_JBoss_Enterprise_Application_Platform_6" title="Create or modify files that control class loading in JBoss EAP 6"/>
                    </hint>
                </iteration>
            </perform>
        </rule>
     </rules>
</ruleset>

2.1.4. 安装规则

通过将规则放在适当的目录中,会安装 MTR 规则。

JBoss5-web-class-loading.windup.xml 复制到 <MTR_HOME>/rules/ 目录。

$ cp /home/<USER_NAME>/migration-rules/rules/JBoss5-web-class-loading.windup.xml <MTR_HOME>/rules/

2.1.5. 测试规则

打开一个终端,再运行以下命令,将测试文件作为输入参数和输出报告的目录传递。

$ <MTR_HOME>/bin/mta-cli --sourceMode --input /home/<USER_NAME>/migration-rules/data --output /home/<USER_NAME>/migration-rules/reports --target eap:6

您应看到以下结果:

Report created: /home/<USER_NAME>/migration-rules/reports/index.html
              Access it at this URL: file:///home/<USER_NAME>/migration-rules/reports/index.html

2.1.6. 查看报告

查看报告以确保它提供了预期的结果。有关 MTR 报告的详细指导,请参阅 MTR CLI 指南中的审阅报告部分。

  1. 在一个 web 浏览器打开 /home/<USER_NAME>/migration-rules/reports/index.html
  2. 验证规则是否已成功运行。

    1. 在主登录页面中,点 Rule providers execution overview 链接,以打开 Rule Providers Execution Overview。
    2. 找到 JBoss5-web-class-loading_001 规则,验证它的 Status?Condition met,它的 Result?success

      图 2.1. 测试规则执行

      测试规则执行
  3. 验证规则是否与测试数据匹配:

    1. 在主登录页面中,点应用程序或输入文件夹的名称,本例中为 data
    2. Application Details 报告链接。
    3. jboss-web.xml 链接,以查看 Source 报告

      您可以看到 <class-loading> 行已被突出显示,自定义规则中的 hint 会显示内联。

      图 2.2. 规则匹配

      规则匹配

      文件顶部列出了匹配规则的分类。您可以使用链接图标查看该规则的详情。请注意在本示例中,jboss-web.xml 文件匹配另外一个规则 (JBoss web application descriptor (jboss-web.xml)) ,它生成的故事点为 1。此故事点和来自自定义规则的 1 个故事点将此文件的总故事点设置为 2

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.