非同期型の実装方針

S2Axis2としては、コールバック形式の非同期通信に対応しようと考えています。が、そのコールバックオブジェクトをどのように扱うかで悩んでます。

OMElement payload;
Callback  callback;

    ・・・・

ServiceClient serviceClient = new ServiceClient();
serviceClient.sendReceiveNonblocking(payload, callback);
  • JAX-WS 2.0 の場合
    • Echo はサービスクラス
    • EchoCallbackHandler は、javax.xml.ws.AsyncHandler の実装クラス
Echo port;

    ・・・・

EchoCallbackHandler callbackHandler = new EchoCallbackHandler();
Future response = port.echo("hello!", callbackHandler);


こんな感じで、Axis2JAX-WS 2.0 とも、引数にコールバックオブジェクトを渡しているのだけれど、S2Axis2 でこれをやろうとすると、サービスのインタフェースがコールバックオブジェクトに依存することになってしまう。同期/非同期は、クライアント側で決定することなので、サービス側は依存させたくないなぁ。


サービスを呼び出すクラスに、コールバックオブジェクトをインジェクションするようにして、AxisConnectorで、そのコールバックオブジェクトを呼び出すようにしようか?