В эти дни я играю с Wildfly и Apache Camel и Spring .
Простым способом связи между EAR / WAR является использование компонента direct-vm Camel. Есть много способов достичь этого с верблюдом или без него. Верблюд работает как шарм в WildFly без каких-либо дополнительных настроек. Верблюд отличный !!!
Чтобы избежать упаковки всех необходимых JAR-файлов Spring и Camel с моими приложениями, я создаю два модуля, используя отличную инфраструктуру JBoss Modules (которая уже используется WildFly). Затем я могу сослаться на эти две платформы без необходимости упаковывать все эти JAR-файлы в мои приложения (EAR / WAR).
Модуль создания весны
- Перейдите к домашней директории WildFly: $> cd /home/torun/jboss/wildfly/wildfly-8.0.0.Beta1
- Создайте структуру каталогов модуля Spring:
- $> модули mkdir -p / org / springframework / 3.2.5.RELEASE
- Внутри этого нового каталога создайте файл module.xml со следующим содержимым:
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
|
< module xmlns = "urn:jboss:module:1.3" name = "org.springframework" slot = "3.2.5.RELEASE" > < resources > < resource-root path = "aopalliance-1.0.jar" /> < resource-root path = "aspectjrt-1.7.4.jar" /> < resource-root path = "aspectjtools-1.7.4.jar" /> < resource-root path = "aspectjweaver-1.7.4.jar" /> < resource-root path = "org.aspectj.matcher-1.7.4.jar" /> < resource-root path = "spring-aop-3.2.5.RELEASE.jar" /> < resource-root path = "spring-aspects-3.2.5.RELEASE.jar" /> < resource-root path = "spring-beans-3.2.5.RELEASE.jar" /> < resource-root path = "spring-context-3.2.5.RELEASE.jar" /> < resource-root path = "spring-context-support-3.2.5.RELEASE.jar" /> < resource-root path = "spring-core-3.2.5.RELEASE.jar" /> < resource-root path = "spring-expression-3.2.5.RELEASE.jar" /> < resource-root path = "spring-jdbc-3.2.5.RELEASE.jar" /> < resource-root path = "spring-orm-3.2.5.RELEASE.jar" /> < resource-root path = "spring-oxm-3.2.5.RELEASE.jar" /> < resource-root path = "spring-tx-3.2.5.RELEASE.jar" /> < resource-root path = "spring-web-3.2.5.RELEASE.jar" /> < resource-root path = "spring-webmvc-3.2.5.RELEASE.jar" /> < resource-root path = "spring-webmvc-portlet-3.2.5.RELEASE.jar" /> </ resources > < dependencies > < module name = "javaee.api" /> < module name = "org.apache.commons.logging" /> < module name = "org.jboss.vfs" /> < module name = "org.hibernate" /> < module name = "javax.el.api" export = "true" /> < module name = "com.sun.xml.bind" export = "true" /> </ dependencies > </ module > |
- Затем добавьте все JAR-файлы, указанные как «resource-root» в этом новом каталоге
- Вы СДЕЛАНЫ с модулем Spring !!!
- Теперь вы можете ссылаться на модуль Spring, используя следующую строку в вашем «jboss-deploy-structure.xml» , из вашего EAR / WAR:
- <module name = ”org.springframework” slot = ”3.2.5.RELEASE” />
Создать модуль Camel
- Создайте структуру каталогов Camel:
- $> модули mkdir -p / org / apache / camel / 2.12.1
- Внутри этого нового каталога создайте файл module.xml со следующим содержимым:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
< module xmlns = "urn:jboss:module:1.3" name = "org.apache.camel" slot = "2.12.1" > < resources > < resource-root path = "camel-core-2.12.1.jar" /> < resource-root path = "camel-spring-2.12.1.jar" /> < resource-root path = "jaxb-impl-2.2.6.jar" /> </ resources > < dependencies > < module name = "org.springframework" slot = "3.2.5.RELEASE" /> < module name = "org.slf4j" /> < module name = "javax.xml.bind.api" /> < module name = "javax.api" /> < module name = "sun.jdk" /> </ dependencies > </ module > |
- Затем добавьте все JAR-файлы, указанные как «resource-root» в этом новом каталоге
- Вы СДЕЛАНЫ с верблюжьим модулем !!!
- Теперь вы можете ссылаться на верблюжий модуль, используя следующую строку в вашем «jboss-deploy-structure.xml» , из вашего EAR / WAR:
- <module name = ”org.apache.camel” slot = ”2.12.1 ″ />
Вы можете вырезать несколько зависимостей jar из Spring или Camel, но это только мои текущие настройки, и я знаю, что это работает!
Еще одно важное замечание. Пока я пытался найти правильные JAR-файлы для этих модулей, я встретил несколько исключений … Итак, если вы забудете какой-либо JAR-файл, вы можете увидеть любое из этих исключений:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
Caused by: java.lang.NoClassDefFoundError: sun /misc/Unsafe at org.apache.camel.com.googlecode.concurrentlinkedhashmap.ConcurrentHashMapV8.getUnsafe(ConcurrentHashMapV8.java:4136) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.com.googlecode.concurrentlinkedhashmap.ConcurrentHashMapV8.<clinit>(ConcurrentHashMapV8.java:4101) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap.<init>(ConcurrentLinkedHashMap.java:221) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap.<init>(ConcurrentLinkedHashMap.java:104) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder.build(ConcurrentLinkedHashMap.java:1634) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.util.LRUCache.<init>(LRUCache.java:83) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.util.LRUSoftCache.<init>(LRUSoftCache.java:68) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.impl.EndpointRegistry.<init>(EndpointRegistry.java:39) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.impl.DefaultCamelContext.<init>(DefaultCamelContext.java:234) [camel-core-2.12.1.jar:2.12.1] at org.apache.camel.spring.SpringCamelContext.<init>(SpringCamelContext.java:67) [camel-spring-2.12.1.jar:2.12.1] at org.apache.camel.spring.CamelContextFactoryBean.newCamelContext(CamelContextFactoryBean.java:356) [camel-spring-2.12.1.jar:2.12.1] at org.apache.camel.spring.CamelContextFactoryBean.createContext(CamelContextFactoryBean.java:350) [camel-spring-2.12.1.jar:2.12.1] at org.apache.camel.spring.CamelContextFactoryBean.getContext(CamelContextFactoryBean.java:361) [camel-spring-2.12.1.jar:2.12.1] at org.apache.camel.spring.CamelContextFactoryBean.getContext(CamelContextFactoryBean.java:80) [camel-spring-2.12.1.jar:2.12.1] at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.getContext(AbstractCamelContextFactoryBean.java:518) [camel-spring-2.12.1.jar:2.12.1] at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.afterPropertiesSet(AbstractCamelContextFactoryBean.java:160) [camel-spring-2.12.1.jar:2.12.1] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571) [spring-beans-3.2.5.RELEASE.jar:3.2.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509) [spring-beans-3.2.5.RELEASE.jar:3.2.5.RELEASE] ... 23 more Caused by: java.lang.ClassNotFoundException: sun.misc.Unsafe from [Module "org.apache.camel:2.12.1" from local module loader @1a6e5d5 (finder: local module finder @3b3402 (roots: /home/torun/jboss/wildfly/wildfly-8 .0.0.Beta1 /modules , /home/torun/jboss/wildfly/wildfly-8 .0.0.Beta1 /modules/system/layers/base ))] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197) [jboss-modules.jar:1.3.0.Final] ... |
ИЛИ ЖЕ
01
02
03
04
05
06
07
08
09
10
11
|
Caused by: java.lang.NoClassDefFoundError: org /w3c/dom/Node at java.lang.Class.getDeclaredConstructors0(Native Method) [rt.jar:1.7.0_40] at java.lang.Class.privateGetDeclaredConstructors(Class.java:2483) [rt.jar:1.7.0_40] at java.lang.Class.getConstructor0(Class.java:2793) [rt.jar:1.7.0_40] at java.lang.Class.getDeclaredConstructor(Class.java:2043) [rt.jar:1.7.0_40] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:105) at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.resolve(DefaultNamespaceHandlerResolver.java:129) ... 29 more Caused by: java.lang.ClassNotFoundException: org.w3c.dom.Node from [Module "org.apache.camel:2.12.1" from local module loader @1a6e5d5 (finder: local module finder @3b3402 (roots: /home/torun/jboss/wildfly/wildfly-8 .0.0.Beta1 /modules , /home/torun/jboss/wildfly/wildfly-8 .0.0.Beta1 /modules/system/layers/base ))] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197) [jboss-modules.jar:1.3.0.Final] ... |
ИЛИ ЖЕ
01
02
03
04
05
06
07
08
09
10
11
|
Caused by: java.lang.NoClassDefFoundError: javax /xml/bind/JAXBException at java.lang.Class.getDeclaredConstructors0(Native Method) [rt.jar:1.7.0_40] at java.lang.Class.privateGetDeclaredConstructors(Class.java:2483) [rt.jar:1.7.0_40] at java.lang.Class.getConstructor0(Class.java:2793) [rt.jar:1.7.0_40] at java.lang.Class.getDeclaredConstructor(Class.java:2043) [rt.jar:1.7.0_40] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:105) at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.resolve(DefaultNamespaceHandlerResolver.java:129) ... 29 more Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException from [Module "org.apache.camel:2.12.1" from local module loader @1a6e5d5 (finder: local module finder @3b3402 (roots: /home/torun/jboss/wildfly/wildfly-8 .0.0.Beta1 /modules , /home/torun/jboss/wildfly/wildfly-8 .0.0.Beta1 /modules/system/layers/base ))] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197) [jboss-modules.jar:1.3.0.Final] ... |
Надеюсь, поможет!