[mayaa-user:695] Re: handled exception, injectedNode is null

かとちん@mayaa-ml [E-MAIL ADDRESS DELETED]
2008年 10月 28日 (火) 21:02:03 JST


加藤です。
約10ヶ月経過していますが、この問題を最近ようやく解決できましたので、ご報告いたします。

この問題(injectionNode is null)が起きる原因は幾つかパターンがありますが、
荒井さんからいただいたケースでは以下が該当します。

・Mayaaが1.0になる前の頃からあった、mayaaテンプレート上での
 HTMLダイレクトインジェクション機能が使われているケース。

mayaaテンプレート上に直接インジェクション可能なHTMLノードを定義することが
できる機能があります。公開していない隠れキャラ(まさたかさんが初期に実装した
ということを私も最近はじめて知った次第)なのですが、以下のように簡便に、
elementプロセッサやattributeプロセッサなしでバインディングできてしまうという機能です。

-- HTML 側

    <span id="injection1" title="これは消えちゃう">hello!</span>


-- mayaaa 側

    <span m:id="injection1" style="color: gray">change!</span>


-- 出力結果

    <span style="color: gray">change!</span>


この機能が新井さんにいただいたmayaaファイル内にありました。
この機能以外にも、HTMLテンプレート上のinjection属性によるダイレクトインジェクションでも、
injectionNode is nullが発生するケースがありました。

これは、mayaa1.1で施工したパフォーマンスチューニングによって埋め込んでしまったバグで、
インジェクション情報が失われてシリアライズされてしまうことが根本原因でした。
一次ビルド時の完全なツリーは、二次ビルド時のノードツリーの最適化で、
辿れないツリーになるのですが、にもかかわらずシリアライズ処理はツリーが辿れるものとして
処理してしまっていたことが原因でした。

現在はシリアライズ処理を適切に修正して、injectionNode is nullにならないようになっています。
trunk上にコミット済みですが、数日以内には正式リリースしたいと思います。

対応が遅れに遅れて本当に申し訳ありませんでした。


> 加藤様、
> 
> お忙しい中返信ありがとうございます。
> 
> ソースを別途加藤様に送らせていただきます。
> 
> 取り急ぎ、
> 
> 荒井
> 
> On Fri, 11 Jan 2008 23:28:31 +0900
> 加藤太朗 <[E-MAIL ADDRESS DELETED]> wrote:
> 
>> 加藤です。
>>
>>> とりあえず前者のpageSerializeをfalseにするで対応したいと思います。
>> 確実ですがパフォーマンスも確実に悪くなります。
>> HTMLノードが大量にあるページでは、ビルド時間が掛かります。
>> シリアライズキャッシュを有効にしていないと重くなります。
>>
>>> こちら、tomcat(webコンテナ)を再起動したときには必ず発生していまして、
>> 再起動して必ず発生するのは、シリアライズキャッシュファイルから読み込むためです。
>> WEB-INF/.mayaaSpecCache というディレクトリに作られています。
>> warを作成する際には、war内にはキャッシュファイルが含まれていないからだと
>> 思われます。そのため、WEB-INF/.mayaaSpecCacheにキャッシュファイルが1つもないので、
>> 最初のうちは発生しないということになります。
>>
>>> その後は発生したのは初めてだったのですが、時間がたつにつれて発生する形な
>>> のでしょうか?
>> WEB-INF/.mayaaSpecCacheの中をクリアした上で、tomcat(webコンテナ)を再起動すれば
>> しばらくは発生しません。しかし一時的なものです。
>>
>> 問題のあるページを1回でも開くと、そのページ情報はメモリにしばらくキャッシュ
>> されますが、メモリには限界がありますので、GCの頻度が高くなるか、または、
>> しばらく誰もそのページをアクセスしなかったか、…のいずれかの理由で、
>> ページ情報はアンロードされます。その際にページ情報はシリアライズキャッシュファイルに
>> 保存します。
>>
>> 次回のアンロード済みの同ページにアクセスが来た際には、シリアライズキャッシュファイルを
>> 使って復元しようとしますので(テンプレートや.mayaaに変更がない限り)、そこで
>> はじめて問題が起きるというわけです。
>>
>> 一度起きればTomcatを再起動しても、「次回のアンロード済みの同ページにアクセス」と
>> 条件は一致しているので、発生しつづけるということになります。
>>
>> ただ、現物を見ていないので、私の経験した情報からの推測でしかありません。
>> シリアライズ・デシリアライズのタイミングについては間違いありませんが、
>> 問題が発生している原因については、私の認識している問題とことなるものかも
>> しれません。
>> できましたら、例外が発生したページの、テンプレートとmayaaファイルを見させていただくと、
>> mayaaの品質向上に役立てられる可能性があります。
>> 可能な範囲でご協力いただければ幸いです。
>>
>>
>>> 加藤様、
>>>
>>> お忙しい中、ご返信いただきありがとうございました。
>>>
>>> とりあえず前者のpageSerializeをfalseにするで対応したいと思います。
>>>
>>> こちら、tomcat(webコンテナ)を再起動したときには必ず発生していまして、
>>> その後は発生したのは初めてだったのですが、時間がたつにつれて発生する形な
>>> のでしょうか?
>>>
>>> 荒井
>>>
>>> On Fri, 11 Jan 2008 21:29:16 +0900
>>> 加藤太朗 <[E-MAIL ADDRESS DELETED]> wrote:
>>>
>>>> 加藤です。
>>>>
>>>> 根本理由は少し複雑で解決が難しく、手がつけられていないのですが、
>>>> 以下のいずれかで対策できます。
>>>>
>>>> ・ServiceProviderのpageSerializeをfalseにする(ただし性能が落ちます)。
>>>> ・テンプレートのルートノードを静的なものにする。
>>>>
>>>> 問題が起きるのはデシリアライズした結果が、動的なルートノードを
>>>> 復元できないことにあります。
>>>> このため、シリアライズキャッシュが無い初期状態では動作し、
>>>> キャッシュを使ってページを復元した時には問題が起きます。
>>>>
>>>> 問題の起きているテンプレートを差し支えない範囲で見せていただけると、
>>>> もう少し、具体的なアドバイスができると思います。
>>>>
>>>>
>>>>
>>>> --------------------------------------------------------->>
>>>> @author Taro KATO (Gluegent, Inc.)
>>>> {@link http://d.hatena.ne.jp/t-katochin/}
>>>>>> It is better to create than to learn. Creating is the essence of life.
>>>>
>>>> _______________________________________________
>>>> mayaa-user mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>>> _______________________________________________
>>> mayaa-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>>
>>
>> --------------------------------------------------------->>
>> @author Taro KATO (Gluegent, Inc.)
>> {@link http://d.hatena.ne.jp/t-katochin/}
>>>> It is better to create than to learn. Creating is the essence of life.
>>
>> _______________________________________________
>> mayaa-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>>
> 
> 平素よりお世話になっております、ユーロプランの荒井です。
> 
> お忙しい中大変恐縮ですが、何卒よろしくお願い致します。
> 今後とも、何卒よろしくお願い致します。
> 
> 取り急ぎ、
> 
> 荒井
> -----------------
> 有限会社 ユーロプラン
> CTO
> 荒井 哲三                       
> Tetsumi Arai
> 〒106-0031
> 東京都港区西麻布4-11-7-PH404
> t 050-5534-3199(Direct)
> t 03-5485-3166
> f 03-5485-3166
> m 090-4810-5445
> e [E-MAIL ADDRESS DELETED]
> www.europlan.co.jp
> 
> _______________________________________________
> mayaa-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/mayaa-user
> 
> 



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