第40章 Endpoint インターフェイス

概要

本章では、Apache Camel コンポーネントの実装における必須ステップである Endpoint インターフェイスを実装する方法を説明します。

40.1. Endpoint インターフェイス

概要

org.apache.camel.Endpoint タイプのインスタンスはエンドポイント URI をカプセル化します。また、ConsumerProducerExchange オブジェクトのファクトリーとしても機能します。エンドポイントを実装するには、以下の 3 つの方法があります。

  • イベント駆動型
  • スケジュールされたポーリング
  • ポーリング

これらのエンドポイント実装パターンは、コンシューマーの実装に対応するパターンを補完します。「Consumer インターフェイスの実装」 を参照してください。

図40.1「コンシューマー継承階層」 は、Endpoint 継承階層を設定する、関連のある Java インターフェイスとクラスを示しています。

図40.1 コンシューマー継承階層

エンドポイント継承階層

Endpoint インターフェイス

例40.1「Endpoint インターフェイス」 は、org.apache.camel.Exchange インターフェースの定義を示しています。

例40.1 Endpoint インターフェイス

package org.apache.camel;

public interface Endpoint {
    boolean isSingleton();

    String getEndpointUri();

    String getEndpointKey();

    CamelContext getCamelContext();
    void setCamelContext(CamelContext context);

    void configureProperties(Map options);

    boolean isLenientProperties();

    Exchange createExchange();
    Exchange createExchange(ExchangePattern pattern);
    Exchange createExchange(Exchange exchange);

    Producer createProducer() throws Exception;

    Consumer createConsumer(Processor processor) throws Exception;
    PollingConsumer createPollingConsumer() throws Exception;
}

エンドポイントメソッド

Endpoint インターフェイスは以下のメソッドを定義します。

  • isSingleton(): 各 URI が CamelContext 内の単一のエンドポイントにマップされるように保証する場合には、true を返します。このプロパティーが true の場合、ルート内の同一 URI への複数の参照は常に 単一の エンドポイントインスタンスを参照します。一方、このプロパティーが false の場合、ルート内の同じ URI への複数の参照は 個別の エンドポイントインスタンスを参照します。ルートで URI を参照するたびに、新しいエンドポイントインスタンスが作成されます。
  • getEndpointUri() : このエンドポイントのエンドポイント URI を返します。
  • getEndpointKey() − エンドポイントを登録する際に、org.apache.camel.spi.LifecycleStrategy によって使用されます。
  • getCamelContext(): このエンドポイントが属する CamelContext インスタンスへの参照を返します。
  • setCamelContext(): このエンドポイントが属する CamelContext インスタンスへの参照を返します。
  • configureProperties() : 新規に Consumer インスタンスを作成する時にパラメーターの挿入に使用されるパラメーターマップのコピーを保存します。
  • isLenientProperties(): true の場合は URI が不明なパラメーターを含むことができることを示します (つまり、エンドポイントまたは Consumer クラスに注入できないパラメーターです)。通常、このメソッドは false を返すために実装する必要があります。
  • createExchange(): 以下のバリアントを持つオーバーロードされたメソッド。

    • Exchange createExchange(): デフォルトの交換パターン設定を使用して、新規のエクスチェンジインスタンスを作成します。
    • Exchange createExchange(ExchangePattern pattern) - 指定されたエクスチェンジパターンで新しいエクスチェンジインスタンスを作成します。
    • Exchange createExchange(Exchange exchange) - 指定された exchange 引数を、このエンドポイントに必要なエクスチェンジのタイプに変換します。指定のエクスチェンジがまだ正しいタイプでない場合、このメソッドはこれを正しいタイプの新規インスタンスにコピーします。このメソッドのデフォルト実装は DefaultEndpoint クラスにあります。
  • createProducer(): 新しい Producer インスタンスを作成するために使用されるファクトリーメソッド。
  • createConsumer(): イベント駆動型のコンシューマーインスタンスを新たに作成するためのファクトリーメソッド。processor 引数は、ルートの最初のプロセッサーへの参照です。
  • createPollingConsumer(): 新しいポーリングコンシューマーインスタンスを作成するためのファクトリーメソッド。

エンドポイントシングルトン

不要なオーバーヘッドを避けるために、同じ URI (CamelContext 内) を持つすべてのエンドポイントに 単一 のエンドポイントインスタンスを作成することが推奨されます。isSingleton() を実装して true を返すことにより、この条件を強制することができます。

注記

このコンテキストでは、同じ URI は文字列の等価を使用して 2 つの URI が同じであることを意味します。原則では、異なる文字列で表されますが、同等の URI を 2 つ持つことができます。この場合、URI は同じものとして処理されません。