[mayaa-user:1008] Re: サーバー再起動時等にUnsupportedOperationException

suga [E-MAIL ADDRESS DELETED]
2014年 2月 9日 (日) 21:07:31 JST


suga です。

2014-02-08 20:38 GMT+09:00 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>:
> _defaultSpecificationがnullの時に起きているのではないかと思います。
> _defaultSpecificationがnullになるのは、
> 起動直後かreleaseDefaultSpecification()が呼び出された後ではないかと思います。

synchronizedにしてしまうとパフォーマンスに影響しますので、
対応方法を検討します。

--
suga ( ko.suga @ gmail.com )


2014-02-08 20:38 GMT+09:00 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>:
> 石上です
>
> いつもお世話になっております。
> Mayaaを使用したサービス運用中に下記のExceptionが発生しました。
>
>
> java.lang.UnsupportedOperationException
> at org.seasar.mayaa.impl.engine.EngineImpl.iterateChildNode(EngineImpl.java:331)
> at org.seasar.mayaa.impl.engine.specification.SpecificationUtil.getMayaaNode(SpecificationUtil.java:129)
> at org.seasar.mayaa.impl.engine.specification.SpecificationUtil.execEvent(SpecificationUtil.java:212)
> at (独自クラスのため非表示)→実質的にはPageImpl.java202行目:
>   SpecificationUtil.execEvent(engine, QM_AFTER_RENDER_PAGE);
> at org.seasar.mayaa.impl.engine.EngineImpl.doPageService(EngineImpl.java:373)
> at org.seasar.mayaa.impl.engine.EngineImpl.doService(EngineImpl.java:481)
> at org.seasar.mayaa.impl.MayaaServlet.doService(MayaaServlet.java:107)
> at org.seasar.mayaa.impl.MayaaServlet.doGet(MayaaServlet.java:90)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>> 以下省略
>
>
> ソースを追ってみると、
> EngineImpl.javaに下記の記載があり
>
>     public Iterator iterateChildNode() {
>         if (_defaultSpecification != null) {
>             return _defaultSpecification.iterateChildNode();
>         }
>         throw new UnsupportedOperationException();
>     }
>
> _defaultSpecificationがnullの時に起きているのではないかと思います。
> _defaultSpecificationがnullになるのは、
> 起動直後かreleaseDefaultSpecification()が呼び出された後ではないかと思います。
>
> 通常、releaseDefaultSpecificationはsynchronizedメソッドか、
> synchronized(this)によって同期化されていますが、
> エラーが起きた
> iterateChildNode
> でだけは同期化を行っていません。
>
> おそらくこのメソッドをsynchronizedにすれば発生しないのではないかと思いますが、
> EngineImplはシングルトンだと思いますので、これを同期化したらパフォーマンスに影響するかも
> しれません。
>
> ほぼイレギュラーケースですので、nullだったらリトライをするか、
> _defaultSpecificationをvolatileにしてダブルチェックするなどをご検討頂けませんでしょうか。
>
> 私も本番環境で実際にエラーを見たわけではないので、
> 本当にレアケースなのではないかと思いますが、
> 日々運用していると時々見かけます。
> _______________________________________________
> mayaa-user mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user


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