[Seasar-user:11893] Re: [S2Axis2/S2Container] SimpleComponentDef#getMetaDefSizeを通り,例外が発生するのですが.

Applied_MATSUDA Masaaki [E-MAIL ADDRESS DELETED]
2007年 12月 3日 (月) 21:11:24 JST


TigerCatです.お世話になっております.


本件,コミッタの菅谷さんにはさきほど報告したところではあり
ますが,たかのり様はじめ各位のお手数になっていると大変申し
訳ないので,以下とりいそぎお伝えいたします.


素人目ではありますが,問題の根源は,S2Container-framework
の中にある,ポートレット環境用の外部コンテキストがコンテナ
登録される際に,きちんと登録されていないっぽいところでは
ないかなと.この問題により,ポートレット環境用の外部コン
テキストがらみが SimpleComponentDef のインスタンスになって
しまい,たとえば今回のように S2Axis2 などが,getMetaDefSize()
を行おうとすると UnsupportedOperationException を吐いて
しまいます.

ですので,S2Axis2 以外でも,ポートレット環境で Teeda を
使うような運用では,同様な現象が発生する可能性があります.


いかがわしいデバッグ用コードをたくさん追加して,判明した
修正のポイントは,

org.seasar.framework.container.external.portlet.PortletExtendedExternalContextComponentDefRegister
クラスの
        impl.register(new PortletRequestComponentDef());
        impl.register(new PortletResponseComponentDef());
        impl.register(new PortletSessionComponentDef());
        impl.register(new PortletContextComponentDef());
部分を
        impl.register0(new PortletRequestComponentDef());
        impl.register0(new PortletResponseComponentDef());
        impl.register0(new PortletSessionComponentDef());
        impl.register0(new PortletContextComponentDef());
に修正.


org.seasar.framework.container.external.portlet.PortletExternalContextComponentDefRegister
クラスの
        impl.register(new PortletRequestComponentDef());
        impl.register(new PortletResponseComponentDef());
        impl.register(new PortletSessionComponentDef());
        impl.register(new PortletContextComponentDef());
部分を
        impl.register0(new PortletRequestComponentDef());
        impl.register0(new PortletResponseComponentDef());
        impl.register0(new PortletSessionComponentDef());
        impl.register0(new PortletContextComponentDef());
に修正.
という感じではないかと.

S2Container-framework-2.4.17 のソースコードに対して上記修正
を行い,本件の事象である S2Axis2 の起動(リモートコンポーネン
トのディプロイ)が正しく完了することと,いくつかの既存ポート
レット(Teedaベース)が正しく動くところまでは確認した次第です.

あくまで素人的報告ですので,何卒検証いただければと思います.


んで,もしよろしければ2.4.18ではなくて,2.4.17ベースの修正
リリースがいただけませんでしょうか〜〜〜?!という希望も
持っていたりします.
既存の古いポートレットアプリを,おそらく2.4.17までは上げる
覚悟はあるのですが,2.4.18へは使っているTeedaやKuinaDao等
のいわゆる「その他影響」のインパクトが大きくてチト躊躇です.


以上,ご報告でした.
どうもお騒がせしました&よろしくお願いいたします.



--Applied_MATSUDA Masaaki<[E-MAIL ADDRESS DELETED]> wrote:
>TigerCatです.
>
>
>たかのり様,ご返答いただきありがとうございます.
>
>
>
>>> org.seasar.remoting.axis2.deployer.AxisDeployer クラスの
>>> getMetaDef メソッドの中で,metaDefSupport.getMetaDefSize()
>>> しているところがあるのですが,
>>> これを実行すると実際には
>>> org.seasar.framework.container.impl.SimpleComponentDef#getMetaDefSize
>>> を呼び出し,そのメソッドの実装であるただUnsupportedOperationException
>>> を投げるだけの処理に陥るパターンというのは,
>>> どういう状況で発生するのでしょうか?
>>
>>上記の情報だけでは、原因が分からなかったのですが、
>>diconには、どのような定義をしていますでしょうか?
>
>えっとですね,S2Axis2が絡みそうなdiconはこんなふうです.
>多分問題ないんです.(ちょっと下に引用)
>S2ContainerServlet を使うぶんには問題ないですし,
>TeedaServlet を使うぶんにも問題ないんですが,
>PortletExtendedTeedaServlet を使うと例のExceptionな
>わけなのです.
>ということで,AxisDeployerクラスのgetMetaDefメソッド
>の中で,SimpleComponentDefのインスタンスを処理して
>しまうと,必ずUnsupportedOperationExceptionに遭遇
>してしまうのは明らかなのですが,そのような状況になる
>のはどんな原因があるのかなー,と追いかけている次第
>でございます・・・
>
>===== app.dicon =====
>
><?xml version="1.0" encoding="UTF-8"?>
><!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
>	"http://www.seasar.org/dtd/components24.dtd">
><components>
>	<include path="convention.dicon"/>
>	<include path="aop.dicon"/>
>	<include path="app_aop.dicon"/>
>	<include path="teedaExtension.dicon"/>
>	<include path="dxo.dicon"/>
>	<include path="s2axis2.dicon"/>
>	<include path="s2axis2Deploy.dicon"/>
></components>
>
>
>===== s2Axis2Deploy.dicon =====
>
><?xml version="1.0" encoding="UTF-8"?>
><!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
>	"http://www.seasar.org/dtd/components24.dtd">
><components>
>    <component name="Echo2Service"
>class="s2axis.example.service.impl.Echo2ServiceImpl">
>        <meta name="axis-service"/>
>    </component>
></components>
>
>
>>> S2Axis2 0.3.0 とTeeda(1.0.8/1.0.11-SP1どちらでも)と
>>> S2Container(2.0.45/2.0.47どちらでも)の組み合わせです.
>>
>>S2Containerのバージョンは、
>>2.4.15/2.4.17ということですかね?
>
>あ!すみません!!
>すぐ訂正するつもりだったのですが金曜日だったので
>呑み会になってしまい・・・(略
>2.4.15/2.4.17 のことです.
>
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user



Seasar-user メーリングリストの案内