CLI Guide


Migration Toolkit for Applications 7.1

Learn how to use the Migration Toolkit for Applications CLI to migrate your applications.

Red Hat Customer Content Services

Abstract

This guide describes how to use the Migration Toolkit for Applications CLI to simplify migration of Java applications.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. Because of the enormity of this endeavor, these changes will be implemented gradually over several upcoming releases. For more details, see our CTO Chris Wright’s message.

Chapter 1. Introduction

1.1. About the CLI Guide

This guide is for engineers, consultants, and others who want to use the Migration Toolkit for Applications (MTA) to migrate Java applications, .NET applications, or other components. In MTA 7.1 and later, you can use MTA to analyze applications written in languages other than Java. To run analysis on applications written in languages other than Java, add a custom rule set and do not specify a target language. This guide describes how to install and run the CLI, review the generated reports, and take advantage of additional features.

Important

.NET migration is a Developer Preview feature only. Developer Preview features are not supported by Red Hat in any way and are not functionally complete or production-ready. Do not use Developer Preview features for production or business-critical workloads. Developer Preview features provide early access to upcoming product features in advance of their possible inclusion in a Red Hat product offering, enabling customers to test functionality and provide feedback during the development process. These features might not have any documentation, are subject to change or removal at any time, and testing is limited. Red Hat might provide ways to submit feedback on Developer Preview features without an associated SLA.

Important

Analyzing applications written in a language other than Java is a Developer Preview feature only. Developer Preview features are not supported by Red Hat in any way and are not functionally complete or production-ready. Do not use Developer Preview features for production or business-critical workloads. Developer Preview features provide early access to upcoming product features in advance of their possible inclusion in a Red Hat product offering, enabling customers to test functionality and provide feedback during the development process. These features might not have any documentation, are subject to change or removal at any time, and testing is limited. Red Hat might provide ways to submit feedback on Developer Preview features without an associated SLA.

1.2. About the Migration Toolkit for Applications

What is the Migration Toolkit for Applications?

Migration Toolkit for Applications (MTA) accelerates large-scale application modernization efforts across hybrid cloud environments on Red Hat OpenShift. This solution provides insight throughout the adoption process, at both the portfolio and application levels: inventory, assess, analyze, and manage applications for faster migration to OpenShift via the user interface.

In MTA 7.1 and later, when you add an application to the Application Inventory, MTA automatically creates and executes language and technology discovery tasks. Language discovery identifies the programming languages used in the application. Technology discovery identifies technologies, such as Enterprise Java Beans (EJB), Spring, etc. Then, each task assigns appropriate tags to the application, reducing the time and effort you spend manually tagging the application.

MTA uses an extensive default questionnaire as the basis for assessing your applications, or you can create your own custom questionnaire, enabling you to estimate the difficulty, time, and other resources needed to prepare an application for containerization. You can use the results of an assessment as the basis for discussions between stakeholders to determine which applications are good candidates for containerization, which require significant work first, and which are not suitable for containerization.

MTA analyzes applications by applying one or more rulesets to each application considered to determine which specific lines of that application must be modified before it can be modernized.

MTA examines application artifacts, including project source directories and application archives, and then produces an HTML report highlighting areas needing changes.

How does the Migration Toolkit for Applications simplify migration?

The Migration Toolkit for Applications looks for common resources and known trouble spots when migrating applications. It provides a high-level view of the technologies used by the application.

MTA generates a detailed report evaluating a migration or modernization path. This report can help you to estimate the effort required for large-scale projects and to reduce the work involved.

1.2.1. Supported Migration Toolkit for Applications migration paths

The Migration Toolkit for Applications (MTA) supports the following migrations:

  • Migrating from third-party enterprise application servers, such as Oracle WebLogic Server, to JBoss Enterprise Application Platform (JBoss EAP).
  • Upgrading to the latest release of JBoss EAP.
  • Migrating from a Windows-only .NET 4.5+ Framework to cross-platform .NET 8.0. (Developer Preview)

MTA provides a comprehensive set of rules to assess the suitability of your applications for containerization and deployment on Red Hat OpenShift Container Platform (RHOCP). You can run an MTA analysis to assess your applications' suitability for migration to multiple target platforms.

Table 1.1. Supported Java migration paths: Source platform ⇒ Target platform
Source platform ⇒Migration to JBoss EAP 7 & 8OpenShift (cloud readiness)OpenJDK 11, 17, and 21Jakarta EE 9Camel 3 & 4Spring Boot in Red Hat RuntimesQuarkusOpen Liberty

Oracle WebLogic Server

-

-

-

-

-

IBM WebSphere Application Server

-

-

-

-

JBoss EAP 4

[a]

-

-

-

-

-

JBoss EAP 5

-

-

-

-

-

JBoss EAP 6

-

-

-

-

-

JBoss EAP 7

-

-

-

-

Thorntail

[b]

-

-

-

-

-

-

-

Oracle JDK

-

-

-

-

-

-

Camel 2

-

-

-

-

-

Spring Boot

-

-

-

Any Java application

-

-

-

-

-

-

Any Java EE application

-

-

-

-

-

-

-

[a] Although MTA does not currently provide rules for this migration path, Red Hat Consulting can assist with migration from any source platform to JBoss EAP 7.
[b] Requires JBoss Enterprise Application Platform expansion pack 2 (EAP XP 2)
  1. .NET migration paths: Source platform ⇒ Target platform (Developer Preview)
Source platform ⇒OpenShift (cloud readiness)Migration to .NET 8.0

.NET Framework 4.5+ (Windows only)

For more information about use cases and migration paths, see the MTA for developers web page.

1.3. The MTA CLI

The CLI is a command-line tool in the Migration Toolkit for Applications that you can use to assess and prioritize migration and modernization efforts for applications. It provides numerous reports that highlight the analysis without using the other tools. The CLI includes a wide array of customization options. By using the CLI, you can tune MTA analysis options or integrate with external automation tools.

Chapter 2. Installing and Running the CLI

2.1. Installing the CLI

You can install the CLI on Linux, Windows, or macOS operating systems using the downloadable .zip file.

Prerequisites

  • Red Hat Container Registry Authentication for registry.redhat.io. Red Hat distributes container images from registry.redhat.io, which requires authentication. For more details, see Red Hat Container Registry Authentication.

2.1.1. Installing the CLI .zip file

Procedure

  1. Navigate to the MTA Download page and download the OS-specific CLI file or the src file:

    • mta-7.1.1-cli-linux.zip
    • mta-7.1.1-cli-macos.zip
    • mta-7.1.1-cli-windows.zip
    • mta-7.1.1-cli-src.zip
  2. Extract the .zip file to a directory of your choice. The .zip file extracts a single binary, called mta-cli.

    When you encounter <MTA_HOME> in this guide, replace it with the actual path to your MTA installation.

2.1.2. Installing the CLI by using Podman

