public interface PropagationManager extends Closeable
Encoder
(データ変換クラス)、データの受信側に Decoder
(データ変換クラス) と Procedure
(データ処理クラス)
を用意することでデータの伝搬を行い、依存関係を動的に結んでモジュール間の連携を実現しています。Encoder
(データ変換クラス) で渡されたデータを共通モデルに変換します。Decoder
(データ変換クラス) でデータを共通モデルから受信側のモジュールでのモデルへ変換します。Procedure
(データ処理クラス) でデータを受け取り、受信側のモジュール内で処理後、処理結果を返却します。PropagationManagerFactory
クラスから取得してください。final PropagationManager manager = PropagationManagerFactory.getInstance().getPropagationManager();
begin
メソッドを呼び出し、伝搬機能のセッションを開始します。send
メソッドを呼び出し、伝搬機能へデータを送信します。 送信したいデータが複数ある場合は send
メソッドをその都度呼び出します。decide
メソッドを呼び出し、伝搬機能のセッションを確定してコミット処理を行います。abort
メソッドを呼び出し、伝搬機能のセッションを確実に終了します。decide
メソッドがまだ呼び出されていない場合は、セッションが中断してロールバック処理が行われます。final PropagationManager manager = PropagationManagerFactory.getInstance().getPropagationManager(); try { manager.begin(); manager.send(OperationType.DATA_CREATED, data, EmptyObject.class); manager.decide(); } catch (final Exception e) { ... } finally { manager.abort(); }伝搬機能のセッション管理が不要で単純にデータを伝搬したい場合は、
begin
、 decide
、 abort
メソッドの呼び出しを省略することができます。close
メソッドを呼び出してください。final PropagationManager manager = PropagationManagerFactory.getInstance().getPropagationManager(); try { manager.send(OperationType.DATA_CREATED, data, EmptyObject.class); } catch (final Exception e) { ... } finally { manager.close(); }クロージャ対応の
execute
メソッドを使用した場合は、セッション管理系 (send
以外)
のメソッドを呼び出さずに、データを伝搬することができます。execute
メソッドの説明をご覧ください。
final PropagationManager manager = PropagationManagerFactory.getInstance().getPropagationManager(); manager.execute(new Callable<SendResult<EmptyObject>>() { @Override public SendResult<EmptyObject> call() throws Exception { return manager.send(OperationType.DATA_CREATED, data, EmptyObject.class); } });通常は
send
メソッドの引数 data
に指定されたインスタンスのクラス名で設定ファイルを参照して Encoder
等を検索しますが、以下のいずれかの場合にクラス名が特定できない場合があります。data
に指定するクラスが、 class
ではなく interface
を対象としている場合。
data
に指定するクラスが、想定しているクラスだけでなく、それを継承したクラスまで対象となる可能性がある場合。
dataClass
が用意されている send
メソッドを利用することで、引数
data
のクラスを明示的に指定することができます。send
メソッドの説明をご覧ください。
final PropagationManager manager = PropagationManagerFactory.getInstance().getPropagationManager(); manager.execute(new Callable<SendResult<EmptyObject>>() { @Override public SendResult<EmptyObject> call() throws Exception { return manager.send(OperationType.DATA_CREATED, ModelIF.class, data, EmptyObject.class); } });
修飾子とタイプ | メソッドと説明 |
---|---|
void |
abort()
伝搬機能で使用するセッションを中断します。
|
void |
begin()
伝搬機能で使用するセッションを開始します。
|
void |
close()
伝搬機能で使用したリソースを解放します。
|
void |
decide()
伝搬機能で使用するセッションを確定します。
|
<V> V |
execute(Callable<V> caller)
伝搬機能で使用するセッションを開始して、処理終了後にセッションを自動的に終了します。
|
<D,R extends Serializable> |
send(String operationType,
Class<D> dataClass,
D data,
Class<R> resultClass)
指定されたデータ操作の種別とデータが格納されたクラスを使用して、データを伝搬します。
|
<D,R extends Serializable> |
send(String operationType,
D data,
Class<R> resultClass)
指定されたデータ操作の種別とデータが格納されたクラスのインスタンスを使用して、データを伝搬します。
|
void abort()
send
メソッドで送られたデータの受信側に対して、セッション中断のイベントを通知します。close
メソッドを呼び出し、伝搬機能で使用したリソースを解放します。try
~ catch
内にデータ送信処理を記述して、 finally
でこのメソッドを呼び出すことを推奨します。execute
メソッドを呼び出した場合は、自動的にこのメソッドが呼び出されるため、明示的に呼び出す必要はありません。void begin() throws BeginException
decide
、 abort
、 execute
メソッドを呼び出してセッションが終了した状態でこのメソッドを呼び出すと、セッションを再開することができますが、なるべく 1 セッション内で処理を完結させてください。execute
メソッドを呼び出した場合は、このメソッドが自動的に呼び出されるため、明示的に呼び出す必要はありません。BeginException
- セッションを開始できない場合void close()
begin
メソッドを呼び出さずセッションを開始していない場合は、このメソッドを呼び出すことでリソースの解放処理のみを行うことができます。try
~ catch
内にデータ送信処理を記述して、 finally
でこのメソッドを呼び出すことを推奨します。begin
メソッドでセッションを開始した場合は、このメソッドではなく decide
、 abort
メソッドを呼び出してセッションを終了させてください。execute
メソッドを呼び出した場合は、伝搬機能によってこのメソッドが自動的に呼び出されるため、明示的に呼び出す必要はありません。close
インタフェース内 AutoCloseable
close
インタフェース内 Closeable
Closeable.close()
void decide() throws DecideException
send
メソッドで送られたデータの受信側に対して、セッション確定のイベントを通知します。close
メソッドを呼び出し、伝搬機能で使用したリソースを解放します。execute
メソッドを呼び出した場合は、伝搬機能によってこのメソッドが自動的に呼び出されるため、明示的に呼び出す必要はありません。DecideException
- セッションを確定できない場合<V> V execute(Callable<V> caller) throws Exception
begin
メソッドを呼び出してセッションの準備を行った後、引数 caller
で指定された Callable#call
メソッドを呼び出します。Callable#call
メソッドで任意のオブジェクトのインスタンスが返却された場合は decide
メソッドを呼び出して、自動的にセッションを確定します。null
が返却された、または、例外が発生した場合は abort
メソッドを呼び出して、自動的にセッションを中断します。Callable#call
メソッドで返却された値が、このメソッドの戻り値としてそのまま返却されます。V
- Callable#call
メソッドで返却する値のクラスタイプcaller
- セッション内で行う処理が実装された Callable
インタフェースCallable#call
メソッドで返却された値Exception
- 処理中に例外が発生した場合。 以下の例外を含みます。
BeginException
- セッションを開始できない場合SendException
- データを送信できない場合DecideException
- セッションを確定できない場合<D,R extends Serializable> SendResult<R> send(String operationType, Class<D> dataClass, D data, Class<R> resultClass) throws SendException
operationType
と dataClass
に指定された値を条件値として、伝搬機能がデータの受信側を決定します。Encoder
(データ変換クラス) が呼び出されデータが変換されます。Decoder
(データ変換クラス) を経由して Procedure
(データ処理クラス) へデータが伝搬されます。begin
メソッドを呼び出してセッションを開始してください。operationType
にはデータに対する操作の種別を OperationType
から選択して指定します。"im_propagation.CALL_LISTENER"
のような文字列を指定します。dataClass
には、送信するデータが格納されているクラスタイプを指定することができます。data
に指定されるクラスが不定の場合でも確実なクラスの指定ができます。data
に指定するクラスと互換性のあるクラスタイプを指定する必要があります。EmptyObject
.class
を指定してください。data
に指定したデータは、データ変換クラスによって別の形に変換されるため、そのままの形で受信側へ伝わることはありません。data
は必ず指定する必要があり、 null
または Java の標準的なクラス (java.lang.String
等)
は許可されていません。new EmptyObject
()
を指定してください。resultClass
には、受信側のデータ処理クラスが処理結果を返却した場合に値を格納するクラスを指定することができます。制約
がありますのでご注意ください。EmptyObject
.class
を指定してください。D
- 送信するデータのクラスタイプR
- 各モジュールから受け取る処理結果のクラスタイプoperationType
- データ操作の種別。 OperationType
を参照。 独自の値を指定する場合は、データ送信側のモジュールID を接頭子とするdataClass
- 送信するデータが格納されたクラス。 特に指定しない場合は EmptyObject
.class
を指定するdata
- 送信するデータが格納されたクラスのインスタンス。 特に指定しない場合は new EmptyObject
()
を指定するresultClass
- 各モジュールから受け取る処理結果のクラス。 特に受け取らない場合は EmptyObject
.class
を指定するSendException
- データを送信できない場合<D,R extends Serializable> SendResult<R> send(String operationType, D data, Class<R> resultClass) throws SendException
operationType
と data
に指定された値を条件値として、伝搬機能がデータの受信側を決定します。Encoder
(データ変換クラス) が呼び出されデータが変換されます。Decoder
(データ変換クラス) を経由して Procedure
(データ処理クラス) へデータが伝搬されます。send(String, Class<D>, D, Class<R>)
メソッドとの違いは、引数
data
のクラスを明示的に指定するかどうかです。send(operationType, data.getClass(), data, resultClass);このメソッドの引数と動作についての詳細は
send(String, Class<D>, D, Class<R>)
メソッドの説明をご覧ください。D
- 送信するデータのクラスタイプR
- 各モジュールから受け取る処理結果のクラスタイプoperationType
- データ操作の種別。 OperationType
を参照。 独自の値を指定する場合は、データ送信側のモジュールID を接頭子とするdata
- 送信するデータが格納されたクラスのインスタンス。 特に指定しない場合は new EmptyObject
()
を指定するresultClass
- 各モジュールから受け取る処理結果のクラス。 特に受け取らない場合は EmptyObject
.class
を指定するSendException
- データを送信できない場合send(String, Class, Object, Class)
Copyright © 2012 NTT DATA INTRAMART CORPORATION