0

私はラクダ 2.16.2 を使用しています。すべてのキャメル ルーターを 1 つのキャメル コンテキストに含める必要があるため、複数の jar で 1 つのキャメル コンテキストを使用する必要があります。したがって、私の戦争では、これらすべての瓶が Maven アーティファクトとして含まれます。

上記のシナリオをどのように処理すればよいか教えてください。

編集

上記の質問について詳しく説明します。私の戦争 myApp.war では、CamelContext を初期化しました。myApp1.jar、myApp2.jar、myApp3.jar の 3 つの jar があります。各jarには、個別に定義された独自のルーターがあります。

  1. 各 jar でルーターを起動するにはどうすればよいですか?
  2. 各ルーターに注入された同じ CamelContext を使用できますか?
  3. jar を介して処理できない場合、複数の war (myApp1.war、myApp2.war、および myApp3.war) を実装し、各 war が異なる camelContext を持ち、メインの war (myApp.war) からそれらのルーターと通信することは可能ですか?
4

2 に答える 2

0

他の人が言ったように、異なる Jar で同じ CamelContext を使用することはできません。あなたがやりたいことを少し説明していただけますか?


あなたがしたいのは、異なるJarで定義されたルートを使用することです。そのために、Camel Context を定義し、異なる Jar からのすべてのルートを追加できます。もちろん、Camel-Context-JAR はこれらすべての 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

于 2016-03-09T17:12:41.260 に答える
0

いくつかの調査を行った後、これを実装する方法を見つけました。実際、すべての jar が同じ戦争 (Web コンテナー) にあるため、異なる jar 間で同じ CamelContext を使用できます。

Apache Camel 2.16.2camel CDI で簡単に実装できます。戦争を展開するためにワイルドフライを使用している場合は、キャメル パッチを追加する必要がある場合があります。wildfly 9.0.2 パッチをダウンロードします。

手順を以下に示します。

戦争でサーブレットまたはrestServiceを作成し、キャメルコンテキストを注入します。

@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 クラスを作成し、Router を追加します。

@Singleton
@Startup
public class BootStrap {

private CamelContext camelctx;

@PostConstruct
public void init() throws Exception {   
    camelctx.addRoutes(new MyJRouteBuilder());
}

war pom.xml に jar をアーティファクトとして追加します。war をデプロイすると、MyJRouteBuilder が に登録されていることがわかりますcdi-context CamelContext。これで、どこからでもルーターにアクセスできます。

これが私と同じ問題を抱えている人に役立つことを願っています。

于 2016-03-29T09:54:43.520 に答える