You can install the CLI using podman pull.

Prerequisites

  • Red Hat Container Registry Authentication for registry.redhat.io. Red Hat distributes container images from registry.redhat.io, which requires authentication. See Red Hat Container Registry Authentication for additional details.
  • Podman must be installed.
Podman

Podman is a daemonless, open source, Linux-native tool designed to make it easy to find, run, build, share, and deploy applications using Open Containers Initiative (OCI) Containers and Container Images. Podman provides a command-line interface (CLI) familiar to anyone who has used the Docker Container Engine. For more information on installing and using Podman, see Podman installation instructions.

Procedure

  1. Use Podman to authenticate to registry.redhat.io by running the following command:

    $ podman login registry.redhat.io

    Enter the user name and password:

    Username: <username>
    Password: <***********>
  2. Copy the binary PATH to enable system-wide use by running the following command:

    $ podman cp $(podman create registry.redhat.com/mta-toolkit/mta-mta-cli-rhel9:{ProductVersion}):/usr/local/bin/mta-cli ./
    Warning

    Although installation using Podman is possible, downloading and installing the .zip file is the preferred installation.

2.1.3. Installing the CLI for use with Docker on Windows (Developer Preview)

You can install the CLI for use with Docker on Windows. This is the required approach when migrating applications built with .NET framework 4.5 or later on Windows to cross-platform .NET 8.0.

Prerequisites

  • A host with Windows 11+ 64-bit version 21H2 or higher.
  • You have download the Docker Desktop for Windows installer. See Install Docker Desktop on Windows for additional details.

Procedure

  1. Open a PowerShell with Administrator privileges.
  2. Ensure Hyper-V is installed and enabled:

    PS C:\Users\<your_user_name>> Enable-WindowsOptionalFeature -Online `
       -FeatureName Microsoft-Hyper-V-All
    PS C:\Users\<your_user_name>> Enable-WindowsOptionalFeature -Online `
       -FeatureName Containers
    Note

    You may need to reboot Windows.

  3. Install Docker Desktop on Windows.

    1. Double-click Docker_Desktop_Installer.exe to run the installer. By default, Docker Desktop is installed at C:\Program Files\Docker\Docker.
    2. Deselect the Use WSL 2 instead of Hyper-V option on the Configuration page to ensure that Docker will run Windows containers as the backend instead of Linux containers.
  4. In PowerShell, create a folder for MTA:

    PS C:\Users\<your_user_name>> mkdir C:\Users\<your_user_name>\MTA

    Replace <your_user_name> with the username for your home directory.

  5. Extract the mta-7.1.1-cli-windows.zip file to the MTA folder:

    PS C:\Users\<your_user_name>> cd C:\Users\<your_user_name>\Downloads

    Replace <your_user_name> with the username for your home directory.

    PS C:\Users\<your_user_name>> Expand-Archive `
       -Path "{ProductShortNameLower}-{ProductVersion}-cli-windows.zip" `
       -DestinationPath "C:\Users\<your_user_name>\MTA"

    Replace <your_user_name> with the username for your home directory.

  6. Ensure Docker is running Windows containers:

    PS C:\Users\<your_user_name>> docker version
    Client:
     Version:           27.0.3
     API version:       1.46
     Go version:        go1.21.11
     Git commit:        7d4bcd8
     Built:             Sat Jun 29 00:03:32 2024
     OS/Arch:           windows/amd64 1
     Context:           desktop-windows
    Server: Docker Desktop 4.32.0 (157355)
     Engine:
      Version:          27.0.3
      API version:      1.46 (minimum version 1.24)
      Go version:       go1.21.11
      Git commit:       662f78c
      Built:            Sat Jun 29 00:02:13 2024
      OS/Arch:          windows/amd64 2
      Experimental:     false
    1 2
    Ensure the OS/Arch setting is windows/amd64.
  7. Set the PODMAN_BIN environment variable to use Docker:

    PS C:\Users\<your_user_name>> $env:PODMAN_BIN="C:\Windows\system32\docker.exe"
  8. Set the DOTNET_PROVIDER_IMG environment variable to use the upstream dotnet-external-provider:

    PS C:\Users\<your_user_name>> $env:DOTNET_PROVIDER_IMG="quay.io/konveyor/dotnet-external-provider:v0.5.0"
  9. Set the RUNNER_IMG environment variable to use the upstream image:

    PS C:\Users\<your_user_name>> $env:RUNNER_IMG="quay.io/konveyor/kantra:v0.5.0"

2.2. Installing MTA on a disconnected environment

On a connected device, first download and save the MTA binary. Then download and save the Podman images, the MTA CLI image and the provider image that you need.

  • Download the required MTA CLI binary from the Migration Toolkit for Applications Red Hat Developer page:

    • CLI for Linux x86_64
    • CLI for Linux aarch64
    • CLI for MacOS x86_64
    • CLI for MacOS aarch64
    • CLI for Windows x86_64
    • CLI for Windows aarch64
  • On a connected device, download and save the images.
  • Copy the binary to the disconnected device.
  • In addition, you must save and import the associated container images by using Podman.

2.2.1. Downloading the Podman images

Prerequisites

  • Podman installed. For more information, see Podman.

Procedure

  1. Use Podman to authenticate to registry.redhat.io:

    $ podman login registry.redhat.io
  2. Enter your username and then your password for registry.redhat.io:

    Username: <registry_service_account_username>
    Password: <registry_service_account_password>

    You should see the following output:

    Login Succeeded!
  3. Use Podman to pull the image from the registry:

    $ podman pull registry.redhat.io/mta/mta-cli-rhel9:7.1.0
  4. Use Podman to pull the provider image that you need from the registry:

    1. For Java, run:

      $ podman pull registry.redhat.io/mta/mta-java-external-provider-rhel9:7.1.0
    2. For .NET, run:

      $ podman pull registry.redhat.io/mta/mta-dotnet-external-provider-rhel9:7.1.0
  5. Save the images:

    $ podman save <image> -o <my_image.image>
  6. Copy the .image file and the binary onto a USB or directly to the file system of the disconnected device.
  7. On the disconnected device, run

    $ podman load --input <my_image.image>

2.2.2. CLI known issues

Limitations with Podman on Microsoft Windows

The CLI is built and distributed with support for Microsoft Windows.

However, when running any container image based on Red Hat Enterprise Linux 9 (RHEL9) or Universal Base Image 9 (UBI9), the following error can be returned when starting the container:

Fatal glibc error: CPU does not support x86-64-v2

This error is caused because Red Hat Enterprise Linux 9 or Universal Base Image 9 container images must be run on a CPU architecture that supports x86-64-v2.

For more details, see (Running Red Hat Enterprise Linux 9 (RHEL) or Universal Base Image (UBI) 9 container images fail with "Fatal glibc error: CPU does not support x86-64-v2").

