クライアント側の設定
クライアント側で必要な設定は次の通りです.
- コンポーネントのインタフェースにS2Remotingのインターセプタを適用する.
- S2RMIのコネクタを設定する.
SMART deployを使う場合
S2RMIはSeasar2.4で導入されたSMART deployに対応しています. SMART deployを利用すると設定を簡素化することができます.
開発時にはSMART deployの一つであるHOT deployを利用することができます. HOT deployを利用すると,クライアントがWebアプリケーションの場合にWebコンテナを起動したまま クライアントのソースを変更してそのままテストすることができます.
以下ではS2RMIサンプルのクライアント側に含まれる設定ファイルについて説明します.
s2rmi-examples-client/src/main/resources 以下にあります.
s2container.dicon
SMART deployを利用するにはs2container.diconが必要です.
S2RMI固有の設定は必要ありません.
以下はenv.txtでHOT deploy / COOL deployを切り替えられるようにした設定の例です.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components xmlns:xi="http://www.w3.org/2001/XInclude"> <include condition="#ENV != 'ut'" path="cooldeploy.dicon"/> <include condition="#ENV == 'ut'" path="hotdeploy.dicon"/> </components>
convention.dicon
convention.diconにはS2RemotingおよびS2RMIのルートパッケージを設定します.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components xmlns:xi="http://www.w3.org/2001/XInclude">
<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
<!-- アプリケーション固有のルートパッケージ -->
<initMethod name="addRootPackageName">
<arg>"examples.rmi"</arg>
</initMethod>
<!-- S2Remoting のルートパッケージ -->
<initMethod name="addRootPackageName">
<arg>"org.seasar.remoting.common"</arg>
</initMethod>
<!-- S2RMI のルートパッケージ -->
<initMethod name="addRootPackageName">
<arg>"org.seasar.remoting.rmi"</arg>
</initMethod>
</component>
</components>
creator.dicon
creator.diconにはサービスのCreatorに加えて,S2Remotingのインターセプタおよび
S2RMIのコネクタをコンポーネントとして登録するためのCreatorを設定します.
S2RMIのサンプルではヘルパーも使用しているため,そのCreatorも設定しています.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components xmlns:xi="http://www.w3.org/2001/XInclude"> <include path="convention.dicon"/> <include path="customizer.dicon"/> <component class="org.seasar.framework.container.creator.HelperCreator"/> <component class="org.seasar.framework.container.creator.InterceptorCreator"/> <component class="org.seasar.framework.container.creator.ServiceCreator"/> <component class="org.seasar.remoting.common.creator.ConnectorCreator"/> </components>
通常のアプリケーションではより多くのCreatorが必要になります.
Seasar2の配布ファイルに含まれるcreator.diconには
通常のアプリケーションで必要になるCreatorが設定済みなので,そちらをベースに
S2RMIのConnectorCreatorを追加するのがいいでしょう.
customizer.dicon
customizer.diconにはサービスに加えてS2RemotingのインターセプタおよびS2RMIのコネクタの
コンポーネント定義をカスタマイズするためのCustomizerを設定します.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components xmlns:xi="http://www.w3.org/2001/XInclude">
<!-- S2RMI 用カスタマイザのインクルード -->
<include path="s2rmi-customizer.dicon"/>
<!-- S2RMI コネクタのカスタマイザ -->
<component name="connectorCustomizer" class="org.seasar.remoting.rmi.customizer.RMIConnectorCustomizer">
<!-- RMI 接続するホストやポート番号はここで設定します.-->
<property name="baseURLAsString">"rmi://localhost:1108/"</property>
</component>
</components>
s2rmi-customizer.diconはその中でdefault-customizer.diconを
インクルードしています.
customizer.diconの中でs2rmi-customizer.diconより前に
default-customizer.diconをインクルードしないようにしてください.
RMIで接続するホストやポート番号はRMIConnectorCustomizerの
baseURLAsStringプロパティにURL形式で設定します.
s2rmi-customizer.diconはその中でサービスのカスタマイザを設定します.
アプリケーションでサービスのカスタマイザを変更したい場合は以下を参考に
customizer.diconの中でサービスのカスタマイザを定義してください.
<component name="serviceCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>myCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>rmiServiceCustomizer</arg>
</initMethod>
</component>
s2rmi-customizer.diconはその中でインターセプタのカスタマイザを設定します.
アプリケーションでインターセプタのカスタマイザを変更したい場合は以下を参考に
customizer.diconの中でインターセプタのカスタマイザを定義してください.
<component name="interceptorCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>myCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>rmiInterceptorCustomizer</arg>
</initMethod>
</component>
SMART deployを使わない場合
クライアント側のdiconファイルに定義すべきコンポーネントは次の通りです.
- サービスのインタフェース
- org.seasar.remoting.common.interceptor.RemotingInterceptor
- org.seasar.remoting.rmi.connector.RMIConnector
リモートオブジェクトは通常サービスとしてインタフェースと実装クラスを作成します. クライアント側ではサービスのインタフェースのみS2コンテナに定義します.
clinet.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component name="helloService"
class="examples.rmi.service.HelloService">
<aspect>remotingInterceptor</aspect>
</component>
<component name="remotingInterceptor"
class="org.seasar.remoting.common.interceptor.RemotingInterceptor"/>
<component class="org.seasar.remoting.rmi.connector.impl.RMIConnectorImpl">
<property name="baseURLAsString">"rmi://localhost:1108/"</property>
<initMethod name="lookup"/>
</component>
</components>
RMIで説属するホストとポート番号はRMIConnectorImplの
baseURLAsStringプロパティで設定します.
