我正在尝试使用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等,它们已被正确识别。我也在构建路径中添加了jar。但是没有任何帮助。
在EJB中使用sapjco3.jar中的类(用@Singleton和@Startup注释)时,JBoss EAP 6.1中的NoClassDefFoundError出现了类似的问题。除此之外,当重新发布到EAP或重新启动已部署的模块时,我还收到一条错误消息,指出本机库已在另一个类加载器中加载。
我对这两个问题的解决方案都是将sapjco3.jar作为全局JBoss模块。
我在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>
在 standalone.xml 中将模块添加为全局模块:
<subsystem xmlns="urn:jboss:domain:ee:1.1"> ... <global-modules> <module name="com.sap.conn.jco" /> </global-modules> ... </subsystem>
在EJB项目META-INF中创建或编辑文件 jboss-deployment-structure.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>
将Maven依赖项配置为所 提供的 作用域,以便我们可以在工作空间中使用sapjco3.jar,而在部署中不使用它。
<dependency> <groupId>com.sap.conn.jco</groupId> <artifactId>sapjco3</artifactId> <version>3.0.10</version> <scope>provided</scope> </dependency>
到目前为止,我记得要使它起作用,这可能对您或其他任何人有帮助。