第3章 XML ルールの作成

3.1. XML ルール構造

本セクションでは、XML ルールの基本構造を説明します。すべての XML ルールは、rulesets 内の要素として定義されます。詳細は、MTA XML rule schema を参照してください。

3.1.1. ルールセット

ルールセットとは、特定の移行領域をターゲットとする 1 つ以上のルールのグループです。これは <ruleset> 要素の基本構造です。

  • <ruleset id="<UNIQUE_RULESET_ID>">: これを MTA ルールセットとして定義し、一意のルールセット ID を指定します。

    • <metadata>: ルールセットに関するメタデータ。

      • <description>: ルールセットの説明。
      • <dependencies/>: このルールセットで必要なルールアドオンです。
      • <sourceTechnology/>: ソーステクノロジー。
      • <targetTechnology/>: ターゲットテクノロジー。
      • <overrideRules/>: true に設定した場合は、MTA で配布されるコアルールセットと同じ ID で、このルールセットのルールをオーバーライドします。ルールセット ID とルール id の両方がコアルールセット内のルールと一致する必要があり、ルールは無視されます。デフォルトは false です。
    • <rules>: 個々のルールのセット。

      • <rule id="<UNIQUE_RULE_ID>"> ルールを定義して、一意の ID を指定します。ルール ID の一部としてルールセット ID を含めることが推奨されます (例: <UNIQUE_RULESET_ID_UNIQUE_RULE_ID>)。ルールセットには 1 つ以上のルールを定義できます。

        • <when>: 照合する条件。
        • <perform>: ルール条件が一致したときに実行されるアクション。
        • <otherwise>: ルール条件が一致しない場合に実行されるアクション。この要素は、<perform> 要素と同じ子要素を取ります。
        • <where>: パラメーターとして定義される文字列パターン。このパターンは、ルール定義の他の場所で使用できます。
      • <file-mapping/>: エクステンションをグラフタイプにマップします。
      • <package-mapping/>: パッケージパターン (正規表現) から組織名にマッピングします。

3.1.2. 事前定義されたルール

MTA は、一般的な移行要件に事前定義されたルールを提供します。これらのコア MTA ルールは、MTA インストールの <MTA_HOME>/rules/migration-core/ にあります。

以下は、プロプライエタリーユーティリティークラスで一致するコア MTA ルールの例になります。

<?xml version="1.0"?>
<ruleset xmlns="http://windup.jboss.org/schema/jboss-ruleset" id="weblogic" 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 provides analysis of WebLogic proprietary classes and constructs that may require individual attention when migrating to JBoss EAP 6+.
        </description>
        <dependencies>
            <addon id="org.jboss.windup.rules,windup-rules-javaee,2.0.1.Final" />
            <addon id="org.jboss.windup.rules,windup-rules-java,2.0.0.Final" />
        </dependencies>
        <sourceTechnology id="weblogic" />
        <targetTechnology id="eap" versionRange="[6,)" />
        <tag>reviewed-2015-06-02</tag>
        <tag>weblogic</tag>
    </metadata>
    <rules>
        ...
        <rule id="weblogic-02000">
            <when>
                <javaclass references="weblogic.utils.StringUtils.{*}" />
            </when>
            <perform>
                <hint title="WebLogic StringUtils usage" effort="1" category-id="mandatory">
                    <message>Replace with the `StringUtils` class from Apache Commons.</message>
                    <link href="https://commons.apache.org/proper/commons-lang/" title="Apache Commons Lang" />
                    <tag>weblogic</tag>
                </hint>
            </perform>
        </rule>
        ...
    </rules>
</ruleset>