Статьи

Верблюд на JBoss EAP с пользовательскими модулями

Apache Camel — лучшая библиотека интеграции с открытым исходным кодом

Apache Camel — это потрясающая библиотека интеграции с открытым исходным кодом, которую можно использовать в качестве основы ESB или в отдельных приложениях для маршрутизации, преобразования или передачи систем (см .: интеграция нескольких систем). Camel довольно универсален и не заставляет пользователей развертываться в какой-либо конкретный контейнер или технологию JVM. Развертывание в OSGi для гибкой модульности, развертывание в Java EE при использовании стека Java EE или развертывание в Plain Jane Java Main, если вы выполняете легкие развертывания в стиле микросервисов .

апач-верблюд-логотип

Бегущий верблюд по EAP

Недавно у меня было несколько человек, которые задавали вопросы о работе Camel на платформе JBoss Enterprise Application Platform , и я обычно могу сказать: « Хорошо, посмотрите на этот потрясающий блог, который кто-то делал по этому поводу ».

Однако для некоторых людей в крупных компаниях, которые предпочитают курировать использование сторонних библиотек и предпочитают помещать их в глобально доступный путь к классам, упаковка библиотек Camel в их WAR / EAR невозможна.

Вот несколько причин, по которым вы можете захотеть упаковать Camel в EAP в качестве глобальной библиотеки:

  • Золотое изображение, список кураторов
  • уменьшить раздутые военные развертывания
  • может исправлять / обновлять библиотеки в одном месте
  • убедитесь, что все приложения используют утвержденные версии

Почему вы НЕ МОЖЕТЕ сделать это:

  • Контейнеры Java EE предназначены для мультитенантов
  • Не гибкий в вариантах / версиях развертывания
  • Возможные проблемы / коллизии пути к классам в зависимости от сторонней библиотеки и транзитивных зависимостей
  • Сложно управлять контейнером Java EE

Модули EAP

Независимо от подходов pro / con, как лучше всего поставить Camel в виде модуля на JBoss EAP, чтобы вы могли использовать его из глобального пути к классам? Ответ заключается в использовании собственной модульной системы JBoss EAP, которая называется « Модули ». Мы можем создавать настраиваемые модули для EAP и включать их в наши тощие войны .

Шаг за шагом

Для этого блога я буду использовать ранее созданный пример Camel, развернутый как простой WAR-проект . Однако вместо включения всех банок верблюда в <scope>compile</scope> мы изменим область действия на следующую:

1
2
3
4
5
6
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-core</artifactId>
    <version>${camel.version}</version>
    <scope>provided</scope>
</dependency>

Просто обновите, параметры области maven помогут вам точно контролировать, как ваши зависимости упаковываются и представляются в classpath:

  • compile — область по умолчанию, используется для компиляции проекта и упакована в classpath как часть фазы package
  • предоставленный — зависимость требуется для времени компиляции, но НЕ упаковывается в артефакт, созданный на этапе сборки package
  • время выполнения — зависимость должна находиться в пути к классам при запуске, но не требуется для компиляции и также не упаковывается

Есть пара других, но вы можете проверить документы, чтобы получить полное понимание.

Итак, теперь, когда мы изменили область действия на предоставленную, если мы сделаем сборку, мы сможем проверить нашу WAR и убедиться, что в ней нет банок Camel:

Создайте проект из $ SOURCE_ROOT

1
2
3
4
5
6
7
8
ceposta@postamachat$ mvn clean install
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.324s
[INFO] Finished at: Wed Jul 16 14:16:53 MST 2014
[INFO] Final Memory: 29M/310M
[INFO] ------------------------------------------------------------------------

