如何在同一个战争中的多个jar中使用相同的CamelContext

时间:2016-03-09 09:22:51

标签: apache-camel apache-camel-cdi

我正在使用camel 2.16.2,我需要在多个jar中使用一个CamelContext,因为我需要将所有Camel路由器放入一个CamelContext中。因此,我的战争将把所有这些罐子作为maven工件。

请告诉我如何处理上述情况?

修改

只是详细说明上述问题。 在我的战争myApp.war中,我初始化了CamelContext。有三个罐子myApp1.jar,myApp2.jar和myApp3.jar。每个jar都有自己独立定义的路由器。

  1. 如何在每个jar中启动路由器?
  2. 我可以使用注入到每个路由器的相同CamelContext吗?
  3. 如果我无法通过jar处理,是否可以实现多个war(myApp1.war,myApp2.war和myApp3.war)并且每个war都有不同的camelContext并从主战争中与这些路由器通信(myApp.war) )?

2 个答案:

答案 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

进行操作

参考:http://camel.apache.org/spring.html

答案 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已注册。现在,您可以随时随地访问路由器。

希望这对我遇到同样问题的人有用。