サンプルコードのインポート
EclipseのメニューからFile -> Importを選択します。

上記画面で、From directoryでサンプルのjava/srcディレクトリを選択し、表示されたsrcをチェックします。次にInto folder欄にcurl-orb-server/src/sampleを入力もしくは選択し、Finishボタンを押下します。

上記のようにsampleパッケージと、Foo.java、Hoge.java、Person.java、SampleException.javaのソースコードがインポートされます。
サンプルコード説明~CurlからJavaのメソッドを呼ぶ~(1)
sample/Hoge.javaを開きます。
package sample;
import org.springframework.stereotype.Service;
import com.curlap.orb.security.RemoteService;
/**
* spring framework sample
*/
@Service("hoge")
@RemoteService
public class Hoge {
public String hello(String name) {
return "Hello " + name + "!";
}
public int add(int i1, int i2) {
return i1 + i2;
}
public Person getPerson() {
Person person = new Person();
person.setName("hoge");
person.setAge(20);
person.setSex(true);
return person;
}
public Object echo(Object v) {
return v;
}
public void throwException() throws SampleException {
throw new SampleException("happned sample exception!");
}
}
このHogeクラスは単純なPOJOで作成されたサービスクラスです。このクラスをSpringにBeanとして登録するため、@Serviceアノテーションを利用しています。(idは"hoge")この@Serviceアノテーションを付与したサービスクラスをSpringに自動的に登録させるために、Springの設定ファイルであるapplicationContext.xmlファイルに、以下の一行を追加します。
<context:component-scan base-package="sample"/>
実際の中身については、WebContent/WEB-INF/applicationContext.xmlを参照ください。
また、@RemoteServiceアノテーションというものがありますが、これはCurl ORBのアノテーションで、クライアントからのアクセス制御のために使用します。Curl ORBでは、4つのパラメータ(none、development、test、production)を指定でき、web.xmlでこれを切り替えることができます。以下はweb.xmlの一部です。
<context-param> <param-name>com.curlap.orb.environment</param-name> <param-value>development</param-value> </context-param>
例えば、@RemoteService(Environment.DEVELOPMENT)と指定したサービスクラスは、web.xmlでdevelopmentと指定した場合のみアクセス可能で、test、productionでサーバが稼動している場合はアクセスできません。また、@RemoteService(Environment.PRODUCTION)と指定した場合は、すべてのパラメータでアクセス可能となります。サンプルコードのようにEnvironmentを省略した場合は、Environment.PRODUCTIONがセットされます。ちなみに、noneの場合は@RemoteServiceのアノテーションなしで、アクセス可能となります。詳細についてはこちら(セキュリティ設定)を参照ください。
また、サービスクラス内で利用するデータクラスPersonや例外クラスSampleExceptionを以下のように用意しています。データクラスは、CurlとJavaの通信用のデータとなります。データクラス内で利用できる型は、プリミティブ型、String、配列、リスト、連想配列、日付型、BigInteger、BigDecimal、Personのようなユーザ定義クラス、Curl特有のRecordSetなどがあります。詳しくはこちら(いろいろなデータ型のサポート)を参照ください。
package sample;
/**
* data class sample
*/
public class Person implements java.io.Serializable {
private static final long serialVersionUID = -8122761322568223564L;
private String name;
private int age;
private boolean sex;
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;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
package sample;
/**
* sample exception
*/
public class SampleException extends Exception {
private static final long serialVersionUID = -9029774938234791120L;
public SampleException(String message) {
super(message);
}
}

