[Seasar-user:15244] forEach + ダイナミックバリデータでConcurrentModificationExceptionが発生。

上野勝広 [E-MAIL ADDRESS DELETED]
2008年 8月 1日 (金) 08:39:29 JST


初めまして、上野と申します。

現在、forEach+ダイナミックバリデータで下記のようなエラーが発生し、困っています。 


環境
seasar 2.4.24
teeda 1.0.13

スタックトレース
java.util.ConcurrentModificationException
java.util.LinkedList$ListItr#checkForComodification (null)
java.util.LinkedList$ListItr#next (null)
javax.faces.internal.ValidatorChain#validate (ValidatorChain.java#56)
edi.validator.MyCustomStringValidator#validate 
(MyCustomStringValidator.java#29)
javax.faces.component.UIInput#validateForExtension (UIInput.java#394)
javax.faces.component.UIInput#validateValue (UIInput.java#374)
javax.faces.component.UIInput#validate (UIInput.java#279)
javax.faces.component.UIInput#executeValidate (UIInput.java#489)
javax.faces.component.UIInput#processValidators (UIInput.java#201)
javax.faces.component.UIComponentBase#processValidators 
(UIComponentBase.java#434)
org.seasar.teeda.extension.component.TForEach#processValidatorsAllRows 
(TForEach.java#241)
org.seasar.teeda.extension.component.TForEach#processValidators 
(TForEach.java#228)
javax.faces.component.ComponentUtil_#processAppropriatePhaseAction 
(ComponentUtil_.java#49)
javax.faces.component.UIForm#processAppropriateAction (UIForm.java#85) 
javax.faces.component.UIForm#processValidators (UIForm.java#73)
javax.faces.component.UIComponentBase#processValidators 
(UIComponentBase.java#434)
javax.faces.component.UIComponentBase#processValidators 
(UIComponentBase.java#434)
javax.faces.component.UIComponentBase#processValidators 
(UIComponentBase.java#434)
javax.faces.component.UIViewRoot#processValidators (UIViewRoot.java#104) 
org.seasar.teeda.core.lifecycle.impl.ProcessValidationsPhase#executePhase 
(ProcessValidationsPhase.java#30)
org.seasar.teeda.core.lifecycle.AbstractPhase#execute 
(AbstractPhase.java#57)
org.seasar.teeda.core.lifecycle.LifecycleImpl#execute 
(LifecycleImpl.java#86)

発生箇所?
http://teeda.seasar.org/1.0/teeda-core/en/cobertura/javax.faces.internal.ValidatorChain.html

データの件数は1件〜100件となります。再現性は見つかっておりません。
ある特定の画面のみ発生しますが、その画面はユーザの操作が多いので、他の画面でも発生するかもしれません。
現在の所、実行環境がマルチCPUだと発生して、シングルCPUだと発生していません。

また、5行目にある"MyCustomStringValidator.java"は自作のバリデータで、2つの自作バリデータをValidatorChainしています。
ページクラスの変数にアノテーションで指定してもエラーは発生しませんし、同様に他画面でダイナミックバリデータの中で使用してもエラーは起きません。
ConcurrentModificationExceptionの発生原因になる、コレクションのループ・削除等も、全ての自作バリデータの中で行っておりません。

こちらがMyCustomStringValidatorクラスです。セッターゲッターは省略して載せています。

public class MyCustomStringValidator extends ValidatorChain {

 private String target;
 private int maximum =-1;
 private String pattern = "^[^,\"\'‘’“”]*$";
 private String patternMsg = "validate.CustomProhibitionValidator";;

 public void validate(FacesContext context, UIComponent component, Object 
value)
   throws FacesException {
  MyCustomProhibitionValidator prohibitionValidator = new 
MyCustomProhibitionValidator();
  MyCustomMaxByteLengthValidator maxByteLengthValidator = new 
MyCustomMaxByteLengthValidator();
  prohibitionValidator.setMessageId(getPatternMsg());
  prohibitionValidator.setTarget(getTarget());
  prohibitionValidator.setPattern(getPattern());
  maxByteLengthValidator.setMaximum(getMaximum());
  maxByteLengthValidator.setTarget(getTarget());
  add(prohibitionValidator);
  add(maxByteLengthValidator);
  super.validate(context, component, value);
 }
}

情報不足かも知れませんが、よろしくお願い致します。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20080801/6ef3364a/attachment-0001.html>


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