2016-10-19 10 views
0

私はキャメルとカラフに夢中です。私は2つのバンドルでプロジェクトを構築した:Karafのラクダ:ルートリストにはブルールートだけが表示され、Javaのルートは表示されません。

  • バンドルAは青写真キャメルルートが含まれてい
  • バンドルBは、純粋なJavaのルート

が含まれています、私はジェイミー・グッドイヤーのKarafクックブック

からの指示に従っ

両方のルートは非常にシンプルで、フィーチャーファイルを使用して展開します。彼らは完全に展開し、予定通りにも正確に実行します。

バンドルAは/tmp/out バンドルBに/tmp/inからファイルを移動tmp/out2

すべて良いに/tmp/in2からファイルを移動します。私は、Karafコマンドcamel:route-listを実行する場合、私はバンドルAに定義されたコンテキストが示され、その後camel:context-listを実行する場合

しかし、唯一青写真ルートは、また

が示されています。

これを繰り返しても、両方のルートは正常に動作しますが、Javaのものはリストに表示されません。

ここに何か不足していますか?

public class FileRouter extends RouteBuilder { 
    public void configure() 
    { 
     from ("file:/tmp/in2?noop=true") 
     .log("Java DSL doing the heavy lifting") 
     .to("file:/tmp/out2"); 
    } 
} 

、バンドルアクティベータ:

public class Activator implements BundleActivator { 
    DefaultCamelContext camelContext; 

    public void start(BundleContext context) { 
     System.out.println("Starting the bundle"); 
     camelContext = new DefaultCamelContext(); 
     try { 
      camelContext.setName("JavaDSLContext"); 
      camelContext.addRoutes(new FileRouter()); 
      camelContext.start(); 
     } catch (Exception ex) { 
      System.out.println("Exception occured! " + ex.getMessage()); 
     } 
    } 

    public void stop(BundleContext context) { 
     System.out.println("Stopping the bundle"); 
     if (camelContext != null) { 
      try { 
       camelContext.stop(); 
      } catch (Exception ex) { 
       System.out.println("Exception occured during stop context."); 
      } 
     } 
    } 
} 
+0

Javaルートはバンドルとして展開されていますか?または何らかの形で包まれていますか? –

+1

ちなみに、私はKarafとCamelを使って作業する最も簡単な方法は、青写真を使用することですが、routeBuilderを接続するだけで、すべての実装が実際のJavaルートdslにあることがわかります。 CamelとKarafを簡単に接続できます。 –

+0

Javaバンドルの実装方法によって異なります。これをOSGiで手作業で行うときは、あなた自身がたくさんのものをセットアップする必要があります。それ以外の場合は、すべてがOSGiで実行できるラクダの青写真、camel-cdiまたはcamel-scrで無料で入手できます。 –

答えて

0

そして、クラウスのおかげで、私はCamel-SCRの資料を手がけ、最終的にはそのアプローチも得ました。 Camel-SCRは、JavaDSLルーターにプロパティを渡すのが非常に簡単になるため、Camel-SCRはおそらくより洗練されたソリューションと考えています。

ここに私の最終的な解決策だ、完全ために、私はこの質問クローズアップされます: をファイルルータは、次のようになります。

public class ScrFileRouter extends RouteBuilder { 

    // Configured fields 
    private String camelRouteId; 

    @Override 
    public void configure() throws Exception { 
     // Add a bean to Camel context registry 
     AbstractCamelRunner.getRegistry(getContext(), SimpleRegistry.class).put("testString", "this is a test"); 

     from("file:/tmp/in6?noop=true").routeId(camelRouteId) 
     .to("file:/tmp/out6"); 
    } 
} 

そして、SCRベースのキャメルランナーは次のようになります。

@Component(label = ScrRunner.COMPONENT_LABEL, description = ScrRunner.COMPONENT_DESCRIPTION, immediate = true, metatype = true) 
@Properties({ 
    @Property(name = "camelContextId", value = "scr-runner"), 
    @Property(name = "camelRouteId", value = "scr-file-router"), 
    @Property(name = "active", value = "true"), 
}) 
@References({ 
    @Reference(name = "camelComponent",referenceInterface = ComponentResolver.class, 
     cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, policy = ReferencePolicy.DYNAMIC, 
     policyOption = ReferencePolicyOption.GREEDY, bind = "gotCamelComponent", unbind = "lostCamelComponent") 
}) 
public class ScrRunner extends AbstractCamelRunner { 

    public static final String COMPONENT_LABEL = "ScrRunner"; 
    public static final String COMPONENT_DESCRIPTION = "This is the description for ScrRunner"; 

    @Override 
    protected List<RoutesBuilder> getRouteBuilders() { 
     List<RoutesBuilder> routesBuilders = new ArrayList<>(); 
     routesBuilders.add(new ScrFileRouter()); 
     return routesBuilders; 
    } 

    @Override 
    protected void setupCamelContext(BundleContext bundleContext, String camelContextId)throws Exception{ 
     super.setupCamelContext(bundleContext, camelContextId); 

     // Use MDC logging 
     getContext().setUseMDCLogging(true); 

     // Use breadcrumb logging 
     getContext().setUseBreadcrumb(true); 
    } 
} 

私は、Camel SCRのウェブサイトに関する情報をよく守り、ほとんどのことが機能しています。それから私は、巧みに機能していたアーキタイプ提案(ラクダ - アーキタイプ - スクール)を使用しました。

だから最後に私も自分のPOMファイルにいくつかの変更をしなければならなかった(事実だけで原型が提供するPOMを使用。)の支援のためのすべての

感謝を。私は今、いくつかの牽引力を得ることができるだろうと思う。

乾杯!

1

のTx Souciance Eqdam Rashti

は、ここに私のJavaのルートです。私は今朝あなたのブログを通じ、JavaDSLで青写真を使って何を意味しているのか見てきました。

魅力的な作品です。

ただ、完全酒のために、ここでの変更があります:

私のJavaのルートクラスが質問に指定されたとまったく同じままですが、私は青写真ファイルに置き換えること、完全にアクティベーターをドロップします。

青写真は、次のようになります。

<bean id="FileRouter" class="com.eightbitplatoon.learning.karaf.karafbasics.combined.FileRouter"> 
</bean> 
<camelContext id="karafbasics-combined" xmlns="http://camel.apache.org/schema/blueprint"> 
    <routeBuilder ref="FileRouter" /> 
</camelContext> 

送信を支援するために!

+0

ブログは何とか役立ちました。 –

関連する問題