运行代码生成器

使用代码生成器来生成实现建议分区所需的 API 服务和相关代码。

准备工作

确保满足 系统需求 和以下代码生成器需求。

  • 代码生成器必须有权访问:
    • mono2micro-output 目录下创建的 cardinal 目录 (请参阅 运行 AI 引擎以分析收集的数据)。 此目录包含分区信息文件和代码生成器使用的其他文件,包括具有两个可定制参数的配置文件。
    • Monolith 应用程序的源代码。 确保应用程序源代码与代码分析期间用于生成二进制文件的代码完全相同,或者与源代码分析期间运行代码分析器时使用的代码完全相同。 代码生成器从整体式中复制相关部分以生成重构的代码。
  • 运行代码生成器的用户必须具有对所需输出目录的读写访问权。

此外,根据需要定制代码生成过程。 cardinal 目录中的 app.config.txt 文件具有两个可定制参数。

ApplicationName
重构的应用程序的名称。 该值用作生成的代码、URL 和注释的前缀。
CardinalOut路径
源代码树中生成实用程序类代码的位置。

过程

运行代码生成器以生成建议分区的重构代码。

  1. 检查 cardinal 目录。

    将显示使用 Daytrader 应用程序的示例。 将从先前创建的 mono2micro-output 目录复制 cardinal 目录 (请参阅 运行 AI 引擎以分析收集的数据) ,而对于此示例,将从 https://github.com/WASdev/sample.daytrader7.git克隆 daytrader7-source 目录。

    transform-input
        ├── cardinal
        │   ├── app_config.txt
        │   ├── cardinal_graph.json
        │   ├── class_run.json
        │   ├── partition.txt
        │   ├── refTable.json
        │   └── symTable.json
        └── daytrader7-source
  2. 运行代码生成器命令。
    mono2micro transform -s <src-dir-path> -p <partition-info-dir-path>

    在此命令中, <src-dir-path> 是应用程序源代码目录的路径名, <partition-info-dir-path> 是 AI 引擎创建的 cardinal 目录的路径名。

    要获取有关该命令及其选项的更多信息,请运行 mono2micro transform --help 命令。

    注意事项:
    • 运行代码生成器的用户对 <src-dir-path> 目录具有读写访问权,因为代码生成器将在 <src-dir-path> 目录下的子目录中创建报告和源代码。
    • 使用名为 daytrader7-source的整体式目录的图,如果 AI 引擎生成的 cardinal 目录都位于 <dir-path> 路径中,请使用以下命令运行代码生成器:
      mono2micro transform -s <dir-path>/daytrader7-source -p <dir-path>/cardinal
  3. 监视运行进度。

    根据分区数和整体式结构的大小,完成代码生成器任务的时间会有所不同。

    运行代码生成器会生成大量参考消息。 大多数情况下,这些消息不需要任何特别的注意。 但是,对于配置问题和一般理解,将消息重定向到文件以进行更仔细的检查是明智的。

    如果代码生成器成功完成,那么将在包含各种报告的 <partition-info-dir-path> 目录中创建 cardinal-codegen 目录。 对于每个分区,代码生成器会创建一个目录,其中包含将其实现为潜在微服务所需的大量代码。 代码生成器将声明其完成并创建报告目录。

结果

成功完成代码生成器会生成类似于以下 Daytrader 目录结构的目录结构。

transform-input
    ├── cardinal
    │   ├── app_config.txt
    │   ├── cardinal-codegen
    │   │   ├── Cardinal-Utility-report.txt
    │   │   ├── Cardinal-partition0-report.txt
    │   │   ├── Cardinal-partition1-report.txt
    │   │   ├── Cardinal-partition2-report.txt
    │   │   ├── Cardinal-partition3-report.txt
    │   │   ├── Cardinal-partition4-report.txt
    │   │   ├── CardinalFileSummary.json
    │   │   ├── CardinalFileSummary.txt
    │   │   └── CardinalSings.json
    │   ├── cardinal_graph.json
    │   ├── class_run.json
    │   ├── instrumenter-config.json
    │   ├── partition.txt
    │   ├── refTable.json
    │   └── symTable.json
    ├── daytrader7-source
    ├── daytrader7-source-Utility
    ├── daytrader7-source-partition0
    ├── daytrader7-source-partition1
    ├── daytrader7-source-partition2
    ├── daytrader7-source-partition3
    └── daytrader7-source-partition4

