2011-11-17 35 views
0

这个问题有点复杂,我有点头大。我会尽可能简短地描述它。当从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时​​更普遍的问题?

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

回答

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奇迹发生了,它的作品。

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