Перечислите содержание WAR

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ceposta@postamachat$ unzip -l target/camel-cxf-contract-first-1.0.0-SNAPSHOT.war
Archive:  target/camel-cxf-contract-first-1.0.0-SNAPSHOT.war
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  07-16-14 14:15   META-INF/
      132  07-16-14 14:15   META-INF/MANIFEST.MF
        0  07-16-14 14:15   WEB-INF/
        0  07-16-14 14:15   WEB-INF/classes/
        0  07-16-14 14:15   WEB-INF/classes/camelinaction/
        0  07-16-14 14:15   WEB-INF/classes/camelinaction/order/
        0  07-16-14 14:15   WEB-INF/classes/META-INF/
        0  07-16-14 14:15   WEB-INF/classes/META-INF/spring/
        0  07-16-14 14:15   WEB-INF/classes/wsdl/
     1927  07-16-14 14:15   WEB-INF/classes/camelinaction/order/ObjectFactory.class
      992  07-16-14 14:15   WEB-INF/classes/camelinaction/order/OrderEndpoint.class
     1723  07-16-14 14:15   WEB-INF/classes/camelinaction/order/OrderEndpointImpl.class
     2912  07-16-14 14:15   WEB-INF/classes/camelinaction/order/OrderEndpointService.class
      604  07-16-14 14:15   WEB-INF/classes/log4j.properties
     1482  07-16-14 14:15   WEB-INF/classes/META-INF/spring/camel-cxf.xml
     1935  07-16-14 14:15   WEB-INF/classes/META-INF/spring/camel-route.xml
     3003  07-16-14 14:15   WEB-INF/classes/wsdl/order.wsdl
     1193  05-23-14 04:22   WEB-INF/web.xml
        0  07-16-14 14:15   META-INF/maven/
        0  07-16-14 14:15   META-INF/maven/com.redhat.demos/
        0  07-16-14 14:15   META-INF/maven/com.redhat.demos/camel-cxf-contract-first/
     8070  07-16-14 14:03   META-INF/maven/com.redhat.demos/camel-cxf-contract-first/pom.xml
      134  07-16-14 14:15   META-INF/maven/com.redhat.demos/camel-cxf-contract-first/pom.properties
 --------                   -------
    24107                   23 files

Если мы попытаемся развернуть этот проект в EAP, мы наверняка столкнемся с проблемами пути к классам, потому что Camel по умолчанию не включен в путь к классам в EAP. Итак, давайте построим модули сами.

Сначала получите доступ к EAP, загрузив его с портала поддержки Red Hat. (Обратите внимание, что эти шаги могут работать в Wildfly, но я использую EAP для этого обсуждения).

ПРИМЕЧАНИЕ: я буду использовать JBoss EAP 6.2 для этого примера, а также дистрибутив Apache Camel для Red Hat, который поставляется из JBoss Fuse 6.1

Для каждой зависимости в вашем pom, для которой вы хотите создать пользовательский модуль, вам придется повторять эти шаги (обратите внимание, что эти шаги формализованы в базе знаний EAP на портале поддержки Red Hat ):

создайте папку в $ EAP_HOME / modules для хранения вашего нового модуля

1
2
ceposta@postamachat(jboss-eap-6.2) $ cd modules
ceposta@postamachat(modules) $ mkdir -p org/apache/camel/core

создайте папку с именем main в папке модуля, так как именно здесь мы разместим фляги для модуля

1
ceposta@postamachat(modules) $ mkdir  org/apache/camel/core/main

Теперь нам нужно выяснить, какие зависимости / файлы должны входить в этот модуль. Если вы используете Maven’s Dependency Plugin, это очень поможет.

ПРИМЕЧАНИЕ: эти шаги являются одноразовыми, однако, возможно, стоит потратить немного времени на автоматизацию этих шагов с помощью скрипта perl / python / bash. для этой демонстрации я не создавал сценарий, но если вы это сделаете, я буду признателен, если вы поделитесь им со всеми, либо сообщите мне об этом в твиттере @christianposta, либо сделайте запрос на извлечение проекта github, связанного с этим блогом .. спасибо !

покажите зависимости для проекта и каждого артефакта:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
ceposta@postamachat$ mvn dependency:tree
 
