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);
class MyBean {
//...
}
from("direct:inbound").bean(MyBean.class);
または、Java DSL から名前で CDI Bean を検索するには:
@Named("foo") class MyNamedBean { //... } from("direct:inbound").bean("foo");
@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("...");
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; }
@Produces
@Named("jtaTransactionManager")
PlatformTransactionManager createTransactionManager(TransactionManager transactionManager, UserTransaction userTransaction) {
JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
jtaTransactionManager.setUserTransaction(userTransaction);
jtaTransactionManager.setTransactionManager(transactionManager);
jtaTransactionManager.afterPropertiesSet();
return jtaTransactionManager;
}