我有以下项目 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。
知道这里有什么问题吗?
答案 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名称解决了这个问题