这个问题有点复杂,我有点过头了。我会尽量简短地描述它。
我有一个在 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 时更普遍的问题?
我应该尝试哪些其他调试步骤来隔离和确定此问题的根本原因?