Как определить путь к корню ресурса для структуры jboss-deploy внутри структуры в докере - PullRequest
0 голосов
/ 23 октября 2019

У меня есть банка, которую нельзя скопировать на ухо при создании docker-образа. Кроме того, я не могу добавить банки как модули из-за некоторых проблем с зависимостями. Итак, я добавил ниже корень ресурса в мой файл jboss-deploy-structure (чтобы сделать его таким же, как копировать jar в каталог lib EAR).

false

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

    <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
    <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
    <exclude-subsystems>
        <subsystem name="jpa"/>
    </exclude-subsystems>

    <dependencies>
        <module name="org.abc" services="import"/>
        <module name="org.abcde.zye" optional="true"/>
    </dependencies>
    <resources>
    <!-- These add additional classes to the module. In this case it is the same as including the jar in the EAR's lib directory -->
        <resource-root path="/../../../standalone/outsideEar/outside-abc.jar"/>
    </resources>
</deployment>
<sub-deployment name="abc-abc.war">
    <dependencies>
        <module name="org.abcde.zye" optional="true"/>
    </dependencies>
</sub-deployment>
<sub-deployment name="abc-ejb.jar">
    <dependencies>
        <module name="org.abcde.zye" optional="true"/>
    </dependencies>
</sub-deployment>

Структура моего уха:

my-ear.ear
   |- lib
   |- abc-abc.war
   |- abc-ejb.jar
   |- META-INF
        |- application.xml
        |- jboss-app.xml
        |- jboss-deployment-structure.xml
        |- maven
             |- pom.properties
             |- pom.xml 

Когда Я развертываю это ухо на wildfly-15.0.1. Наконец, сервер вне докера работает нормально ,Путь к корню ресурса определен, файл outside-abc.jar скопирован в указанную ниже папку tmp (которая генерируется динамически при запуске сервера), и я могу выполнить операцию, используя классы outside-abc.jar. wildfly-15.0.1.Final \ standalone \ tmp \ vfs \ deploy \ deploydc506469ec651715

wildfly-15.0.1. Окончательная структура:

wildfly-15.0.1.Final
  |- bin
  |- domain
  |- modules
  |- standalone
       |- outsideEar
          <!-- This path is resolved with resource-root path="/../../../standalone/outsideEar/outside-abc.jar" -->
           |- outside-abc.jar
       |- configuration
       |- data
       |- deployments
            |- my-ear.ear
       |- lib
       |- log
       |- tmp
  |-jboss-modules.jar

Еще один случай, который работает нормально: если я использую ниже root-ресурса, тогда мой jar должен находиться внутри папки bin как wildfly-15.0.1.Final/bin/outsideEar/outside-abc.jar <resource-root path="../../outsideEar/outside-abc.jar"/>

Конфигурация Docker:

Если я использую такую ​​же структуру, как выше, создайте образ Docker и запустите контейнер для образа . не может идентифицировать файл jar и не копировать его в папку wildfly-15.0.1.Final \ standalone \ tmp \ vfs \ deploy \ deploydc506469ec651715 , которая в итоге вызывает ClassNotFoundException , в то время каквыполнение операций. Я проверил, что outside-abc.jar правильно скопирован в подключенный каталог docker (уже добавлена ​​конфигурация в файл docker-compose).

Я был дальше внутри этого и обнаружил, чтоатрибут use-physical-code-source="true" может быть установлен для ресурса-корня для разрешения пути с использованием физического расположения исходного кода.

Когда use-physical-code-source="true": читает с физического места. Я не понимаю, каково физическое местоположение внутри докера. Я думаю, что это папка развертывания или развертывания / my-ear.ear / META-INF.

Когда use-physical-code-source="false"(default is false): читает из каталога vfs (Inside temp).

Я пробовал много разныхпути, чтобы заставить это работать, но, не было удачи.

Возможные случаи, которые я пробовал:

<resource-root path="./../../../../../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../../../../outsideEar/outside-abc.jar"/>
            <resource-root path="./../../../../../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../../../../../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./../../../../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../../../outsideEar/outside-abc.jar"/>
            <resource-root path="./../../../../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../../../../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./../../../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../../outsideEar/outside-abc.jar"/>
            <resource-root path="./../../../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../../../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./../../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../outsideEar/outside-abc.jar"/>
            <resource-root path="./../../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./../../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../outsideEar/outside-abc.jar"/>
            <resource-root path="./../../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./../../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../outsideEar/outside-abc.jar"/>
            <resource-root path="./../../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./../../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../outsideEar/outside-abc.jar"/>
            <resource-root path="./../../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./../outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../outsideEar/outside-abc.jar"/>
            <resource-root path="./../../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./outsideEar/outside-abc.jar"/>
            <resource-root path="./../standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./../standalone/outsideEar/outside-abc.jar"/>

            <resource-root path="./standalone/outsideEar/outside-abc.jar" use-physical-code-source="true"/>
            <resource-root path="./standalone/outsideEar/outside-abc.jar"/>

Для вышеупомянутых случаев, Я установил банки внутрикак bin, так и автономные папки как bin / outsideEar / outside-abc.jar и автономные / outsideEar / outside-abc.jar. Итак, я подтверждаю, что jar доступен для сервера настройки wildlfy .

Сводка требований:

  • Как работает ресурс-Корневой путь разрешен (внутри и снаружи докера), когда use-Physical-Code-Source = "True" и Use-Physical-Code-Source = "false"?

  • Есть ли способпередать только имя каталога для корня ресурса, чтобы все jar-файлы в этом каталоге могли быть скопированы в tmp / deploy. Если это невозможно, то можно ли каким-либо образом применить динамическую передачу имени jar в jboss-deploy-structure.xml, используя либо файл свойств, либо переменную окружения, чтобы при запуске контейнера jar можно было скопировать в temp / deploy.

Любая помощь, которую вы можете оказать, будет принята с благодарностью.

Спасибо.

...