サンプルコード説明(その他)
サンプルコードを元に、単純にCurlからJavaのメソッドを呼び出す以外の機能も見ていこうと思います。
1)非同期通信
非同期通信を行うためには、まず"async-"で始まるメソッドを実行します。例えば以下のサンプル(sample2.curl)ですとechoというJavaもメソッドを非同期で呼ぶため、async-echoというメソッドを呼び出しています。
{hoge.async-echo
100,
|| 引数にAsyncCallbackEventハンドラーを記述します。
{on e:AsyncCallbackEvent do
{if-non-null ex = e.exception then
|| Exceptionが発生した際の処理を記述
{popup-message ex.message}
else
|| 成功した際の処理を記述
|| 結果はAsyncCallbackEventのobjプロパティで取得できます。
def result = e.obj asa int
{disp.add result}
}
}
}
非同期にメソッドを実行するためには、終了したときの処理を、AsyncCallbackEventハンドラー内に記述します。上記サンプルのように、例外が発生しているかチェックし、例外(AsyncCallbackEventのゲッターexceptionで取得)が発生していたら、メッセージ表示し、成功したら画面に結果(AsyncCallbackEventのゲッターobjで取得)を表示({disp.add result})しています。このハンドラーをasync-echoメソッドの最後の引数としてセットします。
2)例外ハンドリング
Curl ORBでは、Java側で例外が発生しますと、デフォルトではすべてORBServerExceptionとしてcatchします。ただし、Javaで発生したExceptionの種類によって、クライアント側で他のExceptionを発生させたい場合や、JavaのExceptionをそのままCurlでcatchしたい場合が出てくると思います。そこで、bind-exceptionプロシージャを利用しますとこれが実現できます。以下はサンプル(SampleException.scurl)です。
|||
||| Curl ORB for java (version 0.6)
||| This code was generated by the Curl code generator automatically.
||| package name : SAMPLE
||| generated date : 2009-04-01 14:03:20.489000
|||
{import * from COM.CURLAP.ORB}
{define-class public SampleException {inherits Exception}
{constructor public {default message:String}
{construct-super message}
}
}
|| JavaとCurlのExceptionをバインドする。
|| サーバサイドでsample.SampleExceptionが発生した場合、
|| クライアント側でもSampleExceptionが発生するようになる。
{bind-exception
"sample.SampleException", || java Exception
SampleException || Curl Exception
}
SampleExceptionはコード生成ツールで生成されたコードでbind-exceptionは手動で追加したコードです。このコードを追加することで、Java側でsample.SampleExceptionが発生した場合、Curl側ではORBServerExceptionではなく、SAMPLE.SampleExceptionが発生します。これを以下のようにtry - catchします。
{try
|| メソッド呼び出し
{hoge.throw-exception}
catch e:SampleException do
{disp.add "[exception] " & e.message}
}
Hogeクラスのthrow-exceptionメソッドは、Java側でSampleExceptionを発生されるサンプルです。
以上がサンプルコードの説明となり、Curl ORBの中心的な機能を説明しました。各機能詳細については、CurlORB6.0ページを参考にすることができます。次回以降は、コード生成方法、テストスタブ利用方法、Spring FrameworkとCurl ORBを組み合わせた簡単なアプリケーション(認証、サービス呼び出し)などを説明していきたいと思います。


