第43章 Exchange インターフェイス

概要

本章では、Exchange インターフェイスについて説明します。Apache Camel 2.0 で実行される camel-core モジュールのリファクタリングにより、カスタムエクスチェンジタイプを定義する必要がなくなりました。DefaultExchange 実装をすべてのケースで使用できるようになりました。

43.1. Exchange インターフェイス

概要

org.apache.camel.Exchange 型のインスタンスは、エクスチェンジプロパティーとしてエンコードされた追加のメタデータと共に、ルートを通過する現在のメッセージをカプセル化します。

図43.1「エクスチェンジ継承階層」 エクスチェンジタイプの継承階層を表示します。デフォルトの実装は常に DefaultExchange が使用されます。

図43.1 エクスチェンジ継承階層

エクスチェンジ継承階層

Exchange インターフェイス

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

例43.1 Exchange インターフェイス

package org.apache.camel;

import java.util.Map;

import org.apache.camel.spi.Synchronization;
import org.apache.camel.spi.UnitOfWork;

public interface Exchange {
    // Exchange property names (string constants)
    // (Not shown here)
    ...

    ExchangePattern getPattern();
    void setPattern(ExchangePattern pattern);

    Object getProperty(String name);
    Object getProperty(String name, Object defaultValue);
    <T> T  getProperty(String name, Class<T> type);
    <T> T  getProperty(String name, Object defaultValue, Class<T> type);
    void   setProperty(String name, Object value);
    Object removeProperty(String name);
    Map<String, Object> getProperties();
    boolean hasProperties();

    Message getIn();
    <T> T   getIn(Class<T> type);
    void    setIn(Message in);

    Message getOut();
    <T> T   getOut(Class<T> type);
    void    setOut(Message out);
    boolean hasOut();

    Throwable getException();
    <T> T     getException(Class<T> type);
    void      setException(Throwable e);

    boolean isFailed();

    boolean isTransacted();

    boolean isRollbackOnly();

    CamelContext getContext();

    Exchange copy();

    Endpoint getFromEndpoint();
    void     setFromEndpoint(Endpoint fromEndpoint);

    String getFromRouteId();
    void   setFromRouteId(String fromRouteId);

    UnitOfWork getUnitOfWork();
    void setUnitOfWork(UnitOfWork unitOfWork);

    String getExchangeId();
    void setExchangeId(String id);

    void addOnCompletion(Synchronization onCompletion);
    void handoverCompletions(Exchange target);
}

エクスチェンジのメソッド

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

  • getPattern()setPattern() − エクスチェンジパターンは、org.apache.camel.ExchangePattern に列挙される値のいずれかになります。以下の交換パターンの値がサポートされます。

    • InOnly
    • RobustInOnly
    • InOut
    • InOptionalOut
    • OutOnly
    • RobustOutOnly
    • OutIn
    • OutOptionalIn
  • setProperty()getProperty()getProperties()removeProperty()hasProperties() − プロパティー setter および getter メソッドを使用して、名前付きプロパティーをエクスチェンジのインスタンスに関連付けます。プロパティーは、コンポーネントの実装に必要なその他のメタデータで設定されます。
  • In メッセージの setter および getter メソッド setIn()getIn()

    DefaultExchange クラスが提供する getIn() 実装は Lazy Creation セマンティクスを実装します。In メッセージが null の場合に getIn() が呼ばれると、DefaultExchange クラスはデフォルトの In メッセージを作成します。

  • setOut()getOut()hasOut(): Out メッセージの setter メソッドおよび getter メソッド。

    この getOut() メソッドは、Out メッセージの Lazy Creation を暗黙的にサポートします。つまり、現在の Out メッセージが null の場合は、新しいメッセージインスタンスが自動的に作成されます。

  • setException(), getException() − (Throwable 型の) 例外オブジェクトの getter および setter メソッド。
  • isFailed(): エクスチェンジが例外または障害におり失敗した場合に true を返します。
  • isTransacted() − エクスチェンジが処理された場合に、true を返します。
  • isRollback(): エクスチェンジがロールバック用にマークされている場合に true を返します。
  • getContext() −  関連付けられた CamelContext インスタンスへの参照を返します。
  • copy(): 現在のカスタムエクスチェンジオブジェクトのコピーを (エクスチェンジ ID は異なります) 新たに作成します。In メッセージのボディーおよびヘッダー、Out メッセージ (存在する場合)、および Fault メッセージ (存在する場合) もこの操作によってコピーされます。
  • setFromEndpoint()getFromEndpoint(): このメッセージを初期化したコンシューマーエンドポイントの getter メソッドおよび setter メソッド (通常は、ルートの開始時に from() DSL コマンドに表示されるエンドポイント)。
  • setFromRouteId()getFromRouteId(): このエクスチェンジを初期化したルート ID の getter および setter メソッド。getFromRouteId() メソッドは内部でのみ呼び出す必要があります。
  • setUnitOfWork()getUnitOfWork()org.apache.camel.spi.UnitOfWork Bean プロパティーの getter および setter メソッド。このプロパティーは、トランザクションに参加できるエクスチェンジにのみ必要です。
  • setExchangeId()getExchangeId(): エクスチェンジ ID の getter メソッドおよび setter メソッド。カスタムコンポーネントがエクスチェンジ ID を使用するかどうかは実装の詳細です。
  • addOnCompletion() − エクスチェンジの処理が完了したときに呼び出される org.apache.camel.spi.Synchronization コールバックオブジェクトを追加します。
  • handoverCompletions(): すべての OnCompletion コールバックオブジェクトを、指定されたエクスチェンジオブジェクトに渡します。