我正在使用camel 2.16.2,我需要在多个jar中使用一个CamelContext,因为我需要将所有Camel路由器放入一个CamelContext中。因此,我的战争将把所有这些罐子作为maven工件。
请告诉我如何处理上述情况?
只是详细说明上述问题。 在我的战争myApp.war中,我初始化了CamelContext。有三个罐子myApp1.jar,myApp2.jar和myApp3.jar。每个jar都有自己独立定义的路由器。
答案 0 :(得分:0)
正如其他人所说,你不能在不同的Jars中使用相同的CamelContext。你能解释一下你想做什么吗?
恕我直言,你想要做的是使用在不同的罐子里定义的路线。因此,您可以定义Camel Context并添加来自不同Jars的所有路由。当然,您的Camel-Context-JAR必须能够访问所有这些罐子。
<camel:camelContext id="camel5">
<camel:package>org.apache.camel.spring.example</camel:package>
</camel:camelContext>
或按班级分类
<camelContext id="camel5" xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="myBuilder" />
</camelContext>
<bean id="myBuilder" class="org.apache.camel.spring.example.test1.MyRouteBuilder"/>
如果您使用的是CDI,可以按照这篇精彩的文章https://dzone.com/articles/using-camel-routes-in-java-ee-components
进行操作答案 1 :(得分:0)
做了一些研究后找到了实现这个的方法。事实上,我们可以在不同的罐子中使用相同的CamelContext,因为所有罐子都在同一个战争中(Web容器)。
我们可以使用驼峰CDI轻松实现Apache Camel 2.16.2
。如果您正在使用wildfly来部署战争,那么您可能需要添加驼峰补丁。下载wildfly 9.0.2 pach
下面给出了步骤。
在你的战争中创建一个servlet或restService并注入camelContext。
@Inject
@ContextName("cdi-context")
private CamelContext camelctx;
使用以下注释在jar中创建路由器。
@Startup
@ApplicationScoped
public class MyJRouteBuilder extends RouteBuilder {
在Configure方法中添加
@Override
public void configure() throws Exception {
from("direct:startTwo").routeId("MyJRouteBuilder")
.bean(new SomeBeanThree());
}
在jar中创建一个BootStrap类并添加路由器
@Singleton
@Startup
public class BootStrap {
private CamelContext camelctx;
@PostConstruct
public void init() throws Exception {
camelctx.addRoutes(new MyJRouteBuilder());
}
在war pom.xml中添加jar作为工件。部署战争后,您可以在cdi-context
CamelContext
中看到MyJRouteBuilder已注册。现在,您可以随时随地访问路由器。
希望这对我遇到同样问题的人有用。