1

这真的让我发疯。无论我做什么,似乎 Mirth (1.8.2) 正在运行我的 JAR 文件的旧版本;我知道是因为各种迹象,例如:

  • 我不能调用任何函数
  • 记录的信息未显示在日志中
  • 更改的日志消息不会在日志文件中更改
  • 曾经在代码中创建和写入但不再被代码触及的文件仍在创建和编写中

我已经尝试了我能想到的一切来完成这项工作。它曾一度工作,但现在似乎不再更新。我将更改整合到 Mirth 中的过程是:

  • 运行 ant 脚本来构建 JAR 文件
  • 将 JAR 文件复制到 \lib\custom
  • 重启 Mirth 服务(通过 Mirth 管理员)

我试过重新启动(通过服务、Java、计算机的 Mirth 服务)——但无济于事。我知道我的 JAR 文件是正确的,因为我已经对其进行了反编译(以确保它具有最新的代码)并对其进行哈希处理(以与 ant 构建的 JAR 的哈希值进行比较)——它是正确的并且代码在那里; 它只是没有运行。

我无计可施;这种情况很少发生,但完全阻止了我的发展。

编辑:我也知道我的代码是正确的,因为当我运行单元测试时,它会生成正确的文件并调用正确的函数并记录正确的信息。只有 Mirth 似乎“不明白”。

我的课很简单;简单的单参数构造函数和一些返回各种数据的公共方法。没什么复杂的,没有嵌套的类/JAR/依赖项。

编辑:我什至删除了我的自定义 JAR 文件并重新启动了 Mirth,它仍在运行我的代码。太棒了:/我为这个问题添加了赏金。我怀疑 JAR 被缓存在某个地方(即使他们在 Mirth 论坛上否认)并且需要以某种方式清除该缓存(尽管为什么重新启动 Mirth 服务而我的 PC 没有这样做超出了我的理解)。

我还杀死了所有 Java 实例(并重新启动了我的计算机),因此 JVM 不太可能在某处缓存 JAR。

我尝试重新安装 Mirth。出于某种原因,当我第一次启动管理员时,它有我的自定义频道;令人恼火的是,它仍在运行旧的 JAR,尽管我已经用 lib\custom 中的新 JAR 更新了它。

4

2 回答 2

1

我最终通过一系列行动解决了这个问题:

  • 卸载 Mirth 和 Java,然后重新安装。
  • 我还删除了所有 Java 安装,除了一个(一个 JDK 和一个 JRE)。
  • 当你复制我的 JAR 时,我停止了 Mirth。停止Mirth,复制并重新启动;不要尝试在实时安装上进行复制。它可能会或可能不会拾取您更新的 JAR,具体取决于它是否加载到 JVM 中。

这种步骤组合似乎奏效了。在此之前,我安装了 3-4 个 JRE(和两个 JDK),并且在 Mirth 运行时复制了 JAR(根据 Windows 7 是成功的)。它现在正在工作!

于 2011-01-10T17:58:39.400 回答
0

Mirth 是一个运行在普通旧 JVM 上的 J2EE 应用程序;你有调试它的选项。

您可以按照此处的说明通过 Eclipse 运行 Mirth Connect。然后您可以看到 JVM 类路径,您可以设置断点并使用调试器。

Mirth 基于 Mule ESB。Mule 有自己的类加载方式。你可以研究一下。

如果 Mirth 真的在使用旧版本的 JAR,那么它可能在某个地方有一个缓存版本。或者,也许你做了一些你忘记的配置更改——也许你为 jars 添加了一个新目录。(不知道你是怎么做到的。)

Mule 注意到一个名为 MULE_LIB 的环境变量;也许这是相关的。

看起来 Mirth Connect 1.8 和 Mirth Connect 2.0 有不同的 jar 位置(分别为 lib/custom 和 custom-lib)。您使用的是哪个版本?

于 2011-01-05T22:05:41.353 回答