59.8. Camel Bean の統合

59.8.1. Camel アノテーション

Camel Bean 統合 の一部として、Camel には、Camel CDI によってシームレスにサポートされる一連の アノテーション が付属しています。したがって、CDI Bean でこれらのアノテーションのいずれかを使用できます。

 Camel アノテーションCDI 相当

設定プロパティー

@PropertyInject("key")
String value;

DeltaSpike 設定メカニズム を使用する場合:

@Inject
@ConfigProperty(name = "key")
String value;

詳細については、設定プロパティーを参照してください。

プロデューサーテンプレートインジェクション (デフォルトの Camel コンテキスト)

@Produce(uri = "mock:outbound")
ProducerTemplate producer;

@Produce(uri = "mock:outbound")
FluentProducerTemplate producer;
@Inject
@Uri("direct:outbound")
ProducerTemplate producer;

@Produce(uri = "direct:outbound")
FluentProducerTemplate producer;

エンドポイントインジェクション (デフォルトの Camel コンテキスト)

@EndpointInject(uri = "direct:inbound")
Endpoint endpoint;
@Inject
@Uri("direct:inbound")
Endpoint endpoint;

エンドポイントインジェクション (名前による Camel コンテキスト)

@EndpointInject(uri = "direct:inbound",
                context = "foo")
Endpoint contextEndpoint;
@Inject
@ContextName("foo")
@Uri("direct:inbound")
Endpoint contextEndpoint;

Bean インジェクション (種類別)

@BeanInject
MyBean bean;
@Inject
MyBean bean;

Bean インジェクション (名前別)

@BeanInject("foo")
MyBean bean;
@Inject
@Named("foo")
MyBean bean;

POJO consuming

@Consume(uri = "seda:inbound")
void consume(@Body String body) {
    //...
}

 

59.8.2. Bean コンポーネント

Java Camel DSL などを使用して、Camel DSL から、タイプまたは名前で CDI Bean を参照できます。

class MyBean {
    //...
}

from("direct:inbound").bean(MyBean.class);

または、Java DSL から名前で CDI Bean を検索するには:

@Named("foo")
class MyNamedBean {
    //...
}

from("direct:inbound").bean("foo");

59.8.3. エンドポイント URI からの Bean の参照

URI 構文を使用してエンドポイントを設定する場合、# 表記を使用してレジストリー内の Bean を参照できます。 URI パラメーター値が # 記号で始まる場合、Camel CDI は指定されたタイプの Bean を名前で検索します。

from("jms:queue:{{destination}}?transacted=true&transactionManager=#jtaTransactionManager").to("...");

次の CDI Bean を @Named("jtaTransactionManager") で修飾します。

@Produces
@Named("jtaTransactionManager")
PlatformTransactionManager createTransactionManager(TransactionManager transactionManager, UserTransaction userTransaction) {
    JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
    jtaTransactionManager.setUserTransaction(userTransaction);
    jtaTransactionManager.setTransactionManager(transactionManager);
    jtaTransactionManager.afterPropertiesSet();
    return jtaTransactionManager;
}