在此示例中, daytrader-source-Utility 分区包含标识为潜在实用程序类的 Java ® 整体式应用程序类。 您可以将此分区与 IBM Mono2Micro™ 生成的代码一起视为任何其他分区,也可以将这些应用程序类作为实用程序 .jar 文件与依赖于这些类的所有其他分区一起打包。

突出显示的目录由代码生成器创建。 cardinal-codegen 目录包含各种报告,并且在 xxx-partition_n 目录中写入各种分区,其中 xxxApplicationName 值, n 是分区号。 For the example, the partitions are named daytrader7-source-partition_n (where 0 <= n <= 4). 有关更多信息,请参阅 创建定制视图

所有这些 xxx-partition_n 目录都包含从当前整体应用程序中获取的源代码的相应部分。 输出包括但不限于转换型包装器、API 服务、分布式对象管理代码和垃圾回收。 所有代码移动和生成都由 Mono2Micro的代码生成组件自动完成。 目前,代码生成器仅考虑 .java 源文件; 它不会从整体式应用程序复制或生成任何配置或部署信息。 要将分区实际部署为微服务,必须提供适当的配置信息。

生成的内部 cardinal-codegen 文件夹包含各种报告。 The Cardinal-partition_n-report.txt (where 0 <= n <= 4) files are the Java ® invocation analysis reports for individual partitions in text form, as shown in figure for the partition_3 partition. 您可以在运行代码生成器以生成报告的合并 HTML 版本时指定 html 选项。 有关更多信息,请参阅 Cardinal-Report

样本 Cardinal-partition_1-report.txt 报告

Mono2Micro 的代码生成组件会生成 CardinalFileSummary.txt 文件,其中详细说明了生成代码所执行的所有步骤。 可以使用报告进行调试,更深入地了解代码生成过程,并查看生成的代码。 此报告仅供参考使用,不由 Mono2Micro的任何组件使用。

对于每个分区,CardinalFileSummary.txt 报告中提供了五种类别的报告。 下图中显示了简略的样本报告。

样本缩写 CardinalFileSummary.txt 报告
这五类报告分别为:
Proxy
包含每个分区的存根类的报告,这些存根类需要访问非本地且属于其他分区的对象。
Service
包含为从分区外部访问的分区对象创建的 API 的报告。
Original
包含来自 monolith 的原始完整 Java 文件的报告。 这些文件仅在分区内本地访问。
Dummy
包含静态源代码分析期间选取的文件的报告,在运行时中未使用这些文件。 Cardinal Exceptions 将添加到这些文件中,以确保在运行时生成相应的运行时异常。 此类别的报告还会通知开发者有关这些文件的潜在依赖关系。
Helper
包含生成的代码的报告,用于处理建议分区及其相应接口的序列化和异常等功能。
该报告还具有全局类别:
Copied
包含没有编程逻辑但编译分区 (例如接口和抽象类) 所需的类的报告。

cardinal-codegen 目录下的最终报告为 CardinalSings.json。 此文件旨在供开发者使用。 此报告列出以下内容:

  • 列出需要更改代码的位置或需要详细检查以实现分区作为潜在微服务的位置。
  • 列出开发人员的操作项(以 CARDINAL_TODO_T<number> 形式键入),这些操作项必须已进行寻址或是 WARN 类型。 这些警告建议开发者在必要时检查和更新代码。 任务分为类和文件级别。 以下报告显示了在重构样本 Daytrader 应用程序时的 WARN TODOs。 每个 CARDINAL_TODO_T<number> 任务的代码生成器都提供了详细的自说明性注释。
    来自 Daytrader 的 CardinalSings.json 报告的样本 WARN TODO 任务列表