S2XmlRpc
概要
XML-RPCをS2から利用するためのライブラリです。
S2XmlRpcを使うことにより、クライアントもサーバーも、XML-RPCをまったく意識することなく、 通常のJavaのメソッド呼び出しと同じ感覚で、クライアント/サーバー型の分散処理を記述できます。
サーバー
サーバー側でサービスを提供するクラスは以下のようになります。
public interface Service { String hello(); } public class ServiceImpl implement Service { String hello() { return "Hello, World!"; } }
サーバー側のクラスはまったくのPOJOです。
このクラスをXML-RPCのサービスとして公開するために、web.xmlを以下のように設定します
<web-app> <servlet> <servlet-name>s2servlet</servlet-name> <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class> <init-param> <param-name>configPath</param-name> <param-value>app.dicon</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>s2xmlrpc</servlet-name> <servlet-class>org.seasar.remoting.xmlrpc.XmlRpcServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>s2xmlrpc</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
また、app.diconには次のような設定をします。
<components> <component name="Service" class="ServiceImpl" /> </components>
XmlRpcServletにより、POJOがXML-RPCのサービスとして公開されます。
クライアント
クライアント側の処理の記述は以下のようなコードとなります。
S2Container container = S2ContainerFactory.getContainer("app.dicon"); Service service = (Service) container.getComponent(Service.class); System.out.println(service.hello());
上記のように、クライアントのコードにはXML-RPCに依存した記述は一切出てきません。
XML-RPCに依存する部分はすべてdiconファイルに集約されます。
diconファイルは以下のようになります。
<components> <component class="Service"> <aspect> <component class="org.seasar.remoting.xmlrpc.XmlRpcInterceptor"> <arg>"http://localhost:8080/S2XmlRpc/Service"</arg> </component> </aspect> </component> </components>
XmlRpcInterceptorにより、Serviceインターフェースに対するメソッド呼び出しをXML-RPCプロトコルに変換し、 サービスを提供しているサーバーに送信します。
サーバーからの返信は、メソッドの戻り値としてクライアントに渡されます。