apache camel
这些天,我在玩Wildfly , Apache Camel和Spring 。
在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件。 有或没有骆驼,有很多方法可以实现这一目标。 骆驼在WildFly中就像一个饰物,不需要任何额外的配置。 骆驼很棒!!!
为了避免将Spring和Camel所需的所有JAR打包到我的应用程序中,我使用出色的JBoss Modules框架(WildFly已经使用过)创建了两个模块。 然后,我可以引用这两个框架,而无需在应用程序(EAR / WAR)中打包所有这些JAR。
创建Spring模块
- 转到WildFly主页目录: $> cd /home/torun/jboss/wildfly/wildfly-8.0.0.Beta1
- 创建Spring模块目录结构:
- $> mkdir -p modules / org / springframework / 3.2.5.RELEASE
- 在这个新目录中,创建具有以下内容的module.xml文件:
<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>
- 然后在此新目录内添加所有提到为“ resource-root”的JAR。
- 您已经完成了Spring模块!!!
- 现在,您可以在EAR / WAR中使用“ jboss-deployment-structure.xml”中的下一行来引用spring模块:
- <module name =” org.springframework” slot =“ 3.2.5.RELEASE” />
创建骆驼模块
- 创建骆驼模块目录结构:
- $> mkdir -p modules / org / apache / camel / 2.12.1
- 在这个新目录中,创建具有以下内容的module.xml文件:
<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>
- 然后在此新目录内添加所有提到为“ resource-root”的JAR。
- 您已经与骆驼模块一起完成了!!!
- 现在,您可以在EAR / WAR中使用“ jboss-deployment-structure.xml”中的下一行来引用骆驼模块:
- <module name =“” org.apache.camel” slot =” 2.12.1” />
您可以从Spring或Camel模块中删除一些jar依赖项,但是这些只是我当前的设置,我知道它可以工作!
还有一个重要的注意事项。 在尝试为这些模块找到正确的JAR时,我遇到了一些例外情况……因此,如果您忘记了任何JAR,则可能会看到以下任何例外情况:
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]
...
要么
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]
...
要么
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]
...
希望能帮助到你!
翻译自: https://www.javacodegeeks.com/2013/11/add-apache-camel-and-spring-as-jboss-modules-in-wildfly.html
apache camel