ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2Remoting

当初、私が考えていたのはこんな感じ。
登場人物

  • RemotingInterceptor
    • クライアントからの呼び出しをRemotingConnectorの呼び出しに変換する。
  • RemotingConnector
  • RemotingGateway
    • サーバサイドで動作しRemotingConnectorからリクエストを受け付けレスポンスを返す。
    • 主にHTTPを処理するサーブレット版とソケットを処理するソケットリスナー版がある。
    • プロトコルごとに実装
    • プロトコルに応じた処理をして、RemotingInvokerを呼び出す。
  • ComponentInvoker
    • RemotingGatewayからの呼び出しをS2Container上のコンポーネントの呼び出しに変換する。
    • ComponentInvoker自身、S2Container上に登録されている。
    • ComponentInvokerはS2本体に持たせた方が(たぶん)良い。
    • メソッド
      • invoke(String componentName, String methodName, Object[] args) : Object

リモートのオブジェクトごとにURLを設定するのは、gatewayURLの設定が分散するので出来れば避けたいと思ってます。
RMIプロトコルに使う場合、最初にサーバからスタブをソケット経由で取得してRemotingConnectorでキャッシュし、個々の呼び出しはスタブを呼び出すようにしたほうが、良いと思います。余分なRMIRegistryもいりません。
S1のorg.seasar.serverにあるMBeanProxy、RMIConnector、AbstractSocketService、RMIAdapter、RMIAdapterImpl、RMIAdapterServiceが参考になると思います。