CLI runs the container runtime correctly. However, different container runtime configurations are not supported.

Although unsupported, you can run CLI with Docker instead of Podman, which would resolve this issue.

To achieve this, you replace the PODMAN_BIN path with the path to Docker.

For example, if you experience this issue, instead of issuing:

PODMAN_BIN=/usr/local/bin/docker mta-cli analyze

You replace PODMAN_BIN with the path to Docker:

<Docker Root Dir>=/usr/local/bin/docker mta-cli analyze

While this is not supported, it would allow you to explore CLI while you work to upgrade your hardware or move to hardware that supports x86_64-v2.

2.3. Running the CLI

You can run the Migration Toolkit for Applications (MTA) CLI against one or more applications.

Before MTA 7.1.0, if you wanted to run the CLI against multiple applications, you ran a series of --analyze commands, each against an application, and each generating a separate report. This option, which is still fully supported, is described in Running the MTA CLI against an application.

In MTA 7.1.0 and later, you can run the CLI against multiple applications by using the --bulk option, to generate a single report. This option, which is presented as a Developer Preview, is described in Running the MTA CLI against multiple applications and generating a single report (Developer Preview).

Important

Running the CLI against one or more applications is a Developer Preview feature only. Developer Preview features are not supported by Red Hat in any way and are not functionally complete or production-ready. Do not use Developer Preview features for production or business-critical workloads. Developer Preview features provide early access to upcoming product features in advance of their possible inclusion in a Red Hat product offering, enabling customers to test functionality and provide feedback during the development process. These features might not have any documentation, are subject to change or removal at any time, and testing is limited. Red Hat might provide ways to submit feedback on Developer Preview features without an associated SLA.

2.3.1. Running the MTA CLI against an application

You can run the Migration Toolkit for Applications (MTA) CLI against an application.

Procedure

  1. Open a terminal and navigate to the <MTA_HOME>/ directory.
  2. Run the mta-cli script, or mta-cli.exe for Windows, and specify the appropriate arguments:

    $ ./mta-cli analyze --input <path_to_input> \
        --output <path_to_output> --source <source_name> --target <target_source> \
    • --input: The application to be evaluated.
    • --output: The output directory for the generated reports.
    • --source: The source technology for the application migration. For example, weblogic.
    • --target: The target technology for the application migration. For example, eap8.
  3. Access the report.
2.3.1.1. MTA command examples
Running MTA on an application archive

The following command analyzes the example EAR archive named jee-example-app-1.0.0.ear for migrating from JBoss EAP 5 to JBoss EAP 7:

$ <MTA_HOME>/mta-cli analyze \
    --input <path_to_jee-example-app-1.0.0.ear> \
    --output <path_to_report_output> --source eap5 --target eap7 \
Running MTA on source code

The following command analyzes the source code of an example application called customer-management for migrating to JBoss EAP 8.

$ <MTA_HOME>/mta-cli analyze --mode source-only --input <path_to_customer-management>
--output <path_to_report_output> --target eap8
Running cloud-readiness rules

The following command analyzes the example EAR archive named jee-example-app-1.0.0.ear for migrating to JBoss EAP 7. It also evaluates the archive for cloud readiness:

$ <MTA_HOME>/mta-cli analyze --input <path_to_jee-example-app-1.0.0.ear> \
    --output <path_to_report_output> \
    --target eap7

2.3.2. Running the MTA CLI against multiple applications and generating a single report (Developer Preview)

You can now run the Migration Toolkit for Applications (MTA) CLI against multiple applications and generate a combined report. This can save you time and give you a better idea of how to prepare a set of applications for migration.

This feature is currently a Developer Preview feature.

Important

Running the CLI against one or more applications is a Developer Preview feature only. Developer Preview features are not supported by Red Hat in any way and are not functionally complete or production-ready. Do not use Developer Preview features for production or business-critical workloads. Developer Preview features provide early access to upcoming product features in advance of their possible inclusion in a Red Hat product offering, enabling customers to test functionality and provide feedback during the development process. These features might not have any documentation, are subject to change or removal at any time, and testing is limited. Red Hat might provide ways to submit feedback on Developer Preview features without an associated SLA.

Procedure

  1. Open a terminal and navigate to the <MTA_HOME>/ directory.
  2. Run the mta-cli script, or mta-cli.exe for Windows, and specify the appropriate arguments, entering one input per analyze command, but entering the same output directory for all inputs. For example, to analyze applications A, B, and C:

    1. Enter the following command for input A:

      $ ./{mta-cli} analyze --bulk --input=<path_to_input_A> --output=<path_to_output_ABC> --source <source_A> --target <target_A>
      • --input: The application to be evaluated.
      • --output: The output directory for the generated reports.
      • --source: The source technology for the application migration. For example, weblogic.
      • --target: The target technology for the application migration. For example, eap8.
    2. Enter the following command for input B:

      $ ./{mta-cli} analyze --bulk --input=<path_to_input_B> --output=<path_to_output_ABC>  --source <source_B> --target <target_B>
    3. Enter the following command for input C:

      $ ./{mta-cli} analyze --bulk --input=<path_to_input_C> --output=<path_to_output_ABC>  --source <source_C> --target <target_C>

      MTA generates a single report, listing all issues that need to be resolved before the applications can be migrated.

  3. Access the report.

2.3.3. Performing analysis using the command line

Analyze supports running source code and binary analysis by using the analyzer-lsp tool. analyzer-lsp evaluates the rules for the providers and determines rule matches.

To run analysis on application source code, run the following command:

mta-cli analyze --input=<path_to_source_code> --output=<path_to_output_directory>

All flags:

Analyze application source code

Usage:
  mta-cli analyze [flags]

Flags:

      --analyze-known-libraries           Analyze known open-source libraries.
      --context-lines (int)               Number of lines of source code to
                                          include in the output for each
                                          incident (default: `100`).
  -d, --dependency-folders (stringArray)  Directory for dependencies.
      --enable-default-rulesets           Run default rulesets with analysis
                                          (default: `true`).
  -h, --help                              Help for analyze.
      --http-proxy (string)               HTTP proxy string URL.
      --https-proxy (string)              HTTPS proxy string URL.
      --incident-selector (string)        An expression to select incidents
                                          based on custom variables.
                                          Example:
                                          !package=io.demo.config-utils
  -i, --input (string)                    Path to application source code or
                                          a binary.
      --jaeger-endpoint (string)          Jaeger endpoint to collect traces.
      --json-output                       Create analysis and dependency
                                          output as JSON.
      --list-sources                      List rules for available
                                          migration sources.
      --list-targets                      List rules for available
                                          migration targets.
  -l, --label-selector (string)           Run rules based on specified label
                                          selector expression.
      --maven-settings (string)           Path to the custom maven
                                          settings file to use.
      --overwrite                         Overwrite output directory.
      --skip-static-report                Do not generate the static report.
  -m, --mode (string)                     Analysis mode, must be one of
                                          `full` or `source-only`
                                          (default: `full`).
      --no-proxy (string)                 Proxy-excluded URLs
                                          (relevant only with proxy).
  -o, --output (string)                   Path to the directory for analysis
                                          output.
      --overwrite                         Overwrite output directory.
      --rules (stringArray)               Filename or directory containing
                                          rule files.
      --skip-static-report                Do not generate the static report.
  -s, --source (string)                   Source technology to consider
                                          for analysis.
                                          To specify multiple sources,
                                          repeat the parameter:
                                          `--source <source_1>
                                          --source <source_2>` etc.
  -t, --target (string)                   Target technology to consider
                                          for analysis.
                                          To specify multiple targets,
                                          repeat the parameter:
                                          `--target <target_1>
                                          --target <target_2>` etc.


