orb.jpg

クィックスタート

*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)として公開されています。

orb.jpg

(上図説明)
コード自動生成ツールにて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へセットアップする手順を説明します。この開発環境をセットアップする前に、以下のツールをダウンロード及びインストールします。

ツールのインストール後、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を連携するアプリケーションを構築するには以下の手順を実施します。

  1. サーバサイドのサービスクラス(POJO)作成
  2. サーバサイドのサービスクラス(POJO)からCurlコードを自動生成
  3. クライアントコードを記述

1.サーバサイドのサービスクラス(POJO)作成

サーバサイドでcom.testパッケージと以下のようなHelloクラスを作成します。

package com.test;
public class Hello {

// constructor
public Hello() {
}

// methods
public String sayHello(String str) {
return “Hello ” + str;
}
}

作成しましたら、サーバを再起動します。(下図ようにサーバを選択し、”右クリック-Restart”を実行します。)

orb-q1.jpg

2.サーバサイドのサービスクラス(POJO)からCurlコードを自動生成(コード・ジェネレータ)

次にcurl-orb-clientディレクトリにある、code-generator.dcurlを起動します。

orb-qu1.jpg

上記画面にて”Service Class (Http Session)”を選択してNextボタン押下します。

orb-qu2.jpg

上記画面にてcom.test.Hello(パッケージ名.クラス名)を入力してNextボタンを押下します。

orb-qu3.jpg

上記画面にてClass Fileの”File”ボタンを押下し、出力先を決定した後、”Generator”ボタンを押下します。これによりHello.scurlとload.scurlが生成されます。(以下が生成されたコード)

Hello.scurl

|||
||| NOTE: *** This code was generated automatically ***
|||

|| PACKAGE COM.TEST
|| You might add this filename to load.scurl in this package.
|| e.g) {include “Hello.scurl”}

{import * from COM.CURLAP.ORB.SERVLET}

{define-class public Hello {inherits ORBClient}

{constructor public {default}
{construct-super.ORBClient “tests1.Hello”}
}

{method public {say-hello v0:String}:#String
{return {self.invoke “sayHello”, arguments = {FastArray v0}}}
}

}

load.scurl

{curl 6.0 package}
{package COM.TEST}
{include “Hello.scurl”}

コード生成ツールの詳細な利用方法についてはこちらを参照ください。

注意
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}
{curl-file-attributes character-encoding = “shift-jis”}
{applet manifest = “manifest.mcurl”}

{import * from COM.TEST} || import

{value
def h = {Hello} || new insntace
{popup-message {h.say-hello “foo”}} || invoke method
}

上記の結果は”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 {
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

このクラスからCurlコードを自動生成します。このクラスのコードを生成するために、コード生成ツールで”Data class”を指定します。

また、JavaのHelloクラスも以下のように書き換え、コード生成ツールによってコードを再生成します。
※生成方法は、上記「2.サーバサイドのサービスクラス(POJO)からCurlコードを自動生成」参照

package com.test;

public class Hello {

// constructor
public Hello() {

}

// methods
public String sayHello(String str) {
return “Hello ” + str;
}

public Person callPerson() {
return new Person(“hokada”, 25);
}
}

これらを利用するため、先ほど作成したCurlテストアプレットを以下のように変更します。

{curl 6.0 applet}
{curl-file-attributes character-encoding = “shift-jis”}
{applet manifest = “manifest.mcurl”}

{import * from COM.TEST} || import

{value
def h = {Hello}
def person = {h.call-person}
{popup-message person.name & ” ” & person.age}
}

実行しますと、ポップアップメッセージで”hokada 25″と表示されます。
このようにユーザ定義クラスもデータ通信クラスとして利用することができます。

最終的なディレクトリ・ファイル構成は以下のようになります。

orb-q2.jpg

orb-q3.jpg

その他機能

その他、Curl ORBが持っている機能は以下の通りです。これらは別の章でご紹介していく予定です。