[INFO] ------------------------------------------------------------------------
[INFO] Building [TODO]Camel CXF Contract First Example 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ camel-cxf-contract-first ---
[INFO] com.redhat.demos:camel-cxf-contract-first:war:1.0.0-SNAPSHOT
[INFO] +- org.apache.camel:camel-core:jar:2.12.0.redhat-610379:provided
[INFO] |  \- com.sun.xml.bind:jaxb-impl:jar:2.2.6:provided
[INFO] +- org.apache.camel:camel-cxf:jar:2.12.0.redhat-610379:provided
[INFO] |  +- org.apache.camel:camel-spring:jar:2.12.0.redhat-610379:provided
[INFO] |  |  \- org.springframework:spring-tx:jar:3.2.8.RELEASE:provided
[INFO] |  +- org.apache.camel:camel-cxf-transport:jar:2.12.0.redhat-610379:provided
[INFO] |  +- org.apache.cxf:cxf-rt-frontend-jaxrs:jar:2.7.0.redhat-610379:provided
[INFO] |  |  +- javax.ws.rs:javax.ws.rs-api:jar:2.0-m10:provided
[INFO] |  |  \- org.apache.cxf:cxf-rt-bindings-xml:jar:2.7.0.redhat-610379:provided
[INFO] |  +- org.apache.cxf:cxf-rt-frontend-jaxws:jar:2.7.0.redhat-610379:provided
[INFO] |  |  +- xml-resolver:xml-resolver:jar:1.2:provided
[INFO] |  |  +- asm:asm:jar:3.3.1:provided
[INFO] |  |  +- org.apache.cxf:cxf-rt-frontend-simple:jar:2.7.0.redhat-610379:provided
[INFO] |  |  \- org.apache.cxf:cxf-rt-ws-addr:jar:2.7.0.redhat-610379:provided
[INFO] |  |     \- org.apache.cxf:cxf-rt-ws-policy:jar:2.7.0.redhat-610379:provided
[INFO] |  |        \- org.apache.neethi:neethi:jar:3.0.3:provided
[INFO] |  +- org.springframework:spring-core:jar:3.2.8.RELEASE:provided
[INFO] |  |  \- commons-logging:commons-logging:jar:1.1.3:provided
[INFO] |  +- org.springframework:spring-beans:jar:3.2.8.RELEASE:provided
[INFO] |  +- org.springframework:spring-context:jar:3.2.8.RELEASE:provided
[INFO] |  |  \- org.springframework:spring-expression:jar:3.2.8.RELEASE:provided
[INFO] |  +- org.apache.cxf:cxf-rt-features-clustering:jar:2.7.0.redhat-610379:provided
[INFO] |  \- org.apache.cxf:cxf-rt-bindings-soap:jar:2.7.0.redhat-610379:provided
[INFO] |     \- org.apache.cxf:cxf-rt-databinding-jaxb:jar:2.7.0.redhat-610379:provided
[INFO] +- log4j:log4j:jar:1.2.16:provided
[INFO] +- org.slf4j:slf4j-api:jar:1.6.6:provided
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.6:provided
[INFO] +- org.apache.cxf:cxf-rt-transports-http-jetty:jar:2.7.0.redhat-610379:provided
[INFO] |  +- org.apache.cxf:cxf-api:jar:2.7.0.redhat-610379:provided
[INFO] |  |  +- org.codehaus.woodstox:woodstox-core-asl:jar:4.2.0:provided
[INFO] |  |  |  \- org.codehaus.woodstox:stax2-api:jar:3.1.1:provided
[INFO] |  |  +- org.apache.ws.xmlschema:xmlschema-core:jar:2.1.0:provided
[INFO] |  |  +- org.apache.geronimo.specs:geronimo-javamail_1.4_spec:jar:1.7.1:provided
[INFO] |  |  +- wsdl4j:wsdl4j:jar:1.6.3:provided
[INFO] |  |  \- org.osgi:org.osgi.compendium:jar:4.2.0:provided
[INFO] |  +- org.apache.cxf:cxf-rt-transports-http:jar:2.7.0.redhat-610379:provided
[INFO] |  +- org.apache.cxf:cxf-rt-core:jar:2.7.0.redhat-610379:provided
[INFO] |  +- org.eclipse.jetty:jetty-server:jar:8.1.14.v20131031:provided
[INFO] |  |  +- org.eclipse.jetty:jetty-continuation:jar:8.1.14.v20131031:provided
[INFO] |  |  \- org.eclipse.jetty:jetty-http:jar:8.1.14.v20131031:provided
[INFO] |  |     \- org.eclipse.jetty:jetty-io:jar:8.1.14.v20131031:provided
[INFO] |  |        \- org.eclipse.jetty:jetty-util:jar:8.1.14.v20131031:provided
[INFO] |  +- org.eclipse.jetty:jetty-security:jar:8.1.14.v20131031:provided
[INFO] |  \- org.apache.geronimo.specs:geronimo-servlet_3.0_spec:jar:1.0:provided
[INFO] +- org.apache.camel:camel-test-spring:jar:2.12.0.redhat-610379:provided
[INFO] |  +- org.apache.camel:camel-test:jar:2.12.0.redhat-610379:provided
[INFO] |  \- org.springframework:spring-test:jar:3.2.8.RELEASE:provided
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] \- org.springframework:spring-web:jar:3.2.5.RELEASE:provided
[INFO]    +- aopalliance:aopalliance:jar:1.0:provided
[INFO]    \- org.springframework:spring-aop:jar:3.2.5.RELEASE:provided
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.450s
[INFO] Finished at: Wed Jul 16 15:03:08 MST 2014
[INFO] Final Memory: 17M/310M
[INFO] ------------------------------------------------------------------------

