サンプルコード説明(その他)
サンプルコードを元に、単純に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を組み合わせた簡単なアプリケーション(認証、サービス呼び出し)などを説明していきたいと思います。