サンプルコードのインポート
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); } }