No Def Found Found:EJB EAR打包或引用问题

时间:2012-03-19 11:50:14

标签: java ear noclassdeffounderror

我有以下项目 EJBWebClient EJBProj EJBDataAccess

我首先创建了EJBProj。创建EJBDataAccess并将其添加到EJBProj.ear。然后创建了EJBWebClient并将其分别添加到同一个耳中。

现在从EJBWebClient我在EJBProj中查找EJB,它查找并正常工作。在bean实现中,我在EJBDataAccess中调用了一个DAO,它为该DAO抛出了NoClassDefFound错误。

实施例。 PersonSerivceBean调用EJBDataAccess中存在的PersonDAO.getAllPeople()。这是它抛出NoClassDefFound的地方。

我已将EJBDataAccess引用到EJBProj的构建路径中,而EJBProj又引用了EJBWebClient。

知道这里有什么问题吗?

2 个答案:

答案 0 :(得分:1)

我认为这是EJB容器的问题。我不确定你在使用什么(JBoss,WebSphere,WebLogic等),而且我不是他们中的任何一位专家(我们很久以前就停止使用EJB),但是每当你得到NoClassDefFound错误时,就意味着当前的ClassLoader(在。中加载.class你的代码id的那个)无法找到引用的类。

我知道很多很多个月前,JBoss曾经有过“Universal ClassLoader”的想法。基本上,所有JAR / EAR / WAR都被加载到一个大池中。问题是代码需要很多时间才能使用相同JAR的不同版本,并且它们并不总是兼容。此外,如果有人在您之前将“自定义”类/ JAR放入混合中,那么技术上存在安全风险。我认为它是围绕JBoss 3.5,他们切断了Universal ClassLoader,因为我记得我们的应用程序需要很多工作才能解决问题。其中大部分都是我们的包装问题。

答案 1 :(得分:1)

我通过在MANIFEST.MF中手动包含jar名称解决了这个问题