(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 1.0.1ソース