2

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を追加しました。しかし、何も役に立ちません。

4

2 に答える 2

6

EJB で sapjco3.jar のクラス (@Singleton および @Startup のアノテーションが付けられている) を使用すると、JBoss EAP 6.1 の NoClassDefFoundError で同様の問題が発生しました。それに加えて、EAP に再公開するとき、またはデプロイされたモジュールを再起動するときに、ネイティブ ライブラリが別のクラスローダーに既に読み込まれているというエラーも受け取りました。

両方の問題に対する私の解決策は、グローバル JBoss モジュールとして sapjco3.jar を含めることでした。

ステップ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-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

ワークスペース内で sapjco3.jar を操作できるように、Maven 依存関係を scope providedとして構成しますが、デプロイメント内には持たないようにします。

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

それが私がこれまでに思い出したことであり、おそらくこれはあなたや他の誰かにとって役立つでしょう.

于 2014-02-20T07:38:49.907 に答える
1

それに加えて、新しいバージョンの 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>
于 2018-08-13T17:38:41.143 に答える