2017-11-10 19 views
0

@BeanInjectをプロセッサに使用しようとしていますが、常にnullです。プロセッサにBeanを挿入する

RouteBuilderでBeanにアクセスできます。また、ProcessorクラスがRouteBuilderに定義されている場合はProcessorにもアクセスできますが、Processorクラスがそれ自身のファイルにない場合はアクセスできます。

これはサポートされていませんか、何か不足していますか?

[更新] 私はApache Camel 2.17.2を使用しています。コードはcamel-example-cdiから取得しました 以下のコードはオブジェクトインスタンスを最初のプロセッサに表示しますが、2番目のプロセッサには表示しません。コードは単体テストで実行されます。あなたがCDIやSpringのIoCなどを使用していけない場合、後者が悪いマン代用である、とのみ -

public class MyRoutes extends RouteBuilder { 
final static Logger LOG = LoggerFactory.getLogger(MyRoutes.class); 

@Inject 
@Uri("timer:foo?period=5000") 
private Endpoint inputEndpoint; 

@Inject 
@Uri("log:output") 
private Endpoint resultEndpoint; 

@BeanInject 
private SomeBean someBean; 

@Override 
public void configure() { 
    from("timer:foo?period=500") 
     .to("bean:counterBean") 
      .process(new Processor(){ 

       @Override 
       public void process(Exchange exchange) throws Exception { 
        LOG.info("[" + someBean + "]"); 
       } 
      }) 
     .process(new MyProcessor()) 
     .to("mock:result"); 
    } 
} 

プロセッサあなたがCDIを使用している場合

public class MyProcessor implements Processor { 
final static Logger LOG = LoggerFactory.getLogger(MyProcessor.class); 

@BeanInject 
private SomeBean someBean; 

@Override 
public void process(Exchange exchange) throws Exception { 
    LOG.info("In processor [" + someBean + "]"); 
} 
} 
+1

あなたが使用しているCamelのバージョンとCamelを起動/実行する方法を教えてください。 –

+0

こんにちは、すみませんでした。私は投稿を更新しました。 –

答えて

1

あなたはキャメルの@BeanInject@Injectを使用して優先すべきですキャメル豆にも使用できます。

問題の点では、新しいコンストラクタを使用してMyProcessorインスタンスを自分で作成するためです。インスタンスを作成する標準のJavaとそうでないCDIまたはApache Camelを使用するので、依存関係注入を行うことはできません。

CDIとその名前付きBeanを使用して、プロセッサに依存性注入を行うこともできます(標準CDI注釈を使用するなど)。あなたのプロセッサを@Inject経由でRouteBuilderに挿入し、このインスタンスをCamelルートから呼び出します。

+0

あなたの助けをありがとうClaus。私はその後私のアプローチを考え直さなければならないでしょう。 –

関連する問題