57.11. Camel XML 設定のインポート
Camel 2.18 から利用可能
CDI は型安全なディペンデンシーインジェクションメカニズムを優先しますが、既存の Camel XML 設定ファイルを Camel CDI アプリケーションに再利用することが役に立つ場合があります。 その他のユースケースでは、Camel XML DSL を使用して Camel コンテキストを設定すると便利です。
CDI Bean で Camel CDI によって提供される @ImportResource アノテーションを使用でき、Camel CDI は指定された場所で Camel XML 設定を自動的にロードします。以下に例を示します。
@ImportResource("camel-context.xml")
class MyBean {
}
Camel CDI は、指定の場所でクラスパスからリソースをロードします(他のプロトコルは今後追加される可能性があります)。
インポートされたリソースからの CamelContext 要素およびその他の Camel プリミティブ はすべて、コンテナーブートストラップ中に CDI Bean として自動的にデプロイされ、Camel CDI が提供する自動設定から利点を受け、ランタイム時にインジェクションに利用できるようになります。このような要素に明示的な id 属性が設定されている場合、対応する CDI Bean は @Named 修飾子で修飾されます(例: 以下の Camel XML 設定)。
<camelContext id="foo">
<endpoint id="bar" uri="seda:inbound">
<property key="queue" value="#queue"/>
<property key="concurrentConsumers" value="10"/>
</endpoint>
<camelContext/>
対応する CDI Bean は自動的にデプロイされ、注入することができます。以下に例を示します。
@Inject
@ContextName("foo")
CamelContext context;
@Inject
@Named("bar")
Endpoint endpoint;
CamelContext Bean は @Named 修飾子と @ContextName 修飾子の両方で自動的に修飾されることに注意してください。インポートされた CamelContext 要素に id 属性がない場合、対応する Bean は組み込みの @Default 修飾子でデプロイされます。
逆に、アプリケーションにデプロイされた CDI Bean は Camel XML 設定から参照できます。通常、以下の Bean が宣言されている場合は ref 属性を使用します。
@Produces
@Named("baz")
Processor processor = exchange -> exchange.getIn().setHeader("qux", "quux");
Bean への参照は、インポートされた Camel XML 設定で宣言できます。以下に例を示します。
<camelContext id="foo">
<route>
<from uri="..."/>
<process ref="baz"/>
</route>
<camelContext/>