Global Flags:
      --log-level uint32                  Log level (default: 4).
      --no-cleanup                        Do not cleanup temporary resources.
Note

The list of flags above does not include the --bulk flag because this flag is only offered as part of a Developer Preview feature. That feature is described in Support for providing a single report when analyzing multiple applications on the CLI.

Usage example

  1. Get an example application to run analysis on.
  2. List available target technologies.

    mta-cli analyze --list-targets
  3. Run an analysis with a specified target technology, for example cloud-readiness.

    mta-cli analyze --input=<path-to/example-applications/example-1> --output=<path-to-output-dir> --target=cloud-readiness
  4. Several analysis reports are created in your specified output path:

    $ ls ./output/ -1
    analysis.log
    dependencies.yaml
    dependency.log
    output.yaml
    static-report
    • output.yaml is the file that contains the issues report.
    • static-report contains the static HTML report.
    • dependencies.yaml contains the dependencies report.

2.3.4. Performing transformation by using the command line

You can use transformation to perform the following actions:

  • Transform Java applications source code by using the transform openrewrite command.
  • Convert XML rules to YAML rules by using the transform rules command.
Important

Performing transformation requires the container runtime to be configured. For more information, see Installing the CLI by using Podman.

Transform application source code or mta XML rules

Usage:
  mta-cli transform [flags]
  mta-cli transform [command]

Available Commands:
  openrewrite Transform application source code using OpenRewrite recipes
  rules       Convert XML rules to YAML

Flags:
  -h, --help   help for transform

Global Flags:
      --log-level uint32   log level (default 4)
      --no-cleanup         do not clean up temporary resources

Use "mta-cli transform [command] --help" for more information about a command.
2.3.4.1. OpenRewrite

The openrewrite subcommand allows running OpenRewrite recipes on source code.

Transform application source code using OpenRewrite recipes

Usage:
  mta-cli transform openrewrite [flags]

Flags:
  -g, --goal string     target goal (default "dryRun")
  -h, --help            help for openrewrite
  -i, --input string    path to application source code directory
  -l, --list-targets    list all available OpenRewrite recipes
  -s, --maven-settings string   path to a custom maven settings file to use
  -t, --target string   target openrewrite recipe to use. Run --list-targets to get a list of packaged recipes.

Global Flags:
      --log-level uint32   log level (default 4)
      --no-cleanup         do not clean up temporary resources

To run transform openrewrite on application source code, run the following command:

mta-cli transform openrewrite --input=<path/to/source/code> --target=<exactly_one_target_from_the_list>

Note

You can only use a single target to run the transform overwrite command.

2.3.4.2. Rules

You can use the rules subcommand of the transform command to convert mta XML rules to analyzer-lsp YAML rules. To covert rules, the rules subcommand uses the windup-shim tool.

Note

analyzer-lsp evaluates the rules for the providers and determines rule matches.

Convert XML rules to YAML

Usage:
  mta-cli transform rules [flags]

Flags:
  -h, --help                help for rules
  -i, --input stringArray   path to XML rule file(s) or directory
  -o, --output string       path to output directory

Global Flags:
      --log-level int   log level (default 5)

To run transform rules on application source code, run the following:

mta-cli transform rules --input=<path/to/xmlrules> --output=<path/to/output/dir>

Usage example

  1. Get an example application to transform source code.
  2. View the available OpenRewrite recipes.

    mta-cli transform openrewrite --list-targets
  3. Run a recipe on the example application.

    mta-cli transform openrewrite --input=<path-to/jakartaee-duke> --target=jakarta-imports

    Inspect the jakartaee-duke application source code diff to see the transformation.

2.3.4.3. Available OpenRewrite recipes
Table 2.1. Available OpenRewrite recipes
Migration pathPurposerewrite.configLocationactiveRecipes

Java EE to Jakarta EE

Replace import of javax packages with equivalent jakarta packages

Replace javax artifacts, declared within pom.xml files, with the jakarta equivalents

<MTA_HOME>/rules/openrewrite/jakarta \ /javax/imports/rewrite.yml

org.jboss.windup.JavaxToJakarta

Java EE to Jakarta EE

Rename bootstrapping files

<MTA_HOME>/rules/openrewrite/jakarta \ /javax/bootstrapping/rewrite.yml

org.jboss.windup.jakarta.javax. \ BootstrappingFiles

Java EE to Jakarta EE

Transform persistence.xml configuration

<MTA_HOME>/rules/openrewrite/jakarta \ /javax/xml/rewrite.yml

org.jboss.windup.javax-jakarta. \ PersistenceXML

Spring Boot to Quarkus

Replace spring.jpa.hibernate.ddl-auto property within files matching application*.properties

<MTA_HOME>/rules/openrewrite/quarkus \ /springboot/properties/rewrite.yml

org.jboss.windup.sb-quarkus.Properties

2.4. Accessing reports

When you run the Migration Toolkit for Applications, a report is generated in the <OUTPUT_REPORT_DIRECTORY> that you specify using the --output argument in the command line.

The output directory contains the following files and subdirectories:

<OUTPUT_REPORT_DIRECTORY>/
├── index.html          // Landing page for the report
├── <EXPORT_FILE>.csv   // Optional export of data in CSV format
├── archives/           // Archives extracted from the application
├── mavenized/          // Optional Maven project structure
├── reports/            // Generated HTML reports
├── stats/              // Performance statistics

Procedure

  1. Obtain the path of the index.html file of your report from the output that appears after you run MTA:

    Report created: <OUTPUT_REPORT_DIRECTORY>/index.html
                  Access it at this URL: file:///<OUTPUT_REPORT_DIRECTORY>/index.html
  2. Open the index.html file by using a browser.

    The generated report is displayed.

2.5. Analyzing multi-language applications with CLI

Starting from MTA 7.1.0, you can run the application analysis on applications written in multiple languages. You can perform the analysis either of the following ways:

  • Select the supported language provider to run the analysis for.
  • Override the existing supported language provider with your own unsupported language provider and run the analysis for this unsupported provider.

