0

这个问题有点复杂,我有点过头了。我会尽量简短地描述它。

我有一个在 Glassfish v2 上运行的 J2EE 应用程序,并使用 EMF ( MDHT ) 的实现来使用 CCD 消息。当从调用 EJB 的 web 服务调用它时,它运行良好并且已经运行了一年多。最近我们有理由从 WAR 中调用它,测试用例是用户上传通常通过 web 服务发送的相同文件。当我们从 WAR 中调用它时,它不起作用,EMFEPackage.Registry是空的!

当我们从 WAR 中调用它时,WAR 会获取 EJB 会话 bean 的一个实例并调用 EJB。我们希望在 EJB 中保留尽可能多的逻辑以避免重复代码。

基于对MDHT 用户列表的讨论,我相信这更像是一个 EMF 问题而不是 MDHT 问题,它与正在使用的类加载器有关。

MDHT 和 EMF 库打包在 EJB JAR 中,并且对 EJB 类加载器可见。

我尝试了几种解决方法并指出缩小这个问题的范围:

  • 移动 JAR 以查看是否是类加载器无法看到 MDHT 库的问题
  • 签入调试器以查看填充注册表时哪些类加载器正在运行
  • 深入研究 EMF 并观察ClassNotFoundExceptions
  • 放置一个日志断点以查看在填充注册表时使用了哪个类加载器。它似乎按预期使用了 EJB 类加载器。

是否存在任何已知或一般用例,当从 WAR 而不是 EJB 调用时,EMF 实现的行为会有所不同?

这真的是 EMF 问题,还是在 WAR 调用 EJB 时更普遍的问题?

我应该尝试哪些其他调试步骤来隔离和确定此问题的根本原因?

4

1 回答 1

0

这个问题的解决方案是在 EMF 论坛上找到的:http: //www.eclipse.org/forums/index.php/m/758092/#msg_758092

如果我将org.eclipse.emf.ecore.EPackage.Registry.INSTANCE系统属性设置为org.eclipse.emf.ecore.impl.EPackageRegistryImpl魔法就会发生并且它可以工作。

我很好奇为什么会这样,但这是一个不同的问题。

于 2011-11-21T22:54:29.457 回答