Это дает вам полный список зависимостей для вашего проекта и каждой из верхних и транзитивных зависимостей. Теперь вы знаете, какие банки должны идти в каждый модуль.

Следующим шагом является загрузка всех этих jar-файлов, чтобы их было легко скопировать в папку модуля:

Скопируйте все зависимости проекта в цель / зависимость

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
ceposta@postamachat$ mvn dependency:copy-dependencies
 
ceposta@postamachat$ ls -l target/dependency
 
total 32072
-rw-r--r--  1 ceposta  staff     4467 Jul 16 14:50 aopalliance-1.0.jar
-rw-r--r--  1 ceposta  staff    43581 Jul 16 14:50 asm-3.3.1.jar
-rw-r--r--  1 ceposta  staff  2592519 Jul 16 14:50 camel-core-2.12.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   207482 Jul 16 14:43 camel-cxf-2.12.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    64726 Jul 16 14:50 camel-cxf-transport-2.12.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   244731 Jul 16 14:50 camel-spring-2.12.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    43947 Jul 16 14:50 camel-test-2.12.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    71455 Jul 16 14:50 camel-test-spring-2.12.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    62050 Jul 16 14:50 commons-logging-1.1.3.jar
-rw-r--r--  1 ceposta  staff  1115924 Jul 16 14:50 cxf-api-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   204287 Jul 16 14:50 cxf-rt-bindings-soap-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    38847 Jul 16 14:50 cxf-rt-bindings-xml-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   408403 Jul 16 14:50 cxf-rt-core-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   129306 Jul 16 14:50 cxf-rt-databinding-jaxb-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    34276 Jul 16 14:50 cxf-rt-features-clustering-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   654099 Jul 16 14:50 cxf-rt-frontend-jaxrs-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   388669 Jul 16 14:50 cxf-rt-frontend-jaxws-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    67426 Jul 16 14:50 cxf-rt-frontend-simple-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   260274 Jul 16 14:50 cxf-rt-transports-http-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    97071 Jul 16 14:50 cxf-rt-transports-http-jetty-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff    80014 Jul 16 14:50 cxf-rt-ws-addr-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   207480 Jul 16 14:50 cxf-rt-ws-policy-2.7.0.redhat-610379.jar
-rw-r--r--  1 ceposta  staff   223298 Jul 16 14:50 geronimo-javamail_1.4_spec-1.7.1.jar
-rw-r--r--  1 ceposta  staff    96323 Jul 16 14:50 geronimo-servlet_3.0_spec-1.0.jar
-rw-r--r--  1 ceposta  staff    45024 Jul 16 14:50 hamcrest-core-1.3.jar
-rw-r--r--  1 ceposta  staff   110928 Jul 16 14:50 javax.ws.rs-api-2.0-m10.jar
-rw-r--r--  1 ceposta  staff  1112659 Jul 16 14:50 jaxb-impl-2.2.6.jar
-rw-r--r--  1 ceposta  staff    21162 Jul 16 14:50 jetty-continuation-8.1.14.v20131031.jar
-rw-r--r--  1 ceposta  staff    96122 Jul 16 14:50 jetty-http-8.1.14.v20131031.jar
-rw-r--r--  1 ceposta  staff   104219 Jul 16 14:50 jetty-io-8.1.14.v20131031.jar
-rw-r--r--  1 ceposta  staff    89923 Jul 16 14:50 jetty-security-8.1.14.v20131031.jar
-rw-r--r--  1 ceposta  staff   357704 Jul 16 14:50 jetty-server-8.1.14.v20131031.jar
-rw-r--r--  1 ceposta  staff   287680 Jul 16 14:50 jetty-util-8.1.14.v20131031.jar
-rw-r--r--  1 ceposta  staff   245039 Jul 16 14:50 junit-4.11.jar
-rw-r--r--  1 ceposta  staff   481535 Jul 16 14:50 log4j-1.2.16.jar
-rw-r--r--  1 ceposta  staff    71487 Jul 16 14:50 neethi-3.0.3.jar
-rw-r--r--  1 ceposta  staff   614152 Jul 16 14:50 org.osgi.compendium-4.2.0.jar
-rw-r--r--  1 ceposta  staff    26176 Jul 16 14:50 slf4j-api-1.6.6.jar
-rw-r--r--  1 ceposta  staff     9711 Jul 16 14:50 slf4j-log4j12-1.6.6.jar
-rw-r--r--  1 ceposta  staff   335679 Jul 16 14:50 spring-aop-3.2.5.RELEASE.jar
-rw-r--r--  1 ceposta  staff   612569 Jul 16 14:50 spring-beans-3.2.8.RELEASE.jar
-rw-r--r--  1 ceposta  staff   866273 Jul 16 14:50 spring-context-3.2.8.RELEASE.jar
-rw-r--r--  1 ceposta  staff   873608 Jul 16 14:50 spring-core-3.2.8.RELEASE.jar
-rw-r--r--  1 ceposta  staff   196367 Jul 16 14:50 spring-expression-3.2.8.RELEASE.jar
-rw-r--r--  1 ceposta  staff   457987 Jul 16 14:50 spring-test-3.2.8.RELEASE.jar
-rw-r--r--  1 ceposta  staff   242436 Jul 16 14:50 spring-tx-3.2.8.RELEASE.jar
-rw-r--r--  1 ceposta  staff   627339 Jul 16 14:50 spring-web-3.2.5.RELEASE.jar
-rw-r--r--  1 ceposta  staff   182112 Jul 16 14:50 stax2-api-3.1.1.jar
-rw-r--r--  1 ceposta  staff   482245 Jul 16 14:50 woodstox-core-asl-4.2.0.jar
-rw-r--r--  1 ceposta  staff   186758 Jul 16 14:50 wsdl4j-1.6.3.jar
-rw-r--r--  1 ceposta  staff    84091 Jul 16 14:50 xml-resolver-1.2.jar
-rw-r--r--  1 ceposta  staff   165787 Jul 16 14:50 xmlschema-core-2.1.0.jar

