« svndumpfilter&mkdir | Main | Teeda&S2XML-RPC(2) »

2007.09.25

Teeda&S2XML-RPC(1)

 Teedaの環境にS2XML-RPCを追加してみました。通常はブラウザからのアクセスを前提としていながら(Teeda側)、専用のクライアントからのアクセスも受け付ける(XML-RPC)といったようなアプリケーションを想定。

 使用したバージョンは、S2.4.17 + Teeda1.0.11-RC2-SNAPSHOT + S2XML-RPC0.3.0 + S2Remoting1.1.0 + Apache XML-RPC 3.1の組み合わせ。各アーカイブファイルに含まれているs2xmlrpc-0.3.0.jars2remoting-1.1.0.jarxmlrpc-client-3.1.jarxmlrpc-common-3.1.jarxmlrpc-server-3.1.jarws-commons-util-1.0.2.jarの6つのjarファイルを、webapps用のクラスパスに追加。実際には不要なjarファイルもあるのかもしれませんが、精査は行っていません(^^;

 S2XML-RPC 基本的な使い方では、org.seasar.framework.container.servlet.S2ContainerServletorg.seasar.remoting.xmlrpc.servlet.S2XmlRpcServletをロードする設定例が記載されていますが、Teedaの環境ではorg.seasar.teeda.core.webapp.TeedaServletが既にロードされています。

 クラスの継承関係を調べてみると、TeedaServletはS2ContainerServletを継承しているので、TeedaServletのロードでも問題ないはず・・・ってことで、Teedaを動作させているweb.xmlに対して追加したのは以下の内容。S2XmlRpcServletはS2ContainerServletより後に起動する必要があるとのことで、load-on-startup属性は指定していません(というか、設定例のページのまんまなのですが)。もしかしたら、/s2servletに対するマッピングは不要なのかもしれません。

<servlet>
 <servlet-name>XmlRpcServlet</servlet-name>
 <servlet-class>org.seasar.remoting.xmlrpc.servlet.S2XmlRpcServlet</servlet-class>
  <init-param>
  <param-name>enabledForExtensions</param-name>
  <param-value>true</param-value>
 </init-param>
</servlet>

<servlet-mapping>
 <servlet-name>teedaServlet</servlet-name>
 <url-pattern>/s2servlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>XmlRpcServlet</servlet-name>
 <url-pattern>/xmlrpc</url-pattern>
</servlet-mapping>

 XML-RPCで公開するためのクラスとして以下のinterfaceおよびclassを作成。

package test3.test;
public interface RpcTest {
 public String getResult1(String a, int b);
 public String[] getResult2(String a, int b);
}

package test3.test;
public interface RpcTest2 {
 public int multiply(int a, int b);
 public int add(int a, int b);
}

package test3.test.impl;
import test3.test.RpcTest;
public class RpcTestImpl implements RpcTest {
 public String getResult1(String a, int b) {
  StringBuilder result = new StringBuilder();
  for (int i=0; i<b; i++) {
   result.append(a).append(',');
  }
  return result.toString();
 }
 public String[] getResult2(String a, int b) {
  String[] result = new String[b];
  for (int i=0; i<b; i++) {
   result[i] = a + "-" + Integer.toString(i);
  }
  return result;
 }
}

package test3.test.impl;
import test3.test.RpcTest2;
public class RpcTest2Impl implements RpcTest2 {
 public int add(int a, int b) {
  return a+b;
 }
 public int multiply(int a, int b) {
  return a*b;
 }
}

XML-RPCで公開するコンポーネントを登録するためのdiconファイルを作成(test.diconという名前で保存)。

<components>
 <component name="test" class="test3.test.impl.RpcTestImpl">
  <meta name="xmlrpc" />
 </component>
 <component name="test2" class="test3.test.impl.RpcTest2Impl">
  <meta name="xmlrpc" />
 </component>
</components>

XML-RPCを公開するため、app.diconファイルを修正。以下の2行をapp.diconに追加。

<include path="s2xmlrpc.dicon"/>
<include path="test.dicon" />

サーバ側の準備はここまで。これに対するアクセスのテスト(クライアント側の作成)はまた後日・・・。

|

« svndumpfilter&mkdir | Main | Teeda&S2XML-RPC(2) »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/16473432

Listed below are links to weblogs that reference Teeda&S2XML-RPC(1):

« svndumpfilter&mkdir | Main | Teeda&S2XML-RPC(2) »