2.5.1. Analyzing a multi-language application for the selected supported language provider

When analyzing a multi-language application with Migration Toolkit for Applications (MTA) CLI, you can explicitly set a supported language provider according to your application language to run the analysis for.

Prerequisites

  • You are running the latest version of MTA CLI.

Procedure

  1. List language providers supported for the analysis:

    $ mta-cli analyze --list-providers
  2. Run the application analysis for the selected language provider:

    $ mta-cli analyze --input <_path_to_the_source_repository_> --output <_path_to_the_output_directory_> --provider <_language_provider_> --rules <_path_to_custom_rules_>

    Note that if you do not set the --provider option, the analysis might fail because it detects unsupported providers. The analysis will complete without --provider only if all discovered providers are supported.

2.5.2. Analyzing a multi-language application for an unsupported language provider

When analyzing a multi-language application with Migration Toolkit for Applications (MTA) CLI, you can run the analysis for an unsupported language provider. To do so, you must override an existing supported language provider with your own unsupported language provider by using the --override-provider-settings option.

Important

You must create a configuration file for your unsupported language provider before overriding the supported provider.

Prerequisites

  • You created a configuration file for your unsupported language provider.

Procedure

  • Override an existing supported language provider with your unsupported provider:

    $ mta-cli analyze --provider-override <path_to_configuration_file> --output=<path_to_the_output_directory> --rules <path_to_custom_rules>

Chapter 3. Reviewing the reports

Use a browser to open the index.html file located in the report output directory. This opens a landing page that lists the applications that were processed. Each row contains a high-level overview of the story points, number of incidents, and technologies encountered in that application.

Figure 3.1. Application list

Application list
Note

The incidents and estimated story points change as new rules are added to MTA. The values here may not match what you see when you test this application.

The following table lists all of the reports and pages that can be accessed from this main MTA landing page. Click the name of the application, jee-example-app-1.0.0.ear, to view the application report.

PageHow to Access

Application

Click the name of the application.

Technologies report

Click the Technologies link at the top of the page.

Archives shared by multiple applications

Click the Archives shared by multiple applications link. Note that this link is only available when there are shared archives across multiple applications.

Rule providers execution overview

Click the Rule providers execution overview link at the bottom of the page.

Note that if an application shares archives with other analyzed applications, you will see a breakdown of how many story points are from shared archives and how many are unique to this application.

Figure 3.2. Shared archives

Shared archives

Information about the archives that are shared among applications can be found in the Archives Shared by Multiple Applications reports.

3.1. Application report

3.1.1. Dashboard

Access this report from the report landing page by clicking on the application name in the Application List.

The dashboard gives an overview of the entire application migration effort. It summarizes:

  • The incidents and story points by category
  • The incidents and story points by level of effort of the suggested changes
  • The incidents by package

Figure 3.3. Dashboard

Dashboard

The top navigation bar lists the various reports that contain additional details about the migration of this application. Note that only those reports that are applicable to the current application will be available.

ReportDescription

Issues

Provides a concise summary of all issues that require attention.

Insights

Provides information about the technologies used in the application and their usage in the code. However, these Insights do not impact the migration.

Application details

Provides a detailed overview of all resources found within the application that may need attention during the migration.

Technologies

Displays all embedded libraries grouped by functionality, allowing you to quickly view the technologies used in each application.

Dependencies

Displays all Java-packaged dependencies found within the application.

Unparsable

Shows all files that MTA could not parse in the expected format. For instance, a file with a .xml or .wsdl suffix is assumed to be an XML file. If the XML parser fails, the issue is reported here and also where the individual file is listed.

Remote services

Displays all remote services references that were found within the application.

EJBs

Contains a list of EJBs found within the application.

JBPM

Contains all of the JBPM-related resources that were discovered during analysis.

JPA

Contains details on all JPA-related resources that were found in the application.

Hibernate

Contains details on all Hibernate-related resources that were found in the application.

Server resources

Displays all server resources (for example, JNDI resources) in the input application.

Spring Beans

Contains a list of Spring Beans found during the analysis.

Hard-coded IP addresses

Provides a list of all hard-coded IP addresses that were found in the application.

Ignored files

Lists the files found in the application that, based on certain rules and MTA configuration, were not processed. See the --userIgnorePath option for more information.

About

Describes the current version of MTA and provides helpful links for further assistance.

3.1.2. Issues report

Access this report from the dashboard by clicking the Issues link.

This report includes details about every issue that was raised by the selected migration paths. The following information is provided for each issue encountered:

  • A title to summarize the issue.
  • The total number of incidents, or times the issue was encountered.
  • The rule story points to resolve a single instance of the issue.
  • The estimated level of effort to resolve the issue.
  • The total story points to resolve every instance encountered. This is calculated by multiplying the number of incidents found by the story points per incident.

Figure 3.4. Issues report

Issues report

Each reported issue may be expanded, by clicking on the title, to obtain additional details. The following information is provided.

  • A list of files where the incidents occurred, along with the number of incidents within each file. If the file is a Java source file, then clicking the filename will direct you to the corresponding Source report.
  • A detailed description of the issue. This description outlines the problem, provides any known solutions, and references supporting documentation regarding either the issue or resolution.
  • A direct link, entitled Show Rule, to the rule that generated the issue.

Figure 3.5. Expanded issue

Expanded rule in the issues report

Issues are sorted into four categories by default. Information on these categories is available at ask Category.

3.1.3. Insights

Important

Insights is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.

For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope.

Previously, a violation generated by a rule with zero effort was listed as an issue in the static report. This is now listed as an insight instead. Issues are generated by general rules, whereas string tags are generated by tagging rules. String tags indicate the presence of a technology but do not show the code location. With the introduction of Insights, you can see the technology used in the application along with its usage in the code.

For example, a rule searching for deprecated API usage in the code that does not impact the current migration but can be tracked and fixed when needed in the future.

Unlike issues, insights do not need to be fixed for a successful migration. They are generated by any rule that doesn’t have a positive effort value and category assigned. They might have a message and tag.

Note

Insights are generated automatically if applicable or present. Currently, MTA supports generating Insights when application anaylsis is done using CLI.

You can view Insights under the Insights tab in the static report.

Insights tab in the Static report

Example: Insights generated by a tagging rule with undefined effort

- customVariables: []
  description: Embedded library - Apache Wicket
  labels:
  - konveyor.io/include=always
  links: []
  ruleID: mvc-01000
  tag:
  - Apache Wicket
  - Embedded library - Apache Wicket
  when:
    builtin.file:
      pattern: .*wicket.*\.jar

Example: Insights generated by a non-tagging rule with zero effort

- category: potential
  customVariables: []
  description: RESTful Web Services @Context annotation has been deprecated
  effort: 0
  message: Future versions of this API will no longer support `@Context` and related
    types such as `ContextResolver`.
  ruleID: jakarta-ws-rs-00001
  when:
    java.referenced:
      location: ANNOTATION
      pattern: jakarta.ws.rs.core.Context

