SAP JBOSS проблемы с банкой

Я пытаюсь соединить мое приложение j2ee с SAP, используя вызовы функций ABAP. Когда я запускаю его как отдельный класс в 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.jar, jboss-ejb3x.jar и т. Д., И они правильно распознаются. Я также добавил банку в пути сборки. Но ничего не помогает.

2 ответа

Решение

У меня была похожая проблема с NoClassDefFoundError в JBoss EAP 6.1 при использовании классов из sapjco3.jar в EJB (аннотировано @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>

Шаг 2

Добавление модуля в качестве глобального модуля в standalone.xml:

<subsystem xmlns="urn:jboss:domain:ee:1.1">
   ... 
   <global-modules>
       <module name="com.sap.conn.jco" />
   </global-modules>
   ...
</subsystem>

Шаг 3

Создайте или отредактируйте файл jboss-deploy-structure.xml внутри EJB-проектов META-INF, содержащий модуль. Мой файл выглядит так:

<?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>

Это то, что я помню до сих пор, чтобы заставить его работать, может быть, это полезно для вас или кого-либо еще.

Кроме того, может потребоваться добавить зависимость в javax.api, если вы используете более новую версию sapjco3. Эта зависимость необходима для загрузки библиотеки шифрования из 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>
Другие вопросы по тегам