S2ServiceInvoker
どうにも眠れないので書いてみた。100行未満のコードであっさりと動いた(笑)Flashから渡ってくるパラメータをコンポーネントに渡すのが面倒かな〜と思ったらOpenAMFは素晴らしかった!以下のように書いてComponentのInvokeはあっさりと終了。
if (container.hasComponentDef(serviceName)) { component = container.getComponent(serviceName); } else { component = container.getComponent(Class.forName(serviceName)); } BeanDesc beanDesc = BeanDescFactory.getBeanDesc(component.getClass()); result = beanDesc.invoke( component, methodName, request.getParameters().toArray());
ちょっとはしょってますけど、コードのコアはこんな感じ。いきなりコンポーネント取得しにいっちゃってるのはsupportsメソッドで既にコンポーネントが存在している事が保障されているから。パラメータの有無をチェックしてないとか、細かいエラー処理が抜けてるのもはしょってるからです。今はコンテナの生成を固定のパス(XML)でやってしまっているのでS2 V2.0.6で実装されるS2ContainerServletのリリースを待ちます。でも複数のプレゼンテーションフレームワークを使う場合、定義XMLがひとつだとごちゃごちゃになるかな?そこは<include path="">タグを使ってうまく定義ファイルを分割すればOKか。複数のプレゼンテーション技術を、明確にユースケースを分けられればOKなんですよね。例えばFlashとTapestryを使うとしたらFlashはユーザ側の画面で、Tapestryは管理機能みたいな画面とか。
そうそう今更ながら気づいたんですが、OpenAMFであきらかに使わないサービスはweb.xmlから削除しておいた方が気分的にリモーティングのパフォーマンスが良いです(笑)