3.1.4. Application details report

Access this report from the dashboard by clicking the Application Details link.

The report lists the story points, the Java incidents by package, and a count of the occurrences of the technologies found in the application. Next is a display of application messages generated during the migration process. Finally, there is a breakdown of this information for each archive analyzed during the process.

Figure 3.6. Application Details report

Application Details report

Expand the jee-example-app-1.0.0.ear/jee-example-services.jar to review the story points, Java incidents by package, and a count of the occurrences of the technologies found in this archive. This summary begins with a total of the story points assigned to its migration, followed by a table detailing the changes required for each file in the archive. The report contains the following columns.

Column NameDescription

Name

The name of the file being analyzed.

Technology

The type of file being analyzed, for example, Decompiled Java File or Properties.

Issues

Warnings about areas of code that need review or changes.

Story Points

Level of effort required to migrate the file.

Note that if an archive is duplicated several times in an application, it will be listed just once in the report and will be tagged with [Included multiple times].

Figure 3.7. Duplicate archive in an application

Duplicate archive

The story points for archives that are duplicated within an application will be counted only once in the total story point count for that application.

3.1.5. Technologies report

Access this report from the dashboard by clicking the Technologies link.

The report lists the occurrences of technologies, grouped by function, in the analyzed application. It is an overview of the technologies found in the application, and is designed to assist users in quickly understanding each application’s purpose.

The image below shows the technologies used in the jee-example-app.

Figure 3.8. Technologies in an application

Technology report Application view

3.1.6. Source report

The Source report displays the migration issues in the context of the source file in which they were discovered.

Figure 3.9. Source report

Source Report

3.2. Technologies report

Access this report from the report landing page by clicking the Technologies link.

This report provides an aggregate listing of the technologies used, grouped by function, for the analyzed applications. It shows how the technologies are distributed, and is typically reviewed after analyzing a large number of applications to group the applications and identify patterns. It also shows the size, number of libraries, and story point totals of each application.

Clicking any of the headers, such as Markup, sorts the results in descending order. Selecting the same header again will resort the results in ascending order. The currently selected header is identified in bold, next to a directional arrow, indicating the direction of the sort.

Figure 3.10. Technologies used across multiple applications

Technologies used across multiple applications

Chapter 4. Optimizing MTA performance

MTA performance depends on a number of factors, including hardware configuration, the number and types of files in the application, the size and number of applications to be evaluated, and whether the application contains source or compiled code. For example, a file that is larger than 10 MB may need a lot of time to process.

In general, MTA spends about 40% of the time decompiling classes, 40% of the time executing rules, and the remainder of the time processing other tasks and generating reports. This section describes what you can do to improve the performance of MTA.

4.1. Deploying and running the application

Try these suggestions first before upgrading hardware.

  • If possible, run MTA against the source code instead of the archives. This eliminates the need to decompile additional JARs and archives.
  • Increase your ulimit when analyzing large applications. See this Red Hat Knowledgebase article for instructions on how to do this for Red Hat Enterprise Linux.
  • If you have access to a server that has better resources than your laptop or desktop machine, you may want to consider running MTA on that server.

4.2. Upgrading hardware

If the application and command-line suggestions above do not improve performance, you may need to upgrade your hardware.

  • If you have access to a server that has better resources than your laptop/desktop, then you may want to consider running MTA on that server.
  • Very large applications that require decompilation have large memory requirements. 8 GB RAM is recommended. This allows 3 - 4 GB RAM for use by the JVM.
  • An upgrade from a single or dual-core to a quad-core CPU processor provides better performance.
  • Disk space and fragmentation can impact performance. A fast disk, especially a solid-state drive (SSD), with greater than 4 GB of defragmented disk space should improve performance.

Appendix A. Reference material

A.1. About MTA command-line arguments

The following is a detailed description of the available MTA command line arguments.

Note

To run the MTA command without prompting, for example when executing from a script, you must use the following arguments:

  • --overwrite
  • --input
  • --target

Example A.1. MTA CLI arguments

CommandTypeDescription

--analyze-known-libraries

 

Flag to analyze known open-source libraries.

--bulk

 

Flag for running multiple analyze commands in bulk, which result in a combined static report.

--context-lines

Integer

Flag to define the number of lines of source code to include in the output for each incident (default: 100).

-d, --dependency-folders

String Array

Flag for the directory for dependencies.

--enable-default-rulesets

Boolean

Flag to run default rulesets with analysis (default: true).

-h, --help

 

Flag to output help for analyze

--http-proxy

String

Flag for Hyper Text Transfer Protocol (HTTP) proxy string URL

--https-proxy

String

Flag for Hypertext Transfer Protocol Secure (HTTPS) proxy string URL

--incident-selector

String

Flag to select incidents based on custom variables, for example, !package=io.konveyor.demo.config-utils

-i, --input

String

Flag for the path to application source code or a binary. For more details, see Specifying the input.

--jaeger-endpoint

String

Flag for the jaeger endpoint to collect traces.

--json-output

 

Flag to create analysis and dependency output as JSON.

-l, --label-selector

String

Flag to run rules based on a specified label selector expression.

--list-providers

 

Flag to list available supported providers.

--list-sources

 

Flag to list rules for available migration sources.

--list-targets

 

Flag to list rules for available migration targets.

--maven-settings

string

Flag path to a custom Maven settings file to use

-m, --mode

String

Flag for analysis mode, this must be one of full, for source and dependencies, or source-only (default full).

--no-proxy

String

Flag to excluded URLs from passing through any proxy (relevant only with proxy)

-o, --output

String

Flag for the path to the directory for analysis output. For more details, see Specifying the output directory.

--override-provider-settings

String

Flag to override the provider settings. The analysis pod runs on the host network, and no providers are started.

--overwrite

 

Flag to overwrite the output directory. If you do not specify this argument and the --output directory exists, you are prompted to choose whether to overwrite the contents.

--provider

String Array

Flag to specify which provider or providers to run.

--rules

String Array

Flag to specify the filename or directory containing rule files. Use multiple times for additional rules, for example, --rules --rules ….

--run-local

 

Local flag to run analysis directly on local system without containers (for Java and Maven)

--skip-static-report

 

Flag to not generate static report.

-s, --source

String Array

Flag for the source technology to consider for analysis. Use multiple times for additional sources, for example, --source --source …. For more details, see Setting the source technology.

-t, --target

String Array

Flag for the target technology to consider for analysis. Use multiple times for additional targets, for example, --target --target …. For more details, see Setting the target technology.

A.1.1. Specifying the input

A space-delimited list of the path to the file or directory containing one or more applications to be analyzed. This argument is required.

Usage

--input <INPUT_ARCHIVE_OR_DIRECTORY> [...]

