Java sapjboss与jar的问题
我正在尝试使用ABAP函数调用将我的j2ee应用程序与SAP连接起来。当我在eclipse中将它作为一个类运行并使用热编码值时,它工作得很好。当我尝试在JBoss服务器上运行它时,我从前端获取一些值并将其传递给我的java类,该类与我之前提到的类相同,它显示以下异常Java sapjboss与jar的问题,java,eclipse,jboss,sap,jco,Java,Eclipse,Jboss,Sap,Jco,我正在尝试使用ABAP函数调用将我的j2ee应用程序与SAP连接起来。当我在eclipse中将它作为一个类运行并使用热编码值时,它工作得很好。当我尝试在JBoss服务器上运行它时,我从前端获取一些值并将其传递给我的java类,该类与我之前提到的类相同,它显示以下异常 java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoException at java.lang.Class.getDeclaredMethods0(Native Method)
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>
<subsystem xmlns="urn:jboss:domain:ee:1.1">
...
<global-modules>
<module name="com.sap.conn.jco" />
</global-modules>
...
</subsystem>
步骤2
在standalone.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>
<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 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>
步骤4
将Maven依赖项配置为提供的作用域,以便我们可以在工作区内使用sapjco3.jar,但不能在部署中使用它
<dependency>
<groupId>com.sap.conn.jco</groupId>
<artifactId>sapjco3</artifactId>
<version>3.0.10</version>
<scope>provided</scope>
</dependency>
com.sap.conn.jco
sapjco3
3.0.10
假如
这就是我迄今为止所记得的使其工作的方法,也许这对您或其他任何人都有帮助。除此之外,如果您使用的是较新版本的sapjco3,则可能需要将依赖项添加到javax.api中。这个依赖项是从Java加载加密库所必需的
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.sap.conn.jco">
<resources>
<resource-root path="sapjco3.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>
您是否也安装了正确版本的本机库?