这个问题有点复杂,我有点头大。我会尽可能简短地描述它。当从EJB调用EMF实现时,但在从WAR中调用EJB时不能执行此操作。
我有一个运行在Glassfish v2上的J2EE应用程序,并使用EMF的实现(MDHT)来使用CCD消息。当这从调用EJB的web服务调用时,它完美地工作并且已经工作了一年多。最近我们有理由从WAR调用这个,测试用例是一个用户上传通常通过web服务发送的相同文件。当我们从WAR中调用它时,它不起作用,EMF EPackage.Registry
是空的!
当我们从WAR中调用它时,WAR获取EJB会话bean的一个实例并且只是调用EJB。我们希望在EJB中保留尽可能多的逻辑以避免重复代码。
根据discussion on the MDHT User list,我认为这是一个比MDHT问题更多的EMF问题,它涉及哪个类加载器正在使用。
MDHT和EMF库打包在EJB JAR中,并且对EJB类加载器可见。
我试过几个解决方法,并指出,缩小这个问题了下来:围绕
- 移动JAR来看看它的类加载器的问题不能够看到MDHT库
- 经过在调试器,看看哪些类加载器在播放时,注册表被填充
- 挖深到EMF并观看了
ClassNotFoundExceptions
- 将一个记录断点看到填充注册时使用哪种类加载器。它似乎按预期使用EJB类加载器。
是否有任何已知的或一般的使用情况,其中当从WAR而不是EJB调用EMF实现时行为会有所不同?
这是一个真正的EMF问题还是在WAR调用EJB时更普遍的问题?
还有哪些其他调试步骤应该尝试隔离并确定此问题的根本原因?