SAP JBOSS与jar有关

bha*_*hat 2 java eclipse sap jboss jco

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

我在F:/ jar中有我的sapjco3.jar,其中我还有ejb3-persistence.jar,jboss-ejb3x.jar等,它们被正确识别.我也在构建路径中添加了jar.但没有任何帮助.

dev*_*rys 5

当在EJB中使用来自sapjco3.jar的类(使用@Singleton和@Startup注释)时,我在JBoss EAP 6.1中的NoClassDefFoundError遇到了类似的问题.除此之外,我还收到一条错误消息,说当重新发布到EAP或重新启动已部署的模块时,本机库已经加载到另一个类加载器中.

我对这两个问题的解决方案是将sapjco3.jar作为全局JBoss模块包含在内.

步骤1

我在EAPS的\ modules文件夹中创建了以下结构:

com
--> sap
    --> conn
        --> jco
            --> main
                --> module.xml
                --> sapjco3.jar
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

第2步

standalone.xml中将模块添加为全局模块:

<subsystem xmlns="urn:jboss:domain:ee:1.1">
   ... 
   <global-modules>
       <module name="com.sap.conn.jco" />
   </global-modules>
   ...
</subsystem>
Run Code Online (Sandbox Code Playgroud)

第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>
Run Code Online (Sandbox Code Playgroud)

第4步

将Maven依赖项配置为提供的范围,以便我们可以在工作区内使用sapjco3.jar但不在部署中使用它.

<dependency>
   <groupId>com.sap.conn.jco</groupId>
   <artifactId>sapjco3</artifactId>
   <version>3.0.10</version>
   <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这就是我记得到目前为止它的工作原理,也许这对你或其他任何人都有帮助.