S2Hessianを使うと、Seasar2のコンポーネントをWSDLなしにクライアントから簡単に呼び出
す事ができるようになります。JAVAでRich
Clientを作る時にはいちいちWSDLを設定する必要がなく、また簡易なプロトコルですのでパフォーマンスも良いと思います。
S2Hessian.Netを使用すれば、C#でSmart Clientを書いて、そこから簡単にSeasar2のコンポーネントを呼び出せます。
S2と同様にJDK1.4以上が必要です。サンプルは、TomcatとTomcat
Pluginを使うことを前提にしています。あらかじめインストールして置いてください。s2hessianとs2hessian-
clientをDownloadし、解凍してできた
s2hessianディレクトリとs2hessian-clientをそれぞれEclipseにインポートしてください。
なおhessian-3.0.8.jarもlibにいれてありますが、下記URLからDownload出来ます。
http://www.caucho.com/hessian/download/hessian-3.0.8.jar
DownLoad
s2hessian
s2hessian-
client
まず
Serverとして、s2hessianを起動します。この場合Projectを右クリックし、Tomcatプロジェクトのメニューから、Tomcatコ
ンテキストの更新をクリックしてください。
Tomcatを起動し、s2hessian-clientの
org.seasar.s2hessian.example.TestAOP を実行すると31 Sampleが走ります。
Serverの設定
web.xmlに下記設定がされています。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app> <servlet> <servlet-name>s2hessian</servlet-name> <servlet-class>org.seasar.s2hessian.S2HessianServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet> <servlet-name>s2burlap</servlet-name> <servlet-class>org.seasar.s2hessian.S2BurlapServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet> <servlet-name>s2servlet</servlet-name> <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>configPath</param-name> <param-value>app.dicon</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet>
<servlet-mapping> <servlet-name>s2hessian</servlet-name> <url-pattern>/s2h/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>s2burlap</servlet-name> <url-pattern>/s2b/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>s2servlet</servlet-name> <url-pattern>/s2servlet</url-pattern> </servlet-mapping> </web-app>
ここで、通常使用される s2sevletに加え、s2hession(必要により、s2burlap)が設定されています。
次に、app.dicon(あるいは、それから呼び出されているdicon)に、公開するComponentを登録します。公開するものには、meta情
報として、「s2hessian」が指定される事が必要です。
Serverには、たとえば下記のInterfaceとImpl Programがあるとします。
SeasarTest
〜略〜 public interface SeasarTest { public int intPlus(int i,int j); public boolean boolTest(boolean b); public long longPlus(long x,long y); public double doublePlus(double x,double y); public String dateCheck1(Date d); public Date dateCheck2(); 〜略〜 }
SeasarTestImpl
〜略〜 public class SeasarTestImpl implements SeasarTest { public int intPlus(int i, int j) {
return i+j; } public boolean boolTest(boolean b){ return !b; } public long longPlus(long x, long y) {
return x+y; } public double doublePlus(double x, double y) {
return x+y; }
public String dateCheck1(Date d) {
int m = d.getMonth(); int dd = d.getDate(); int h=d.getHours(); int mm=d.getMinutes(); String dds=d.toLocaleString(); return dds; } public String stringCat(String s1, String s2) { return s1+s2; } public int[] intArray(int[] in) {
return in; } public Hashtable hashTable(Hashtable ht) { return ht; } public ArrayList arrayList(ArrayList ar){ return ar; } public Date dateCheck2() { Date nd=new Date(); return nd; } 〜略〜 }
app.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="test" class="org.seasar.s2hessian.example.SeasarTestImpl"> <meta name="s2hessian"/> </component> </components>
Clientの設定
Clientのapp.diconには、下記の様な設定がされています。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="remoting" class="org.seasar.remoting.common.interceptor.RemotingInterceptor"/> <component class="org.seasar.remoting.caucho.client.HessianConnector"> <property name="baseURL">new java.net.URL("http://localhost:8080/s2hessian/s2h/")</property> </component> <component name="test" class="org.seasar.s2hessian.example.SeasarTest"> <aspect>remoting</aspect> </component> </components>
下記のCodeがClientのSampleです。
org.seasar.s2hessian.example.TestAop
〜略〜 public class TestAop {
public static void main(String[] args) { S2Container container = S2ContainerFactory.create("app.dicon"); SeasarTest seasarTest = (SeasarTest)container.getComponent("test"); /* Test1 */ int ires=seasarTest.intPlus(30,50); System.out.println("Test1 intPlus result: " +ires); /* Test2 */ boolean bres=seasarTest.boolTest(true); System.out.println("Test2 boolTest result: " +bres);
〜略〜
SeasarTest
public interface SeasarTest { public int intPlus(int i,int j); public boolean boolTest(boolean b); public long longPlus(long x,long y); public double doublePlus(double x,double y); public String dateCheck1(Date d); public Date dateCheck2(); public String stringCat(String s1,String s2); public int[] intArray(int[] in); public Hashtable hashTable(Hashtable ht); public ArrayList arrayList(ArrayList ar); public MyObject myObjectTest(MyObject mx); public MyObject2 myObjectTest2(MyObject2 mo2); }
SeasarTestImpl
public class SeasarTestImpl implements SeasarTest { public int intPlus(int i, int j) { return i+j; } public boolean boolTest(boolean b){ return !b; } public long longPlus(long x, long y) { return x+y; }public double doublePlus(double x, double y) { return x+y; }public String dateCheck1(Date d) { int m = d.getMonth(); int dd = d.getDate(); int h=d.getHours(); int mm=d.getMinutes(); String dds=d.toLocaleString(); return dds; }public String stringCat(String s1, String s2) { return s1+s2; } public int[] intArray(int[] in) { return in; }public Hashtable hashTable(Hashtable ht) { return ht; } public ArrayList arrayList(ArrayList ar){ return ar; } public Date dateCheck2() { Date nd=new Date(); return nd; } public MyObject myObjectTest(MyObject mx) { return mx; } public MyObject2 myObjectTest2(MyObject2 mo2) { MyObject2 mores= new MyObject2(); MyObject mo= new MyObject(); mo=mo2.getMo1(); mores.setMo1(mo); return mores;} } }
|