(12)S2Flex2 ソースコードリーディング2

こんにちわ。

前回、RemotingGateway〜RemotingMessageProcessor〜MessageProcessorImplと読みました。

なかなか骨の折れる作業でして、タイトルをソースコードリーディングに変更して頑張ってます。

今回は、MessageProcessorImpl内から呼び出している部分から読んでみます。


org.seasar.flex2.rpc.remoting.message.processor.impl.MessageProcessorImplクラス内process()メソッドからスタート。


requestReadProcess()メソッドで、

org.seasar.flex2.rpc.remoting.message.io.reader.factory.MessageReaderFactory(Impl).createMessageReader()を実行

MessageReaderFactoryImpl.createMessageReader()内で、

org.seasar.flex2.rpc.remoting.message.io.reader.impl.AmfMessageReaderImpl.config()を実行

AmfMessageReaderImpl.config()内で、自クラスcreateMessage()メソッド実行

createMessage()で、org.seasar.flex2.rpc.remoting.message.data.factory.impl.MessageFactoryImpl.createRequestMessage()を実行

MessageFactoryImpl.createRequestMessage()内で、同クラスcreateMessage()呼び出し、requestMessageコンポーネント(Message)取得



で、最初のMessageProcessImpl.process()に戻って、

取得したMessageオブジェクトを次のrequestProcess()メソッドに渡す。

同MessageProcessImpl.requestProcess()にて

org.seasar.flex2.rpc.remoting.message.processor.impl.MessageHeaderProcessorImpl.processRequest()を実行。特に処理なし。

org.seasar.flex2.rpc.remoting.message.processor.impl.MessageBodyProcessorImpl.process()を実行

MessageBodyProcessorImpl.process()にて、

MessageFactoryImpl.createRequestMessage()実行(responseMessageコンポーネント(Message)取得)

Messageオブジェクト(requestMessage)のversion再セット?

requestMessageのbodiesの要素分processBody()実行。戻り値をresponseMessageにaddBody()。

processBody()にて、

ServiceInvokerChooserImpl.chooseInvoker(requestBody)実行。

org.seasar.flex2.rpc.remoting.service.impl.ServiceInvokerChooserImpl.chooseInvoker()にて、

invokers(RemotingServiceImvoker[])の配列分ループし、supports()メソッドで、マッチしたRemotingServiceInvokerインスタンスを返却。
マッチしなかった場合は、InvokerNotFoundRuntimeExceptionをスロー。

processBody()に戻って、

RemotingServiceInvoker.invoke()を実行。

AbstractRemotingServiceInvokerImpl.invoke()にて、

RemotingServiceLocator.getService()を実行。

RemotingServiceLocatorImpl.getService()にて、引数のコンポーネント名のコンポーネントを取得。

AbstractRemotingServiceInvokerImpl.invoke()に戻って、

メソッド名と引数のバリデーションを行って、

doInvoke()メソッドを実行。→invokeServiceMethod()メソッドを実行。

invokeServiceMethod()メソッドにて、

BeanDesc.invoke()を実行(対象のメソッドを実行)


MessageBodyProcessorImpl.processBody()に戻って、

responseTargetを取得し、

createResponseBody()を実行。

createResponseBody()にて、

MessageBodyFactoryImpl.createBody()を実行し、MessageBodyインスタンスを取得。


はぁぁぁぁ。疲れたぁぁぁ。

今回はここまで。


あれ?

バイナリのAMFをjavaに変換してんのはどこ????

見過ごしたみたいです↓↓。次回探してみます。


でも、対象のメソッドを実行させるところ(invoke()してるところ)は見ることができました。



次回は、S2Flex2 ソースコードリーディング3です。

引用:
S2Flex2 1.0.1ソース