59.11. Camel XML 設定のインポート

Camel 2.18 から利用可能

CDI はタイプセーフな依存性注入メカニズムを優先しますが、既存の Camel XML 設定ファイルを Camel CDI アプリケーションに再利用すると便利な場合があります。 他の使用例では、Camel XML DSL に依存してその Camel コンテキストを設定すると便利な場合があります。

Camel CDI によって提供される @ImportResource アノテーションを任意の CDI Bean で使用できます。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 は、通常は ref 属性を使用して、Camel XML 設定から参照できます。たとえば、次の Bean が宣言されているとします。

@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/>