【问题标题】:SAP JBOSS issues with jarjar 的 SAP JBOSS 问题
【发布时间】:2014-03-11 19:22:03
【问题描述】:

我正在尝试使用 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。但没有任何帮助。

【问题讨论】:

  • 您是否也安装了正确版本的原生库?

标签: java eclipse jboss sap jco


【解决方案1】:

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

我对这两个问题的解决方案是将 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>

第二步

将模块添加为 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 依赖配置为 provided,这样我们就可以在工作空间内使用 sapjco3.jar,但不能在部署中使用它。

<dependency>
   <groupId>com.sap.conn.jco</groupId>
   <artifactId>sapjco3</artifactId>
   <version>3.0.10</version>
   <scope>provided</scope>
</dependency>

到目前为止,我记得要让它发挥作用,也许这对您或其他任何人都有帮助。

【讨论】:

    【解决方案2】:

    除此之外,如果您使用的是较新版本的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多