我正在尝试使用 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
我的 sapjco3.jar
位于 F:/jar
中,其中还有 ejb3-persistence.jar
、jboss- ejb3x.jar
等,并且它们被正确识别。我也将 jar 添加到构建路径中。但没有任何帮助。
最佳答案
在 EJB 中使用 sapjco3.jar 中的类(用 @Singleton 和 @Startup 注释)时,我在 JBoss EAP 6.1 中遇到了类似的 NoClassDefFoundError 问题。 除此之外,我还收到一条错误消息,指出在重新发布到 EAP 或重新启动已部署的模块时, native 库已加载到另一个类加载器中。
我对这两个问题的解决方案是将 sapjco3.jar 作为全局 JBoss 模块包含在内。
步骤 1
我在 EAPS 的\modules 文件夹中创建了以下结构:
com
--> sap
--> conn
--> jco
--> main
--> module.xml
--> sapjco3.jar
module.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.sap.conn.jco">
<resources>
<resource-root path="sapjco3.jar"/>
</resources>
</module>
步骤 2
将模块添加为standalone.xml中的全局模块:
<subsystem xmlns="urn:jboss:domain:ee:1.1">
...
<global-modules>
<module name="com.sap.conn.jco" />
</global-modules>
...
</subsystem>
步骤 3
在 EJB 项目 META-INF 内创建或编辑文件 jboss-deployment-struction.xml 以包含该模块。 我的文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="com.sap.conn.jco" export="TRUE" />
</dependencies>
</deployment>
</jboss-deployment-structure>
步骤 4
将 Maven 依赖项配置为提供的范围,以便我们可以在工作区中使用 sapjco3.jar,但不能在部署中使用它。
<dependency>
<groupId>com.sap.conn.jco</groupId>
<artifactId>sapjco3</artifactId>
<version>3.0.10</version>
<scope>provided</scope>
</dependency>
这就是我到目前为止所记得的使其发挥作用的方法,也许这对您或其他人有帮助。
关于java - SAP JBOSS 的 jar 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21745356/