将应用程序重构到 Kubernetes

Tackle-DiVA 帮助开发人员了解应用程序内部的数据库操作和事务处理过程。
65 位读者喜欢这篇文章。
Tips and gears turning

opensource.com

应用程序现代化开发人员必须能够精确地了解应用程序内部的数据库操作和事务处理过程。 Tackle-DiVA(数据密集型有效性分析器)是 Konveyor Tackle 项目中的一个以数据为中心的开源 Java 应用程序分析工具,旨在将应用程序重构到 Kubernetes。

本文概述了 Tackle-DiVA,并提供了示例说明和分析结果。

什么是 Tackle-DiVA?

Tackle-DiVA 使用 Java 和 Python 构建,并通过命令行界面操作。它导入目标 Java 应用程序源文件,并将分析结果作为文件提供。

分解此图表

  • 服务入口清单分析提取用于实现公共 API 的 Java 类列表。
  • 数据库清单分析导出应用程序操作的数据库表列表。
  • 事务清单 提取一组事务处理过程。
  • 代码到数据库的依赖关系分析哪个 Java 类操作哪个数据库表。
  • 数据库到数据库事务到事务的依赖关系分析找到转换并行执行的线索。
  • 最后,事务重构建议分析显示来自原始顺序执行的并行可执行事务。

试用一下!

Tackle-DiVA 入门很容易。它充分利用了 Docker 容器,唯一的前提条件是可运行 Docker 的环境,例如 RedHat Enterprise Linux、Ubuntu 或 macOS。

一旦您的机器上安装了 Docker,请运行

$ cd /tmp
$ git clone https://github.com/konveyor/tackle-diva.git && tackle-diva
$ docker build . -t diva

这将构建 Tackle-DiVA 并将其打包为 Docker 镜像。Tackle-DiVA 现在可以在您的机器上使用了。

下一步是准备目标 Java 应用程序的源代码。我将使用 DayTrader 应用程序作为示例

$ cd /tmp
$ git clone https://github.com/WASdev/sample.daytrader7.git

最后一步是通过附加完整目录路径来执行 diva_docker 命令

$ cd /tmp/tackle-diva/distrib/bin/
$ ./diva_docker /tmp/sample.daytrader7/

这将创建 tackle-diva/distrib/output 目录并存储分析结果文件

$ ls /tmp/tackle-diva/distrib/output
contexts.yml            transaction.json        transaction_summary.dot
database.json           transaction.yml         transaction_summary.pdf

探索分析结果

查看 DayTrader 应用程序的一些分析结果。

服务入口清单结果存储在 contexts.yml 文件中。它发现 TradeAppServlet.init class/methodloginregister 操作的服务入口中起着关键作用

- entry:
   methods:
   - "com.ibm.websphere.samples.daytrader.web.TradeAppServlet.init"
 http-param:
   action:
   - "login"
- entry:
   methods:
   - "com.ibm.websphere.samples.daytrader.web.TradeAppServlet.init"
 http-param:
   action:
   - "register"

数据库清单分析在 database.json 文件中导出六个数据库表。这些表在 DayTrader 应用程序中使用

{
 "/app": [
   "orderejb",
   "holdingejb",
   "quoteejb",
   "accountejb",
   "keygenejb",
   "accountprofileejb"
 ]
}

事务清单分析结果被转储到 transaction.json.yml 文件中,但查看事务时最好查看 transaction_summary.pdf 文件。以下事务由对两个数据库表(holdingejborderejb)的六个 SQL 操作组成:

transaction.json.yml 文件还包含 代码到数据库的依赖关系分析结果。以下显示了 TradeDirect 类如何调用查询操作到两个数据库表,accountprofileejbaccountejb

"stacktrace" : [
  ...
  {
  "method" : "<src-method: < Source,
              Lcom/ibm/websphere/samples/daytrader/direct/TradeDirect,
              getStatement(Ljava/sql/Connection;Ljava/lang/String;)
              Ljava/sql/PreparedStatement; >>",
  "file" : "/app/daytrader-ee7-ejb/src/
            main/java/com/ibm/websphere/
            samples/daytrader/direct/TradeDirect.java",
  "position" : "TradeDirect.java [1935:15] -> [1935:41]"
  }
],
"sql" : "select * from accountprofileejb ap where ap.userid = (
            select profile_userid from accountejb a where a.profile_userid=?)"

数据库到数据库的依赖关系分析结果位于 transaction_summary.dot 和 .pdf 文件中。accoutprofileejbaccoutejb 数据库表具有互查关系

事务到事务的依赖关系分析结果在 transaction_summary.dot.pdf 文件中找到。两个事务对 orderejb 数据库表具有依赖关系。上层事务更新表,下层事务查询表

最后,并行可执行事务显示在 transaction_summary.dot .pdf 文件中,这是 事务重构建议分析的结果。在本例中,下半部分的两个事务可以在上半部分事务处理完成后并行执行,这有助于保持数据一致性,因为没有事务依赖关系

了解更多

要了解有关应用程序重构的更多信息,请查看 Konveyor Tackle 站点,加入社区,并访问 GitHub 上的源代码。

接下来阅读什么
User profile image.
Yasuharu (Yasu) Katsuno 博士是 IBM Research - Tokyo 的研究人员。他的研究兴趣包括分布式事务处理、应用程序现代化、微服务和分布式系统。他拥有庆应义塾大学的硕士学位和筑波大学的博士学位。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.