Depending on whether the input file type provided to the --input argument is a file or directory, it will be evaluated as follows depending on the additional arguments provided.

Directory
  • --sourceMode: The directory is evaluated as a single application.
File
  • --sourceMode: The file is evaluated as a compressed project.

A.1.2. Specifying the output directory

Specify the path to the directory to output the report information generated by MTA.

Usage

--output <OUTPUT_REPORT_DIRECTORY>

  • If omitted, the report will be generated in an <INPUT_ARCHIVE_OR_DIRECTORY>.report directory.
  • If the output directory exists, you will be prompted with the following question with a default answer of N:

    Overwrite all contents of "/home/username/<OUTPUT_REPORT_DIRECTORY>" (anything already in the directory will be deleted)? [y,N]

However, if you specify the --overwrite argument, MTA will proceed to delete and recreate the directory. See the description of this argument for more information.

A.1.3. Setting the source technology

A space-delimited list of one or more source technologies, servers, platforms, or frameworks to migrate from. You can use this argument, in conjunction with the --target argument, to determine which rulesets are used. Use the --listSourceTechnologies argument to list all available sources.

Usage

--source <SOURCE_1> <SOURCE_2>

The --source argument now provides version support, which follows the Maven version range syntax. This instructs MTA to only run the rulesets matching the specified versions, for example, --source eap:5.

Warning

When migrating to JBoss EAP, be sure to specify the version, for example, eap:6. Specifying only eap will run rulesets for all versions of JBoss EAP, including those not relevant to your migration path.

See Supported migration paths in Introduction to the Migration Toolkit for Applications for the appropriate JBoss EAP version.

A.1.4. Setting the target technology

A space-delimited list of one or more target technologies, servers, platforms, or frameworks to migrate to. You can use this argument, in conjunction with the --source argument, to determine which rulesets are used. If you do not specify this option, you are prompted to select a target. Use the --listTargetTechnologies argument to list all available targets.

Usage

--target <TARGET_1> <TARGET_2>

The --target argument now provides version support, which follows the Maven version range syntax. This instructs MTA to only run the rulesets matching the specified versions, for example, --target eap:7.

A.2. Supported technology tags

The following technology tags are supported in MTA 7.1.1:

  • 0MQ Client
  • 3scale
  • Acegi Security
  • AcrIS Security
  • ActiveMQ library
  • Airframe
  • Airlift Log Manager
  • AKKA JTA
  • Akka Testkit
  • Amazon SQS Client
  • AMQP Client
  • Anakia
  • AngularFaces
  • ANTLR StringTemplate
  • AOP Alliance
  • Apache Accumulo Client
  • Apache Aries
  • Apache Commons JCS
  • Apache Commons Validator
  • Apache Flume
  • Apache Geronimo
  • Apache Hadoop
  • Apache HBase Client
  • Apache Ignite
  • Apache Karaf
  • Apache Mahout
  • Apache Meecrowave JTA
  • Apache Sirona JTA
  • Apache Synapse
  • Apache Tapestry
  • Apiman
  • Applet
  • Arquillian
  • AspectJ
  • Atomikos JTA
  • Avalon Logkit
  • Axion Driver
  • Axis
  • Axis2
  • BabbageFaces
  • Bean Validation
  • BeanInject
  • Blaze
  • Blitz4j
  • BootsFaces
  • Bouncy Castle
  • ButterFaces
  • Cache API
  • Cactus
  • Camel
  • Camel Messaging Client
  • Camunda
  • Cassandra Client
  • CDI
  • Cfg Engine
  • Chunk Templates
  • Cloudera
  • Coherence
  • Common Annotations
  • Composite Logging
  • Composite Logging JCL
  • Concordion
  • CSS
  • Cucumber
  • Dagger
  • DbUnit
  • Demoiselle JTA
  • Derby Driver
  • Drools
  • DVSL
  • Dynacache
  • EAR Deployment
  • Easy Rules
  • EasyMock
  • Eclipse RCP
  • EclipseLink
  • Ehcache
  • EJB
  • EJB XML
  • Elasticsearch
  • Entity Bean
  • EtlUnit
  • Eureka
  • Everit JTA
  • Evo JTA
  • Feign
  • File system Logging
  • FormLayoutMaker
  • FreeMarker
  • Geronimo JTA
  • GFC Logging
  • GIN
  • GlassFish JTA
  • Google Guice
  • Grails
  • Grapht DI
  • Guava Testing
  • GWT
  • H2 Driver
  • Hamcrest
  • Handlebars
  • HavaRunner
  • Hazelcast
  • Hdiv
  • Hibernate
  • Hibernate Cfg
  • Hibernate Mapping
  • Hibernate OGM
  • HighFaces
  • HornetQ Client
  • HSQLDB Driver
  • HTTP Client
  • HttpUnit
  • ICEfaces
  • Ickenham
  • Ignite JTA
  • Ikasan
  • iLog
  • Infinispan
  • Injekt for Kotlin
  • Iroh
  • Istio
  • Jamon
  • Jasypt
  • Java EE Batch
  • Java EE Batch API
  • Java EE JACC
  • Java EE JAXB
  • Java EE JAXR
  • Java EE JSON-P
  • Java Transaction API
  • JavaFX
  • JavaScript
  • Javax Inject
  • JAX-RS
  • JAX-WS
  • JayWire
  • JBehave
  • JBoss Cache
  • JBoss EJB XML
  • JBoss logging
  • JBoss Transactions
  • JBoss Web XML
  • JBossMQ Client
  • JBPM
  • JCA
  • Jcabi Log
  • JCache
  • JCunit
  • JDBC
  • JDBC datasources
  • JDBC XA datasources
  • Jersey
  • Jetbrick Template
  • Jetty
  • JFreeChart
  • JFunk
  • JGoodies
  • JMock
  • JMockit
  • JMS Connection Factory
  • JMS Queue
  • JMS Topic
  • JMustache
  • JNA
  • JNI
  • JNLP
  • JPA entities
  • JPA Matchers
  • JPA named queries
  • JPA XML
  • JSecurity
  • JSF
  • JSF Page
  • JSilver
  • JSON-B
  • JSP Page
  • JSTL
  • JTA
  • Jukito
  • JUnit
  • Ka DI
  • Keyczar
  • Kibana
  • KLogger
  • Kodein
  • Kotlin Logging
  • KouInject
  • KumuluzEE JTA
  • LevelDB Client
  • Liferay
  • LiferayFaces
  • Lift JTA
  • Log.io
  • Log4J
  • Log4s
  • Logback
  • Logging Utils
  • Logstash
  • Lumberjack
  • Macros
  • Magicgrouplayout
  • Mail
  • Management EJB
  • MapR
  • MckoiSQLDB Driver
  • Memcached
  • Message (MDB)
  • Micro DI
  • Micrometer
  • Microsoft SQL Driver
  • MiGLayout
  • MinLog
  • Mixer
  • Mockito
  • MongoDB Client
  • Monolog
  • Morphia
  • MRules
  • Mule
  • Mule Functional Test Framework
  • MultithreadedTC
  • Mycontainer JTA
  • MyFaces
  • MySQL Driver
  • Narayana Arjuna
  • Needle
  • Neo4j
  • NLOG4J
  • Nuxeo JTA/JCA
  • OACC
  • OAUTH
  • OCPsoft Logging Utils
  • OmniFaces
  • OpenFaces
  • OpenPojo
  • OpenSAML
  • OpenWS
  • OPS4J Pax Logging Service
  • Oracle ADF
  • Oracle DB Driver
  • Oracle Forms
  • Orion EJB XML
  • Orion Web XML
  • Oscache
  • OTR4J
  • OW2 JTA
  • OW2 Log Util
  • OWASP CSRF Guard
  • OWASP ESAPI
  • Peaberry
  • Pega
  • Persistence units
  • Petals EIP
  • PicketBox
  • PicketLink
  • PicoContainer
  • Play
  • Play Test
  • Plexus Container
  • Polyforms DI
  • Portlet
  • PostgreSQL Driver
  • PowerMock
  • PrimeFaces
  • Properties
  • Qpid Client
  • RabbitMQ Client
  • RandomizedTesting Runner
  • Resource Adapter
  • REST Assured
  • Restito
  • RichFaces
  • RMI
  • RocketMQ Client
  • Rythm Template Engine
  • SAML
  • Santuario
  • Scalate
  • Scaldi
  • Scribe
  • Seam
  • Security Realm
  • ServiceMix
  • Servlet
  • ShiftOne
  • Shiro
  • Silk DI
  • SLF4J
  • Snippetory Template Engine
  • SNMP4J
  • Socket handler logging
  • Spark
  • Specsy
  • Spock
  • Spring
  • Spring Batch
  • Spring Boot
  • Spring Boot Actuator
  • Spring Boot Cache
  • Spring Boot Flo
  • Spring Cloud Config
  • Spring Cloud Function
  • Spring Data
  • Spring Data JPA
  • spring DI
  • Spring Integration
  • Spring JMX
  • Spring Messaging Client
  • Spring MVC
  • Spring Properties
  • Spring Scheduled
  • Spring Security
  • Spring Shell
  • Spring Test
  • Spring Transactions
  • Spring Web
  • SQLite Driver
  • SSL
  • Standard Widget Toolkit (SWT)
  • Stateful (SFSB)
  • Stateless (SLSB)
  • Sticky Configured
  • Stripes
  • Struts
  • SubCut
  • Swagger
  • SwarmCache
  • Swing
  • SwitchYard
  • Syringe
  • Talend ESB
  • Teiid
  • TensorFlow
  • Test Interface
  • TestNG
  • Thymeleaf
  • TieFaces
  • tinylog
  • Tomcat
  • Tornado Inject
  • Trimou
  • Trunk JGuard
  • Twirl
  • Twitter Util Logging
  • UberFire
  • Unirest
  • Unitils
  • Vaadin
  • Velocity
  • Vlad
  • Water Template Engine
  • Web Services Metadata
  • Web Session
  • Web XML File
  • WebLogic Web XML
  • Webmacro
  • WebSocket
  • WebSphere EJB
  • WebSphere EJB Ext
  • WebSphere Web XML
  • WebSphere WS Binding
  • WebSphere WS Extension
  • Weka
  • Weld
  • WF Core JTA
  • Wicket
  • Winter
  • WSDL
  • WSO2
  • WSS4J
  • XACML
  • XFire
  • XMLUnit
  • Zbus Client
  • Zipkin

