sapjco3.dll уже загружен в другой ошибке загрузчика классов - PullRequest
0 голосов
/ 29 апреля 2020

Я использую sapjco для подключения к SAP с сервера wildfly 11. Сначала я создаю войну, используя это, и это работает. Затем я создаю другое ухо и после развертывания оба не работают. Код ошибки приведен ниже.

2020-04-29 08:52:46,433 INFO  [org.directwebremoting.log.accessLog] (default task-74) Method 
execution failed: : java.lang.ExceptionInInitializerError: JCo initialization failed with 
java.lang.UnsatisfiedLinkError: Native Library D:\BPM\sapjco30\sapjco3.dll already loaded in another` 
classloader    

Я провел некоторое исследование и обнаружил, что ошибка может быть вызвана включением sapjco3.jar в сборку развертывания. Поэтому я удаляю jar из сборки и помещаю его в автономную папку \ deployments.
Затем я создаю структуру Jboss-deploy-Structure. xml, как показано ниже, и помещаю ее в папку WebContent \ META-INF для обоих проектов.

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <!-- Make sub deployments isolated by default, so they cannot see each others classes without a Class-Path entry -->
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
    <!-- This corresponds to the top level deployment. For a war this is the war's module, for an ear -->
    <!-- This is the top level ear module, which contains all the classes in the EAR's lib folder     -->
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
        <!-- This allows you to define additional dependencies, it is the same as using the Dependencies: manifest attribute -->
        <dependencies>
            <module name="deployment.nana-app.ear" export="true" />
            <module name="deployment.sapjco3.jar" export="true" />
        </dependencies>
        <!-- These add additional classes to the module. In this case it is the same as including the jar in the EAR's lib directory -->
        <resources>
        </resources>
    </deployment>
</jboss-deployment-structure>

На этот раз появилась другая ошибка

2020-04-29 16:46:03,093 INFO  [org.directwebremoting.log.accessLog] (default task-42) Method execution failed: : java.lang.NoClassDefFoundError: Could not initialize class com.sap.conn.jco.JCo
    at com.sap.conn.jco.JCoDestinationManager.getDestination(JCoDestinationManager.java:77)
    at com.SCOfetch.JCOtest.step4QueryTable(JCOtest.java:264)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.directwebremoting.impl.CreatorModule$1.doFilter(CreatorModule.java:172)
    at org.directwebremoting.impl.CreatorModule.executeMethod(CreatorModule.java:184)

Похоже, сервер не может найти Jco на этот раз. Я думаю, это проблема моего Jboss xml. Тогда какой правильный формат? Может кто-нибудь помочь? Спасибо.

...