クィックスタート

ダウンロード

ダウンロードはSourceForge(下記URL)からダウンロードします。(curl-orb-V0.8.zipをダウンロードします。)

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サーバを当プロジェクトに取り込むため、ダウンロードしたファイルの”java/web/WEB-INF”と”java/web/index.html”を当プロジェクトのWebContentディレクトリ配下に上書きコピーします。

上記の設定が終了しましたら、Eclipse上でTomcatを起動します。これには、当プロジェクトを右クリックし、”Run AS – Profile on Server”でサーバの設定(Tomcatのホームや当プロジェクトをこのサーバ設定に追加等の設定)をし、サーバを起動します。WTPの詳細については、ThinkITが参考になると思います。
(注意)EclipseでTomcatを起動する前に、Tomcatが停止されていることを確認してください。

動作確認

動作確認をするには、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クラスを作成します。(ここでは@RemoteServiceアノテーションを付け忘れないようにしてください。)

package com.test;

import com.curl.orb.security.RemoteService;

@RemoteService
public class Hello {

// constructor
public Hello() {
}

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

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

orb-q1.jpg

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

次にダウンロードして解凍したファイルのcurl-orb-V0.8/curl/COM.CURL.ORB-V0.8/8.0ディレクトリ にあるcode-generator.dcurlを起動します。(もちろん事前にCurlランタイムのインストールが必要です。)

ws000002.jpg

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

ws00.jpg

上記画面にてcom.test.Hello(パッケージ名.クラス名)を入力してNextボタンを押下します。(Browseボタンを押下しますと一覧から選択することもできます。)

WS000001.jpg

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

Hello.scurl

{import * from COM.CURL.ORB}

{define-class public Hello {inherits HttpSessionClient}

{constructor public {default server-url:#Url = null}
{construct-super.HttpSessionClient “com.test.Hello“, server-url = server-url}
}

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

}

load.scurl

{curl 8.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ディレクトリのcurl/COM.CURL.ORB-V0.8/8.0/manifest.mcurlを選択します。

次に生成されたファイル(Hello.scurlとload.scurl)をプロジェクトに追加するため、”プロジェクト – パッケージの追加”を選択し、生成されたload.scurlを選択します。

上記準備が完了しましたら以下のようなテストアプレット(start.curl)を作成しますと、自動的にサーバサイドへリクエストを投げ、サーバサイドのHelloクラスのsay-helloメソッドを実行し、結果をクライアントで受け取ることができます。

{curl 8.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です。変更方法は、こちらです。

補足.通信するデータにユーザ定義クラスを利用する

上記の例では通信はStringで行いましたが、String以外にも多くのデータ型をサポートします。たとえば、Javaで以下のようなPersonクラスを作成します。

package com.test;

public class Person implements java.io.Serializable {
private String name;
private int age;

public Person() {
// データクラスには引数なしのコンストラクタが必要です。
}

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;

import com.curl.orb.security.RemoteService;

@RemoteService
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 8.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″と表示されます。
このようにユーザ定義クラスもデータ通信クラスとして利用することができます。

(*’any’ から暗黙的キャストは禁止(または不正使用)されています。というメッセージのエラーが出る場合はこちら。)

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

orb-classes.jpg

orb-q3.jpg

似たような記事ですが、CodeZineにも掲載しております。

その他機能

各種機能については、こちらを参照ください。