Недостающие модули для развертывания EAR в Wildfly - PullRequest
1 голос
/ 03 апреля 2020

Я работаю над развертыванием EJB-проекта в качестве EAR в Jboss Wildfly 18. В настоящее время компоновка моего уха выглядит следующим образом:

 Person.ear->
    META-INF->
        jboss-deployment-structure.xml
        MANIFEST.MF
        ...
    lib->
        Common.jar
        BugReport.jar
    Person-ejb.jar
    Person-web.war

со структурой jboss-deploy-Structure. xml например:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
      <dependencies>
         <module name="Common.jar" export="TRUE"/>
         <module name="BugReport.jar" export="TRUE"/>
      </dependencies>
    </deployment>
</jboss-deployment-structure>

Когда я пытаюсь запустить сервер, развертывание завершается неудачно со следующей ошибкой:

15:00:20,234 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.module.service."deployment.Person.ear".main: org.jboss.msc.service.StartException in service jboss.module.service."deployment.Person.ear".main: WFLYSRV0179: Failed to load module: deployment.Person.ear
    at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:116)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
    at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1363)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.modules.ModuleNotFoundException: com.tura.optics.common
    at org.jboss.modules.Module.addPaths(Module.java:1266)
    at org.jboss.modules.Module.link(Module.java:1622)
    at org.jboss.modules.Module.relinkIfNecessary(Module.java:1650)
    at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:299)
    at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:283)
    at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:93)
    ... 8 more

Я попытался определить зависимости через структуру jboss-deploy-structure. xml и через MANIFEST.MF безуспешно. Я также попытался назвать зависимости с помощью имени пакета (т.е. com.tura.common), так как видел оба используемых формата. Все еще не повезло. Я не совсем уверен, что мне здесь не хватает; кажется, что я следую за ожидаемым макетом. Кто-нибудь может помочь с этим?

1 Ответ

0 голосов
/ 08 апреля 2020

Нет необходимости использовать jboss-deployment-structure.xml, так как ссылка на библиотеки JAR в EAR охватывается спецификацией платформы Java EE ( JSR 366 )

Фактически, он должен работать с вашей текущей структурой EAR, удаляя jboss-deployment-structure.xml

Раздел EE.8.2.1 Связанные библиотеки предоставляет несколько способов сделать библиотеки JAR доступными для модулей.

  1. Вы можете добавить ссылку на файл JAR с записью Class-Path в файле META-INF / MANIFEST.MF модуля, используя библиотеку (не EAR).

Например, если person-ejb.jar зависит от lib / Common.jar и lib / BugReport.jar, вы можете добавить:

Class-Path: lib/Common.jar lib/BugReport.jar

в META-INF / MANIFEST.MF внутри файла de Person -ejb.jar. То же самое для Person-web.war

Файлы JAR, помещенные в <library-directory> EAR, становятся доступными для всех модулей. И <library-directory> по умолчанию является каталогом lib, поэтому, поскольку у вас есть и Common.jar, и BugReport.jar внутри каталога lib, они уже должны быть доступны для Person-ejb.jar и Person-web.war.

Вы можете предоставить дескриптор развертывания application.xml в каталоге META-INF файла EAR и переопределить <library-directory>. Пример файла application.xml для вашего EAR будет:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_8.xsd" version="8">
    <display-name>Person.ear</display-name>
    <module>
        <ejb>Person-ejb.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>Person-web.war</web-uri>
            <context-root>/person</context-root>
        </web>
    </module>
    <library-directory>lib</library-directory>
</application>
...