Теперь мы находим, какие jar-файлы отправляются в какие зависимости и создаем модули. Например, глядя выше, мы видим, что у camel-core есть зависимость от com.sun.xml.bind:jaxb-impl:jar:2.2.6 К счастью, это единственная зависимость, и это системная зависимость, которую уже обеспечивает JBoss EAP.

Поэтому все, что нам нужно скопировать в каталог нашего модуля JBoss — это зависимость org.apache.camel:camel-core:jar:2.12.0.redhat-610379 . Но где мы можем получить это? Ну, так как мы использовали зависимость: копия-зависимости, она должна быть просто в вашей папке назначения / зависимости.

Но официальный ответ: баночки с верблюжьими куратами Red Hat поставляются как часть JBoss Fuse .

Поэтому, если вы скачаете дистрибутив для JBoss Fuse и распакуете его, вы должны увидеть папку /extras в этом дистрибутиве. Внутри этого дистрибутива находится архивный файл с именем apache-camel-2.12.0.redhat-610379.zip . Если вы распакуете этот архив и проверите папку /lib , у вас будут все компоненты и файлы Camel, которые поддерживает Red Hat.

Теперь, когда мы знаем, что camel-core — единственный jar-файл, который нам понадобится для модуля camel-core, давайте скопируем его в папку нашего модуля на EAP:

Скопируйте все зависимости и транзитивные зависимости в папку модуля

1
ceposta@postamachat(contract-first-camel-eap) $ cp target/dependency/camel-core-2.12.0.redhat-610379.jar $EAP_HOME/modules/org/apache/camel/core/main/

Создать module.xml

Теперь нам нужно добавить простой xml-дескриптор, чтобы EAP знал, что это допустимый модуль:

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.apache.camel.core">
    <resources>
        <resource-root path="camel-core-2.12.0.redhat-610379.jar"/>
    </resources>
</module>

А теперь у вас есть EAP-модуль на camel-core ! Если у вас есть зависимости от других модулей, вы можете добавить их, например, так, но это необязательно для модуля Camel-Core (это всего лишь пример того, как это будет выглядеть для других модулей, которые будут нуждаться в этом):

