[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 メーリングリストの案内