A.3. About rule story points

A.3.1. What are story points?

Story points are an abstract metric commonly used in Agile software development to estimate the level of effort needed to implement a feature or change.

The Migration Toolkit for Applications uses story points to express the level of effort needed to migrate particular application constructs, and the application as a whole. It does not necessarily translate to man-hours, but the value should be consistent across tasks.

A.3.2. How story points are estimated in rules

Estimating the level of effort for the story points for a rule can be tricky. The following are the general guidelines MTA uses when estimating the level of effort required for a rule.

Level of EffortStory PointsDescription

Information

0

An informational warning with very low or no priority for migration.

Trivial

1

The migration is a trivial change or a simple library swap with no or minimal API changes.

Complex

3

The changes required for the migration task are complex, but have a documented solution.

Redesign

5

The migration task requires a redesign or a complete library change, with significant API changes.

Rearchitecture

7

The migration requires a complete rearchitecture of the component or subsystem.

Unknown

13

The migration solution is not known and may need a complete rewrite.

A.3.3. Task category

In addition to the level of effort, you can categorize migration tasks to indicate the severity of the task. The following categories are used to group issues to help prioritize the migration effort.

Mandatory
The task must be completed for a successful migration. If the changes are not made, the resulting application will not build or run successfully. Examples include replacement of proprietary APIs that are not supported in the target platform.
Optional
If the migration task is not completed, the application should work, but the results may not be optimal. If the change is not made at the time of migration, it is recommended to put it on the schedule soon after your migration is completed.
Potential
The task should be examined during the migration process, but there is not enough detailed information to determine if the task is mandatory for the migration to succeed. An example of this would be migrating a third-party proprietary type where there is no directly compatible type.
Information
The task is included to inform you of the existence of certain files. These may need to be examined or modified as part of the modernization effort, but changes are typically not required.

For more information on categorizing tasks, see Using custom rule categories.

A.4. Additional Resources

A.4.1. Contributing to the project

To help the Migration Toolkit for Applications cover most application constructs and server configurations, including yours, you can help with any of the following items:

  • Send an email to jboss-migration-feedback@redhat.com and let us know what MTA migration rules must cover.
  • Provide example applications to test migration rules.
  • Identify application components and problem areas that might be difficult to migrate:

    • Write a short description of the problem migration areas.
    • Write a brief overview describing how to solve the problem in migration areas.
  • Try Migration Toolkit for Applications on your application. Make sure to report any issues you meet.
  • Contribute to the Migration Toolkit for Applications rules repository:

    • Write a Migration Toolkit for Applications rule to identify or automate a migration process.
    • Create a test for the new rule.

    For more information, see Rule Development Guide.

  • Contribute to the project source code:

    • Create a core rule.
    • Improve MTA performance or efficiency.

Any level of involvement is greatly appreciated!

A.4.3. Reporting issues

MTA uses Jira as its issue tracking system. If you encounter an issue executing MTA, submit a Jira issue.


Revised on 2024-12-31 15:02:59 UTC

Legal Notice

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat Documentation

We help Red Hat users innovate and achieve their goals with our products and services with content they can trust.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

© 2024 Red Hat, Inc.