EMF实现在从EJB调用时有效,但在从WAR调用EJB时​​则无效

时间:2011-11-17 16:28:56

标签: java java-ee classloader eclipse-emf ccd

这个问题有点复杂,我有点过头了。我将尝试尽可能简短地描述它。

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

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

基于discussion on the MDHT User list我认为这更像是EMF问题,而不是MDHT问题,它与正在使用的类加载器有关。

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

我已经尝试了几种解决方法并指出缩小此问题:

  • 移动JAR以查看是否该类加载器无法查看MDHT库
  • 在填充注册表时检查调试器以查看正在播放的类加载器
  • 深入挖掘EMF并观看ClassNotFoundExceptions
  • 放入日志记录断点,以查看填充注册表时使用的类加载器。它似乎按预期使用了EJB类加载器。

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

这真的是一个EMF问题,还是在调用EJB时​​它是一个更普遍的问题?

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

1 个答案:

答案 0 :(得分: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魔法就会发生并且有效。

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