*Curl ORB for Java version 0.6 がリリースされました。リリースノートはこちら。
Curl ORB for javaとは、CurlアプリケーションからPOJO(Plain Old Java Object)で作成されたjavaオブジェクトのメソッドをコールし、戻り値をCurlアプリケーションで受け取るためのツールです。また、サーバサイドのjavaクラスからCurlのソースコードを自動生成することも可能です。このツールを用いれば、Curlとサーバサイドjavaとの連携が容易に開発可能となります。Curl ORB for javaはオープンソースプロジェクト(Apache License2.0)として公開されています。
(上図説明)
コード自動生成ツールにてJavaのクラスからCurlコードを自動生成します。クライアントサイドでは、自動生成されたCurlクラス(サービスクラス)を実行しますと、自動的にサーバサイドのサービスクラスをコールし、処理を実施して結果をクライアントへ返します。 またこの際、Spring frameworkやSeasar2などのDIコンテナで管理されているJavaオブジェクトに対してもコールすることが可能となっています。
「Curl ORB for java」利用方法の概要について、以下に説明します。
ダウンロード
ダウンロードはSourceForge(下記URL)からダウンロードします。(curl-orb_0.5_stable_bin.zipをダウンロードします。こちらには関連jarファイルもすべて含まれます。curl-orb_stable_0.5_src.zipはソースコードです。関連jarファイルは含まれません。)
http://sourceforge.net/projects/curlorb
Eclipse開発環境へCurl ORBをセットアップ
Curl ORBサーバをEclipseへセットアップする手順を説明します。この開発環境をセットアップする前に、以下のツールをダウンロード及びインストールします。
- Java5.0 SDK (or Java6.0)
- Eclipse3.4 + WTP (Eclipse IDE for Java EE Developers) (or 3.3)
- Apache Tomcat5.5 (or Tomcat6.0)
- Curl IDE6.0 (CurlをEclipse上で稼動させるには6.0.4以上)
ツールのインストール後、Eclipseを起動し、新規プロジェクトを作成します。”File – New – Other”を選択し、”New”画面のツリーから、”Web – Dynamic Web Project”を選択し、”Next”ボタンを押下します。次に”New Dynamic Web Project”画面が表示されますので、任意の”Project name”を入力し”Next”ボタンを押下します。最後に”Context Root”に”curl-orb-server”を入力し、”Finish”ボタンを押下しますと、新規プロジェクトが作成されます。
次にCurl ORBサーバを当プロジェクトに取り込むため、ダウンロードしたファイルの”server/web/WEB-INF”と”server/web/index.html”を当プロジェクトのWebContentディレクトリ配下に上書きコピーします。
上記の設定が終了しましたら、Eclipse上でTomcatを起動します。これには、当プロジェクトを右クリックし、”Profile AS – Profile on Server”でサーバの設定(Tomcatのホームや当プロジェクトをこのサーバ設定に追加等の設定)をし、サーバを起動します。WTPの詳細については、ThinkITが参考になると思います。
動作確認
動作確認をするには、http://localhost:8080/curl-orb-server にブラウザからアクセスしてください。”Welcome to Curl ORB for java”と表示されましたらサーバのセットアップは成功です。
簡易アプリケーションの構築手順
CurlとJavaを連携するアプリケーションを構築するには以下の手順を実施します。
- サーバサイドのサービスクラス(POJO)作成
- サーバサイドのサービスクラス(POJO)からCurlコードを自動生成
- クライアントコードを記述
1.サーバサイドのサービスクラス(POJO)作成
サーバサイドでcom.testパッケージと以下のようなHelloクラスを作成します。
package com.test; // constructor // methods |
作成しましたら、サーバを再起動します。(下図ようにサーバを選択し、”右クリック-Restart”を実行します。)
2.サーバサイドのサービスクラス(POJO)からCurlコードを自動生成(コード・ジェネレータ)
次にcurl-orb-clientディレクトリにある、code-generator.dcurlを起動します。
上記画面にて”Service Class (Http Session)”を選択してNextボタン押下します。
上記画面にてcom.test.Hello(パッケージ名.クラス名)を入力してNextボタンを押下します。
上記画面にてClass Fileの”File”ボタンを押下し、出力先を決定した後、”Generator”ボタンを押下します。これによりHello.scurlとload.scurlが生成されます。(以下が生成されたコード)
Hello.scurl
||| || PACKAGE COM.TEST {import * from COM.CURLAP.ORB.SERVLET} {define-class public Hello {inherits ORBClient} {constructor public {default} {method public {say-hello v0:String}:#String } |
load.scurl
{curl 6.0 package} |
コード生成ツールの詳細な利用方法についてはこちらを参照ください。
注意)
CurlのネーミングルールとJavaのネーミングルールの差を吸収するため、Javaのパッケージ名がCurl側では大文字に変換されます。(例えば、com.test->COM.TEST)またメソッド名は大文字部分がハイフン+小文字となります。(例えば、sayHello – say-hello、sayHELLO – say-hello)
3.クライアントコードを記述
まず、Curl側で新規プロジェクトを作成(”ファイル – 新規 – 新規プロジェクト – アプレットを含んだプロジェクト”を選択)します。次にCurl ORBクライアントを取り込むため、”プロジェクト – デリゲート先の追加”でダウンロードしたCurl ORBディレクトリのclient/COM/CURLAP/ORB/manifest.mcurlを選択します。
次に生成されたファイル(Hello.scurlとload.scurl)をプロジェクトに追加するため、”プロジェクト – パッケージの追加”を選択し、生成されたload.scurlを選択します。
上記準備が完了しましたら以下のようなテストアプレット(start.curl)を作成しますと、自動的にサーバサイドへリクエストを投げ、サーバサイドのHelloクラスのsay-helloメソッドを実行し、結果をクライアントで受け取ることができます。
{curl 6.0 applet} {import * from COM.TEST} || import {value |
上記の結果は”Hello foo”というメッセージがポップアップで出力されます。
注意)
サーバサイドのCurl ORBのデフォルトURLはhttp://localhost:8080/curl-orb-serverです。もし変更したい場合は、{set-default-server-url}プロシージャを利用してください。
(例えば、{set-default-server-url {url “http://hogehoge:8888/test-server“}})。
その際は、{import * from COM.CURLAP.ORB.SERVLET}文がこのプロシージャの前に必要になります。
補足.通信するデータにユーザ定義クラスを利用する
上記の例では通信はStringで行いましたが、String以外にも多くのデータ型をサポートします。たとえば、Javaで以下のようなPersonクラスを作成します。
package com.test; public class Person { public Person(String name, int age) { public String getName() { |
このクラスからCurlコードを自動生成します。このクラスのコードを生成するために、コード生成ツールで”Data class”を指定します。
また、JavaのHelloクラスも以下のように書き換え、コード生成ツールによってコードを再生成します。
※生成方法は、上記「2.サーバサイドのサービスクラス(POJO)からCurlコードを自動生成」参照
package com.test; public class Hello { // constructor } // methods public Person callPerson() { |
これらを利用するため、先ほど作成したCurlテストアプレットを以下のように変更します。
{curl 6.0 applet} {import * from COM.TEST} || import {value |
実行しますと、ポップアップメッセージで”hokada 25″と表示されます。
このようにユーザ定義クラスもデータ通信クラスとして利用することができます。
最終的なディレクトリ・ファイル構成は以下のようになります。
その他機能
その他、Curl ORBが持っている機能は以下の通りです。これらは別の章でご紹介していく予定です。
- コード生成ツール・マニュアル
- DIコンテナとの連携(Spring2)
- DIコンテナとの連携(Seasar2)
- 非同期・同期通信
- Exceptionのハンドリングとマッピング
- いろいろなデータ型(DateTime、ByteArray、RecordSetなど)の利用
- staticメソッド(クラスプロシージャ)
- アクセスコントロール
- ヘッダー情報送信
- Streamデータ・レスポンス