java - SAP JBOSS 的 jar 问题

标签 java eclipse 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

我的 sapjco3.jar 位于 F:/jar 中,其中还有 ejb3-persistence.jarjboss- 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/

相关文章:

java - 安装应用程序时的事件 (Android)

Android 模拟器不加载应用程序(崩溃报告)

java - 使用 Eclipse 时在哪里指定 ajc 编译器选项?

java - JBoss AS 5.x 停产了吗?

java - 填充条(进度条) JApplet Paint() Thread()

java - 需要来自整个组合层次结构的数据的操作模式

java - 无法让数组更改为正确的大小

java - 整个工作集/工作区的 Eclipse “Open Call Hierarchy”

java - JBoss - 如何排除 jboss-deployment-structure 中的 javax.validation?

java - JBoss - 在运行时加载新模块