1
2
3
4
5
6
7
<dependencies>
    <module name="org.apache.commons.lang"/>
    <module name="org.apache.commons.logging" />
    <module name="org.apache.commons.collections" />
    <module name="org.apache.commons.io" />
    <module name="org.apache.commons.configuration" />
</dependencies>

Включите модуль Camel-Core:

Последнее, что нужно сделать, — включить модуль в глобальном пути к классам. Для этого найдите автономный файл конфигурации и добавьте его в раздел <global-modules> «Подсистемы EE»:

1
2
3
4
5
6
7
8
9
.... bunch of other stuff here....
 
<subsystem xmlns="urn:jboss:domain:ee:1.1">
    <global-modules>
        <module name="org.apache.camel.core" slot="main" />
    </global-modules>
</subsystem>
 
.... bunch of other stuff here....

Теперь сделайте это для компонента camel-cxf (подсказка, это jar-файлы). ИЛИ, если у вас уже есть некоторые из ваших пользовательских модулей, и вы хотите разделить это на модули многократного использования, разделить их по технологии (spring, cxf, cxf) -транспорт и т. д.):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
[INFO] +- org.apache.camel:camel-cxf:jar:2.12.0.redhat-610379:provided
[INFO] |  +- org.apache.camel:camel-spring:jar:2.12.0.redhat-610379:provided
[INFO] |  |  \- org.springframework:spring-tx:jar:3.2.8.RELEASE:provided
[INFO] |  +- org.apache.camel:camel-cxf-transport:jar:2.12.0.redhat-610379:provided
[INFO] |  +- org.apache.cxf:cxf-rt-frontend-jaxrs:jar:2.7.0.redhat-610379:provided
[INFO] |  |  +- javax.ws.rs:javax.ws.rs-api:jar:2.0-m10:provided
[INFO] |  |  \- org.apache.cxf:cxf-rt-bindings-xml:jar:2.7.0.redhat-610379:provided
[INFO] |  +- org.apache.cxf:cxf-rt-frontend-jaxws:jar:2.7.0.redhat-610379:provided
[INFO] |  |  +- xml-resolver:xml-resolver:jar:1.2:provided
[INFO] |  |  +- asm:asm:jar:3.3.1:provided
[INFO] |  |  +- org.apache.cxf:cxf-rt-frontend-simple:jar:2.7.0.redhat-610379:provided
[INFO] |  |  \- org.apache.cxf:cxf-rt-ws-addr:jar:2.7.0.redhat-610379:provided
[INFO] |  |     \- org.apache.cxf:cxf-rt-ws-policy:jar:2.7.0.redhat-610379:provided
[INFO] |  |        \- org.apache.neethi:neethi:jar:3.0.3:provided
[INFO] |  +- org.springframework:spring-core:jar:3.2.8.RELEASE:provided
[INFO] |  |  \- commons-logging:commons-logging:jar:1.1.3:provided
[INFO] |  +- org.springframework:spring-beans:jar:3.2.8.RELEASE:provided
[INFO] |  +- org.springframework:spring-context:jar:3.2.8.RELEASE:provided
[INFO] |  |  \- org.springframework:spring-expression:jar:3.2.8.RELEASE:provided
[INFO] |  +- org.apache.cxf:cxf-rt-features-clustering:jar:2.7.0.redhat-610379:provided
[INFO] |  \- org.apache.cxf:cxf-rt-bindings-soap:jar:2.7.0.redhat-610379:provided
[INFO] |     \- org.apache.cxf:cxf-rt-databinding-jaxb:jar:2.7.0.redhat-610379:provided

Обратите внимание, что вы можете разделить различные сторонние зависимости на их собственные модули. (Например, Spring Framework, Camel Spring и т. Д.)

Разверните наш проект в EAP:

Теперь из командной строки перейдите в корень исходного кода для примера проекта и выполните сборку и развертывание:

1
2
3
ceposta@postamachat$ mvn clean install
 
ceposta@postamachat$ mvn jboss-as:deploy-only

Куда пойти дальше?

Если у вас возникли проблемы с вышеуказанным, я с радостью помогу или обратитесь в службу поддержки Red Hat для более быстрого ответа!

Ссылка: Верблюд на JBoss EAP с пользовательскими модулями от нашего партнера JCG Кристиана Поста в блоге