Wildfly - Модули - Какъв е "правилният" начин за определяне на информация за пакета и зависимостта?

В процес съм на внедряване на някои по-стари уеб приложения в Wildfly 10 и разбрах, че има аспект при настройването на сървъри за приложения, през който само съм се забърквал. Реших, че е крайно време да опитам и наистина да разбера какво правя.

По-конкретно, не са ми ясни следните два въпроса относно настройването на модули за самия сървър на приложения:

  • Модулите са конфигурирани така, че директорията modules/ има поддиректории вътре, които съответстват на името на пакета на класа в JAR. Винаги съм разбивал JAR в програма като 7zip, за да изследвам структурата и след това да я копирам.

Има ли "правилен" начин да се познае тази информация? Предполага ли се, че създателят на JAR би го предоставил?

  • Когато създавате файл module.xml, ще бъдете помолени да посочите зависимостите на посочения JAR файл. Например JDBC драйверите често зависят от неща като класовете за устойчивост на Java.

Подобно на горното, може ли JAR да дефинира тази информация? Знам, че в някои случаи ще има файл MANIFEST, който изглежда предоставя нещо подобно, но това не винаги изглежда е така. Има ли начин да се използва информацията в манифеста (ако приемем, че е налице), за да се създаде подходящата информация за модула?


person benjamin    schedule 18.06.2016    source източник


Отговори (1)


Няма твърдо правило, че имената на модулите съответстват на името на пакета. Модулите обикновено използват само името на пакета, тъй като това вероятно е уникално пространство от имена. Например можете да създадете модул, наречен example с пакета com.example. module.xml просто трябва да влезе $JBOSS_HOME/modules/example/main. Имайте предвид, че main е слотът по подразбиране за модули.

В module.xml просто трябва да посочите вашия jar файл и всички необходими зависимости. Ако искате зависимостите да бъдат модули сами по себе си, тогава трябва изрично да ги декларирате във вашия module.xml файл. Ако не ви интересува всяка зависимост да има свой собствен модул, можете просто да ги включите всички като ресурси във вашия module.xml.

Примерен модул, използващ зависимости от ресурси:

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="example">
    <resources>
        <resource-root path="example.jar"/>
        <resource-root path="guava-19.jar"/>
    </resources>
</module>

В горния случай библиотеките example.jar и guava-19.jar трябва да са в директорията $JBOSS_HOME/modules/example/main.

Пример за използване на зависимости на модула:

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="example">
    <resources>
        <resource-root path="example.jar"/>
    </resources>

    <dependencies>
        <module name="com.google.guava"/>
    </dependencies>
</module>

В горния случай тук само example.jar трябва да бъде в директорията $JBOSS_HOME/modules/example/main.

Можете също да използвате командата module add CLI, за да добавите модули към WildFly. Отново името на модула няма значение, стига да е уникално. Ето например как бихте добавили PostgreSQL модул с CLI.

module add --name=org.postgresql --resources=~/Downloads/postgresql-9.4-1203.jdbc42.jar --dependencies=javax.api,javax.transaction.api

Използването на CLI за добавяне на модули избягва необходимостта от ръчно създаване на структурата на модула и module.xml файла. Единствената уловка е, че CLI и WildFly трябва да са на една и съща файлова система и потребителят, работещ с CLI, трябва да има разрешения за запис в $JBOSS_HOME/modules. Командата автоматично ще създаде структурата на директорията, ще копира ресурсите и ще генерира файла module.xml.

Що се отнася до MANIFEST.MF записите. JBoss Modules има ключ за въвеждане, използван за дефиниране на зависимости на модула, наречен Dependencies:. Въпреки това смятам, че използването на module.xml е малко по-приятно, така че не се налага да създавате отново или модифицирате двоични файлове, ако трябва да добавите зависимост от модул или да премахнете зависимост от модул. За внедрявания обаче може да има смисъл да използвате записа MANIFEST.MF.

Ако все още не сте го виждали, погледнете зареждането на класа в документацията на WildFly. Това най-вече ще обясни как работи зареждането на класове за внедрявания.

person James R. Perkins    schedule 18.06.2016
comment
Също така за изброяване на зависимости на самия модул можете също да използвате самия jboss-modules, за да ви помогне с това. нещо като java -jar jboss-modules -mp ‹path-to-modules-dir› -deptree ‹name-of-module› ще ви даде цялото дърво на зависимостите за предадения модул. - person Tomaz Cerar; 28.06.2016