S2Remoting実装トライアル
仕事でS2Remotingを使用したいので、
ひがやすおさんのS2Remotingのイメージを参考にサンプル実装を試みる。
情報ソースはこちら。http://d.hatena.ne.jp/higayasuo/20040317#1079479707
ConnectorAdvice、Connector、Adaptorを作成すべし、ということで、
まずは、その連携イメージから。
ConnectorAdviceはConnectorに対し、コンポーネントの名前、メソッド名、引数を 渡して処理してもらいます。
ConnectorはAdaptorに対し、コンポーネントの名前、メソッド名、引数を 渡して処理してもらいます。
Adaptorは、自分が登録されているコンテナから指定されたコンポーネントを 取得し、seasar.beans.BeanDesc経由でメソッドを実行します。
ということなので、何も考えずに
ConnectorAdvice.invoke()->Connector.invoke()->Adaptor.invoke()という流れでしょうか。
#Adaptor.invoke()がリモートメソッドになる。
早速、ConnectorAdviceから。
1. ConnectorAdvice(S2RemotingInterceptor)
ちなみにS2のソースを見るとアスペクトの名称は、今はAdviceではなく、
Interceptorのようなので、名称はS2RemotingInterceptorとしてみる。
package sample.seasar.remoting.interceptor; import org.aopalliance.intercept.MethodInvocation; import org.seasar.framework.aop.interceptors.AbstractInterceptor; import sample.seasar.remoting.Connector; /** * @author murata */ public class S2RemotingInterceptor extends AbstractInterceptor { private Connector connector; private String componentName; /** * @param connector * The connector to set. */ public void setConnector(Connector connector) { this.connector = connector; } /** * @param componentName * The componentName to set. */ public void setComponentName(String componentName) { this.componentName = componentName; } /* * (non-Javadoc) * * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation) */ public Object invoke(MethodInvocation invocation) throws Throwable { String methodName = invocation.getMethod().getName(); Object[] args = invocation.getArguments(); return this.connector.invoke(this.componentName, methodName, args); } }