我试图使用ABAP函数调用将我的J2EE应用程序与SAP软件连接起来。当我在Eclipse中使用热编码值将它作为单个类运行时,它工作得很好。当我尝试在JBoss服务器中运行它时,我从前端获取一些值并将其传递给我的Java类(与我之前提到的类相同),它显示以下异常
java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at org.jboss.aop.ClassContainer.createMethodMap(ClassContainer.java:182)
09:35:42,326 INFO [EARDeployer] Started J2EE application:
file:/F:/jboss/jboss-4.2.3.GA/server/default/deploy/MPCS.ear
09:35:42,326 ERROR [URLDeploymentScanner] Incomplete Deployment listing:
--- MBeans waiting for other MBeans ---
ObjectName: jboss.j2ee:service=EJB3,module=MPCS.jar
State: FAILED
Reason: java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoException
--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.j2ee:service=EJB3,module=MPCS.jar
State: FAILED
Reason: java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoException
我在F:/jar
中有我的sapjco3.jar
,其中我还有ejb3-persistence.jar
,jboss-ejb3x.jar
等。并且它们被正确地识别。我还在build path中添加了jar。但没有什么帮助。
2条答案
按热度按时间4c8rllxm1#
当在EJB中使用sapjco3.jar中的类时(用@Singleton和@Startup注解),我在JBoss EAP 6.1中遇到了类似的NoClassDefFoundError问题。除此之外,我还收到一个错误,说当重新发布到EAP或重新启动部署的模块时,本机库已经加载到另一个类加载器中。
我对这两个问题的解决方案是将sapjco3.jar作为一个全局JBoss模块。
第一步
我在EAPS的\modules文件夹中创建了以下结构:
module.xml的内容:
第二步
在standalone.xml中将模块添加为全局模块:
第三步
在EJB项目META-INF中创建或编辑文件jboss-deployment-structure.xml以包含模块。我的文件看起来像这样:
第四步
将Maven依赖项配置为scopeprovided,这样我们就可以在工作区中使用sapjco3.jar,而不在部署中使用它。
这就是我到目前为止所记得的,使它工作,也许这对你或其他任何人都有帮助。
ftf50wuq2#
除此之外,如果您使用的是更新版本的sapjco3,则可能需要将依赖项添加到API。从Java加载加密库时需要此依赖项。