[mayaa-user:989] Re: pageSerializeを有効にすると、時々裏で例外が発生します

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2013年 9月 2日 (月) 13:52:48 JST


石上です。
ご回答ありがとうございます。

org.seasar.mayaa.impl.engine.specification.serialize.SerializeThread.run()
で
synchronized(specification) {
があるので一見すると競合は発生しないように思えますが、
specificationを多段化が原因で発生しているのかもしれませんね。
(中間のSpecificationが別のページでも使われている等)

もしこの例外を無視したければ、
SpecificationImplのserializeをOverrideするのが良いのではないかと思います。
この時、例外時は以下のようにリトライする対策を行うことには意味がありますでしょうか?

for (int i = 0; i < RETRY_MAX; i++) {
  try {
    super.serialize();
    break;
  } catch (ConcurrentModificationException e) {
    continue;
  }
}

細かいところで申し訳ありません。


2013年9月1日 20:19 suga <ko.suga @ gmail.com>:
> suga です。
>
> 同じファイルに対して出続けるということでなければ、ユーザへの実害は無いと思います。
>
> 現象としてはおそらく同じSpecificationImplに対するビルドが瞬間的に複数回実行されて、
> 古いものをdeleteする処理とSerializeThreadでのserializeが同時に、というところだと思います。
>
> --
> suga ( ko.suga @ gmail.com )
>
>
> 2013/8/31 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>:
>> 石上です。
>> いつもお世話になっております。
>>
>> 既知の問題であったら申し訳ありません。
>> pageSerialize機能を有効にした状態で、
>> ページ遷移を繰り返していると下記のExceptionが時々ログ上に現れます。
>>
>> 自分のアプリケーションが起因しているかもしれませんが、
>> スタックトレースには、Java標準とMayaaのクラスしか現れません。
>>
>> おそらく、ページにシリアライズ処理が競合し
>> 実際はシリアライズが一回行われない程度で、
>> ユーザーには影響がほぼないのではないかと思います。
>> しかし、念のため、問題ないか確認したいことと、
>> 問題ないのであったら、ログファイルにスタックトレースを出力せず、
>> 綺麗にしたいと思っています。
>>
>> JDK 1.7.0、Tomcat7.0で発生しています。
>>
>> よろしくお願い致します。
>>
>> Exception in thread "serializeThread-0"
>> java.util.ConcurrentModificationException
>> at java.util.ArrayList.writeObject(ArrayList.java:713)
>> at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
>> at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438)
>> at org.seasar.mayaa.impl.engine.processor.TemplateProcessorSupport.writeObject(TemplateProcessorSupport.java:254)
>> at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
>> at java.util.ArrayList.writeObject(ArrayList.java:710)
>> at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
>> at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438)
>> at org.seasar.mayaa.impl.engine.processor.TemplateProcessorSupport.writeObject(TemplateProcessorSupport.java:254)
>> at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
>> at java.util.ArrayList.writeObject(ArrayList.java:710)
>> at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
>> at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438)
>> at org.seasar.mayaa.impl.engine.processor.TemplateProcessorSupport.writeObject(TemplateProcessorSupport.java:254)
>> at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
>> at java.util.ArrayList.writeObject(ArrayList.java:710)
>> at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
>> at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438)
>> at org.seasar.mayaa.impl.engine.processor.TemplateProcessorSupport.writeObject(TemplateProcessorSupport.java:254)
>> at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
>> at java.util.ArrayList.writeObject(ArrayList.java:710)
>> at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
>> at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438)
>> at org.seasar.mayaa.impl.engine.processor.TemplateProcessorSupport.writeObject(TemplateProcessorSupport.java:254)
>> at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
>> at java.util.ArrayList.writeObject(ArrayList.java:710)
>> at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
>> at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438)
>> at org.seasar.mayaa.impl.engine.processor.TemplateProcessorSupport.writeObject(TemplateProcessorSupport.java:254)
>> at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
>> at java.util.ArrayList.writeObject(ArrayList.java:710)
>> at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
>> at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:438)
>> at org.seasar.mayaa.impl.engine.TemplateImpl.writeObject(TemplateImpl.java:325)
>> at sun.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>> at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
>> at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
>> at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
>> at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
>> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
>> at org.seasar.mayaa.impl.engine.specification.SpecificationImpl.serialize(SpecificationImpl.java:302)
>> at org.seasar.mayaa.impl.engine.specification.serialize.SerializeThread.run(SerializeThread.java:81)
>>
>> --
>> Susumu ISHIGAMI
>> susumu.ishigami @ gmail.com
>> _______________________________________________
>> mayaa-user mailing list
>> mayaa-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/mayaa-user
> _______________________________________________
> mayaa-user mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user



-- 
Susumu ISHIGAMI
susumu.ishigami @ gmail.com


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