当我将我的应用程序部署到集成的WebSphere服务器时,我获得了同一项目中包含的两个类的NoClassDefFoundErrors。 注意:我在这里调用缺少的类 com.my.package.MyClass 。
消费项目包含会话Bean,并在“配置构建路径”中导入导出项目。如果Enterprise Explorer中的使用项目,则导出项目将列为“EAR库”。 导出项目是一个包含com.my.package.MyClass的普通java项目。它导出其源文件夹。
例外情况如下:
com.ibm.websphere.naming.CannotInstantiateObjectException: Exception occurred while the JNDI NamingManager was processing a javax.naming.Reference object. [Root exception is com.ibm.ejs.container.ContainerEJBException: Unable to initialize deferred EJB.; nested exception is: java.lang.NoClassDefFoundError: com.my.package.MyClass]
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:1033)
at com.ibm.ws.naming.urlbase.UrlContextHelper.processBoundObjectForLookup(UrlContextHelper.java:175)
at com.ibm.ws.naming.urlbase.UrlContextImpl.processBoundObjectForLookup(UrlContextImpl.java:1736)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1249)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1225)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1276)
at javax.naming.InitialContext.lookup(Unknown Source)
...
或者像那样
[22.03.13 14:56:12:994 CET] 00000025 EJBContainerI E WSVR0068E: Attempt to start EnterpriseBean MyEar#MyJar.jar#MyBean failed with exception: java.lang.NoClassDefFoundError: com.my.package.MyClass
at java.lang.Class.getDeclaredMethodsImpl(Native Method)
at java.lang.Class.getDeclaredMethods(Class.java:673)
at com.ibm.ws.metadata.ejb.EJBMDOrchestrator.processTimeoutMetaData(EJBMDOrchestrator.java:6494)
at com.ibm.ws.metadata.ejb.EJBMDOrchestrator.finishBMDInit(EJBMDOrchestrator.java:1488)
at com.ibm.ws.runtime.component.EJBContainerImpl.finishDeferredBeanMetaData(EJBContainerImpl.java:5036)
at com.ibm.ws.runtime.component.EJBContainerImpl.initializeDeferredEJB(EJBContainerImpl.java:4845)
at com.ibm.ejs.container.HomeOfHomes$1.run(HomeOfHomes.java:406)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
at com.ibm.ejs.container.HomeOfHomes.getHome(HomeOfHomes.java:403)
at com.ibm.ejs.container.HomeOfHomes.getHome(HomeOfHomes.java:339)
at com.ibm.ejs.container.util.EJBLocalInterfaceObjectFactory.getObjectInstance(EJBLocalInterfaceObjectFactory.java:139)
at javax.naming.spi.NamingManager.getObjectInstanceByFactoryInReference(Unknown Source)
at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:927)
at com.ibm.ws.naming.urlbase.UrlContextHelper.processBoundObjectForLookup(UrlContextHelper.java:175)
at com.ibm.ws.naming.urlbase.UrlContextImpl.processBoundObjectForLookup(UrlContextImpl.java:1736)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1249)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1225)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1276)
at javax.naming.InitialContext.lookup(Unknown Source)
...
我在V8.0.4中使用 IBM Rational Application Developer for WebSphere 和版本7.0.0.11中的 IBM WebSphere Application Server
我的工作区在“问题”视图中没有错误。
我已经尝试过: - 使用-clean参数启动RAD - 刷新企业资源管理器中的所有项目 - 项目>清洁 - 在“服务器”视图中:停止,重新启动,清理,发布 - 关闭并重新启动RAD
首先我遇到了第二个问题:在RAD中我无法通过Ctrl + Shift + T找到com.my.package.MyClass。 我通过删除文件(* .index文件和“savedIndexNames.txt”)来解决它 /.metadata/.plugins/org.eclipse.jdt.core。 但不幸的是,这并没有在运行时/部署时解决问题。 : - (
有人能给我提示吗?
提前致谢!
答案 0 :(得分:1)
您需要做的是将Java项目添加为EAR项目的部署程序集。
这将自动从/ lib /文件夹下的Java项目中添加$ PROJECT.jar,用于thie .ear
WebSphere自动从lib文件夹中编写.jar文件并将它们添加到类路径中,并且.ear文件中包含的所有EJB.jar和.war都可以找到这些.jar。
因此,右键单击您的EAR项目,转到属性,然后选择“部署程序集”而不是在那里添加Java项目,您应该在lib文件夹下看到生成的jar。