自动检测来自 java 的外部呼叫

automatically detecting external calls from java

我为一家拥有数百万行 Java 代码库的企业工作。不幸的是,当一个 java EAR 在另一个系统上调用另一个 EAR 时,跟踪的做法非常糟糕。问题变得更糟,我们 运行 DB2 和所有 DB2 模式 运行 在同一个数据连接上。这意味着没有标准的方法来查看配置文件或数据库连接,甚至无法判断应用程序访问了哪些数据库。这个问题扩展到其他 REST 服务,因为我们有 REST 数据服务、MQ 系统、JMS、EJB RMI 等。尝试进行影响分析是一场噩梦。

是否存在我可以在应用程序上 运行 生成应用程序访问的系统报告的工具,也许是 findbugs 插件?

如果不是,如果我在 java.io 和 java.nio 上说 TRACE 来记录所有内容,是否应该捕获 Java 尝试通过应用服务器建立的任何网络连接?

我的最终目标,如果我找不到可以帮助解决这些问题的静态分析系统,我想编写一些 AOP 应用程序,它可以在 EAR 和 WebSphere 之间运行,并记录所有出站和可能的入站连接到 EAR 资源。

这可能吗?

棘手的一个;-)

Findbugs 可以帮助您识别 java 代码中所有与通信相关的地方。但是你必须为此做一些事情:

  1. 确定您要标记的各种连接(例如 DB 连接、EJB 通信、ReST 客户端代码...)

  2. 如果有,您需要编写自己的 findbugs 插件来检测这些地方。可能听起来很复杂,但取决于你想识别多少地方,我猜一个精通的开发人员可以在 2-3 天内完成。作为起点,请查看 findbugs 中可用错误模式的源代码,寻找类似的源代码并将其用作起点。网络上也有很多关于如何编写自己的错误模式的教程...

  3. 将 findbugs 配置为仅使用您的错误模式并 运行 它在您的代码库中(否则所有其他错误都会使结果混乱,尤其是当您的代码库如此庞大时)。

  4. Findbugs 将生成一份报告/向您展示所有 "communication" 个地方...