Concurrent modification jdo exception

Hi,
When multiple ejb instances/threads are accessing the same persistence
object I get this exception:
javax.jdo.JDOUserException: An instance was concurrently modified in another
transaction (optimistic lock #: 238).
FailedObject:dk.pine.mediamanager.ejb.model.Application-58
at
com.solarmetric.kodo.runtime.PersistenceManagerImpl.flush(PersistenceManager
Impl.java:577)
at
com.solarmetric.kodo.ee.EEPersistenceManager.beforeCompletion(EEPersistenceM
anager.java:192)
at org.jboss.tm.TxCapsule.doBeforeCompletion(TxCapsule.java:1394)
at org.jboss.tm.TxCapsule.commit(TxCapsule.java:364)
(full stack trace included as attachment)
The only field accessed is a collection - objects are added to the
collection from several bean instances.
Is kodo not supposed to handle this?
The optimistic property is set to default (true). I've tried setting it to
false, but then the app server hangs or dead locks occur in the database.
System configuration:
jdk 1.4
kodo 2.4.2
jboss 3.0.4
sql server 2000
windows 2000
Thanks
Jesper
begin 666 concurrent-kodo-exception.txt
M,C P,RTP,RTS,2 Q-3HP-CHR."PU,C @5%)!0T4@6V]R9RYJ8F]S<RYT;2Y4
M>$-A<'-U;&5=(&9A:6QE9"!B969O<F4@8V]M<&QE=&EO;@T*:F%V87@N:F1O
M+DI$3U5S97)%>&-E<'1I;VXZ($5R<F]R<R!W97)E(&1E=&5C=&5D('=H96X@
M9FQU<VAI;F<@=&\@=&AE(&1A=&$@<W1O<F4N("!)9B!U<VEN9R!O<'1I;6ES
M=&EC('1R86YS86-T:6]N<RP@=&AI<R!C;W5L9"!I;F1I8V%T92!T:&%T(&QO
M8VL@=FEO;&%T:6]N<R!W97)E(&1E=&5C=&5D+B @5&AE(")G971.97-T961%
M>&-E<'1I;VYS(B!M971H;V0@;V8@=&AI<R!%>&-E<'1I;VX@=VEL;"!R971U
M<FX@=&AE('-P96-I9FEC(&5R<F]R<RX-"DYE<W1E9%1H<F]W86)L97,Z#0IJ
M879A>"YJ9&\N2D1/57-E<D5X8V5P=&EO;CH@06X@:6YS=&%N8V4@=V%S(&-O
M;F-U<G)E;G1L>2!M;V1I9FEE9"!I;B!A;F]T:&5R('1R86YS86-T:6]N("AO
M<'1I;6ES=&EC(&QO8VL@(SH@,C,X*2X-"D9A:6QE9$]B:F5C=#ID:RYP:6YE
M+FUE9&EA;6%N86=E<BYE:F(N;6]D96PN07!P;&EC871I;VXM-3@-"B @("!A
M="!C;VTN<V]L87)M971R:6,N:V]D;RYR=6YT:6UE+E!E<G-I<W1E;F-E36%N
M86=E<DEM<&PN9FQU<V@H4&5R<VES=&5N8V5-86YA9V5R26UP;"YJ879A.C4W
M-RD-"B @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYE92Y%15!E<G-I<W1E
M;F-E36%N86=E<BYB969O<F5#;VUP;&5T:6]N*$5%4&5R<VES=&5N8V5-86YA
M9V5R+FIA=F$Z,3DR*0T*(" @(&%T(&]R9RYJ8F]S<RYT;2Y4>$-A<'-U;&4N
M9&]"969O<F5#;VUP;&5T:6]N*%1X0V%P<W5L92YJ879A.C$S.30I#0H@(" @
M870@;W)G+FIB;W-S+G1M+E1X0V%P<W5L92YC;VUM:70H5'A#87!S=6QE+FIA
M=F$Z,S8T*0T*(" @(&%T(&]R9RYJ8F]S<RYT;2Y4<F%N<V%C=&EO;DEM<&PN
M8V]M;6ET*%1R86YS86-T:6]N26UP;"YJ879A.C<S*0T*(" @(&%T(&]R9RYJ
M8F]S<RYE:F(N<&QU9VEN<RY4>$EN=&5R8V5P=&]R0TU4+G)U;E=I=&A4<F%N
M<V%C=&EO;G,H5'A);G1E<F-E<'1O<D--5"YJ879A.C(P,2D-"B @("!A="!O
M<F<N:F)O<W,N96IB+G!L=6=I;G,N5'A);G1E<F-E<'1O<D--5"YI;G9O:V4H
M5'A);G1E<F-E<'1O<D--5"YJ879A.C8P*0T*(" @(&%T(&]R9RYJ8F]S<RYE
M:F(N<&QU9VEN<RY396-U<FET>4EN=&5R8V5P=&]R+FEN=F]K92A396-U<FET
M>4EN=&5R8V5P=&]R+FIA=F$Z,3,P*0T*(" @(&%T(&]R9RYJ8F]S<RYE:F(N
M<&QU9VEN<RY,;V=);G1E<F-E<'1O<BYI;G9O:V4H3&]G26YT97)C97!T;W(N
M:F%V83HR,#0I#0H@(" @870@;W)G+FIB;W-S+F5J8BY3=&%T96QE<W-397-S
M:6]N0V]N=&%I;F5R+FEN=F]K92A3=&%T96QE<W-397-S:6]N0V]N=&%I;F5R
M+FIA=F$Z,S$S*0T*(" @(&%T(&]R9RYJ8F]S<RYE:F(N0V]N=&%I;F5R+FEN
M=F]K92A#;VYT86EN97(N:F%V83HW,3(I#0H@(" @870@;W)G+FIB;W-S+FUX
M+G-E<G9E<BY-0F5A;E-E<G9E<DEM<&PN:6YV;VME*$U"96%N4V5R=F5R26UP
M;"YJ879A.C4Q-RD-"B @("!A="!O<F<N:F)O<W,N:6YV;V-A=&EO;BYL;V-A
M;"Y,;V-A;$EN=F]K97(N:6YV;VME*$QO8V%L26YV;VME<BYJ879A.CDX*0T*
M(" @(&%T(&]R9RYJ8F]S<RYI;G9O8V%T:6]N+DEN=F]K97));G1E<F-E<'1O
M<BYI;G9O:V4H26YV;VME<DEN=&5R8V5P=&]R+FIA=F$Z,3 R*0T*(" @(&%T
M(&]R9RYJ8F]S<RYP<F]X>2Y4<F%N<V%C=&EO;DEN=&5R8V5P=&]R+FEN=F]K
M92A4<F%N<V%C=&EO;DEN=&5R8V5P=&]R+FIA=F$Z-S<I#0H@(" @870@;W)G
M+FIB;W-S+G!R;WAY+E-E8W5R:71Y26YT97)C97!T;W(N:6YV;VME*%-E8W5R
M:71Y26YT97)C97!T;W(N:F%V83HX,"D-"B @("!A="!O<F<N:F)O<W,N<')O
M>'DN96IB+E-T871E;&5S<U-E<W-I;VY);G1E<F-E<'1O<BYI;G9O:V4H4W1A
M=&5L97-S4V5S<VEO;DEN=&5R8V5P=&]R+FIA=F$Z,3$Q*0T*(" @(&%T(&]R
M9RYJ8F]S<RYP<F]X>2Y#;&EE;G1#;VYT86EN97(N:6YV;VME*$-L:65N=$-O
M;G1A:6YE<BYJ879A.C<V*0T*(" @(&%T("10<F]X>34R+F-R96%T951E;7!L
M871E*%5N:VYO=VX@4V]U<F-E*0T*(" @(&%T(&1K+G!I;F4N;65D:6%C<F5A
M=&]R+G=E8BY496UP;&%T955P;&]A9$%C=&EO;BYE>&5C=71E*%1E;7!L871E
M57!L;V%D06-T:6]N+FIA=F$Z.3 I#0H@(" @870@;W)G+F%P86-H92YS=')U
M=',N86-T:6]N+E)E<75E<W10<F]C97-S;W(N<')O8V5S<T%C=&EO;E!E<F9O
M<FTH4F5Q=65S=%!R;V-E<W-O<BYJ879A.C0S-RD-"B @("!A="!O<F<N87!A
M8VAE+G-T<G5T<RYA8W1I;VXN4F5Q=65S=%!R;V-E<W-O<BYP<F]C97-S*%)E
M<75E<W10<F]C97-S;W(N:F%V83HR-C0I#0H@(" @870@;W)G+F%P86-H92YS
M=')U=',N86-T:6]N+D%C=&EO;E-E<G9L970N<')O8V5S<RA!8W1I;VY397)V
M;&5T+FIA=F$Z,3$P.2D-"B @("!A="!O<F<N87!A8VAE+G-T<G5T<RYA8W1I
M;VXN06-T:6]N4V5R=FQE="YD;U!O<W0H06-T:6]N4V5R=FQE="YJ879A.C0W
M,"D-"B @("!A="!J879A>"YS97)V;&5T+FAT=' N2'1T<%-E<G9L970N<V5R
M=FEC92A(='1P4V5R=FQE="YJ879A.C<V,"D-"B @("!A="!J879A>"YS97)V
M;&5T+FAT=' N2'1T<%-E<G9L970N<V5R=FEC92A(='1P4V5R=FQE="YJ879A
M.C@U,RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N07!P;&EC
M871I;VY&:6QT97)#:&%I;BYI;G1E<FYA;$1O1FEL=&5R*$%P<&QI8V%T:6]N
M1FEL=&5R0VAA:6XN:F%V83HR-#<I#0H@(" @870@;W)G+F%P86-H92YC871A
M;&EN82YC;W)E+D%P<&QI8V%T:6]N1FEL=&5R0VAA:6XN9&]&:6QT97(H07!P
M;&EC871I;VY&:6QT97)#:&%I;BYJ879A.C$Y,RD-"B @("!A="!D:RYP:6YE
M+F-O<F4N=71I;"YW96(N5V5B1FEL=&5R+F1O1FEL=&5R*%=E8D9I;'1E<BYJ
M879A.C4V*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y!<'!L
M:6-A=&EO;D9I;'1E<D-H86EN+FEN=&5R;F%L1&]&:6QT97(H07!P;&EC871I
M;VY&:6QT97)#:&%I;BYJ879A.C(Q,RD-"B @("!A="!O<F<N87!A8VAE+F-A
M=&%L:6YA+F-O<F4N07!P;&EC871I;VY&:6QT97)#:&%I;BYD;T9I;'1E<BA!
M<'!L:6-A=&EO;D9I;'1E<D-H86EN+FIA=F$Z,3DS*0T*(" @(&%T(&1K+G!I
M;F4N8V]R92YU=&EL+G=E8BY3971#:&%R86-T97)%;F-O9&EN9T9I;'1E<BYD
M;T9I;'1E<BA3971#:&%R86-T97)%;F-O9&EN9T9I;'1E<BYJ879A.C$Q,2D-
M"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N07!P;&EC871I;VY&
M:6QT97)#:&%I;BYI;G1E<FYA;$1O1FEL=&5R*$%P<&QI8V%T:6]N1FEL=&5R
M0VAA:6XN:F%V83HR,3,I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC
M;W)E+D%P<&QI8V%T:6]N1FEL=&5R0VAA:6XN9&]&:6QT97(H07!P;&EC871I
M;VY&:6QT97)#:&%I;BYJ879A.C$Y,RD-"B @("!A="!O<F<N87!A8VAE+F-A
M=&%L:6YA+F-O<F4N4W1A;F1A<F17<F%P<&5R5F%L=F4N:6YV;VME*%-T86YD
M87)D5W)A<'!E<E9A;'9E+FIA=F$Z,C8P*0T*(" @(&%T(&]R9RYA<&%C:&4N
M8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP96QI
M;F5686QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA
M=F$Z-C0S*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N
M9&%R9%!I<&5L:6YE+FEN=F]K92A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-#@P
M*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y#;VYT86EN97)"
M87-E+FEN=F]K92A#;VYT86EN97)"87-E+FIA=F$Z.3DU*0T*(" @(&%T(&]R
M9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9$-O;G1E>'1686QV92YI
M;G9O:V4H4W1A;F1A<F1#;VYT97AT5F%L=F4N:F%V83HQ.3$I#0H@(" @870@
M;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD87)D4&EP96QI;F4D4W1A
M;F1A<F10:7!E;&EN959A;'9E0V]N=&5X="YI;G9O:V5.97AT*%-T86YD87)D
M4&EP96QI;F4N:F%V83HV-#,I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN
M82YA=71H96YT:6-A=&]R+D%U=&AE;G1I8V%T;W)"87-E+FEN=F]K92A!=71H
M96YT:6-A=&]R0F%S92YJ879A.C4R-RD-"B @("!A="!O<F<N87!A8VAE+F-A
M=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN9213=&%N9&%R9%!I<&5L:6YE
M5F%L=F5#;VYT97AT+FEN=F]K94YE>'0H4W1A;F1A<F10:7!E;&EN92YJ879A
M.C8T,2D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+G9A;'9E<RY#97)T
M:69I8V%T97-686QV92YI;G9O:V4H0V5R=&EF:6-A=&5S5F%L=F4N:F%V83HR
M-#8I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD87)D
M4&EP96QI;F4D4W1A;F1A<F10:7!E;&EN959A;'9E0V]N=&5X="YI;G9O:V5.
M97AT*%-T86YD87)D4&EP96QI;F4N:F%V83HV-#$I#0H@(" @870@;W)G+F%P
M86-H92YC871A;&EN82YC;W)E+E-T86YD87)D4&EP96QI;F4N:6YV;VME*%-T
M86YD87)D4&EP96QI;F4N:F%V83HT.# I#0H@(" @870@;W)G+F%P86-H92YC
M871A;&EN82YC;W)E+D-O;G1A:6YE<D)A<V4N:6YV;VME*$-O;G1A:6YE<D)A
M<V4N:F%V83HY.34I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E
M+E-T86YD87)D0V]N=&5X="YI;G9O:V4H4W1A;F1A<F1#;VYT97AT+FIA=F$Z
M,C,Y-BD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A
M<F1(;W-T5F%L=F4N:6YV;VME*%-T86YD87)D2&]S=%9A;'9E+FIA=F$Z,3@P
M*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I
M<&5L:6YE)%-T86YD87)D4&EP96QI;F5686QV94-O;G1E>'0N:6YV;VME3F5X
M="A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-C0S*0T*(" @(&%T(&]R9RYA<&%C
M:&4N8V%T86QI;F$N=F%L=F5S+D5R<F]R1&ES<&%T8VAE<E9A;'9E+FEN=F]K
M92A%<G)O<D1I<W!A=&-H97)686QV92YJ879A.C$W,"D-"B @("!A="!O<F<N
M87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN9213=&%N9&%R
M9%!I<&5L:6YE5F%L=F5#;VYT97AT+FEN=F]K94YE>'0H4W1A;F1A<F10:7!E
M;&EN92YJ879A.C8T,2D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+G9A
M;'9E<RY%<G)O<E)E<&]R=%9A;'9E+FEN=F]K92A%<G)O<E)E<&]R=%9A;'9E
M+FIA=F$Z,3<R*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3
M=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP96QI;F5686QV94-O;G1E>'0N
M:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-C0Q*0T*(" @(&%T
M(&]R9RYA<&%C:&4N8V%T86QI;F$N=F%L=F5S+D%C8V5S<TQO9U9A;'9E+FEN
M=F]K92A!8V-E<W-,;V=686QV92YJ879A.C0V.2D-"B @("!A="!O<F<N87!A
M8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN9213=&%N9&%R9%!I
M<&5L:6YE5F%L=F5#;VYT97AT+FEN=F]K94YE>'0H4W1A;F1A<F10:7!E;&EN
M92YJ879A.C8T,2D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N
M4W1A;F1A<F10:7!E;&EN92YI;G9O:V4H4W1A;F1A<F10:7!E;&EN92YJ879A
M.C0X,"D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N0V]N=&%I
M;F5R0F%S92YI;G9O:V4H0V]N=&%I;F5R0F%S92YJ879A.CDY-2D-"B @("!A
M="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F1%;F=I;F5686QV
M92YI;G9O:V4H4W1A;F1A<F1%;F=I;F5686QV92YJ879A.C$W-"D-"B @("!A
M="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN9213
M=&%N9&%R9%!I<&5L:6YE5F%L=F5#;VYT97AT+FEN=F]K94YE>'0H4W1A;F1A
M<F10:7!E;&EN92YJ879A.C8T,RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L
M:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN92YI;G9O:V4H4W1A;F1A<F10:7!E
M;&EN92YJ879A.C0X,"D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O
M<F4N0V]N=&%I;F5R0F%S92YI;G9O:V4H0V]N=&%I;F5R0F%S92YJ879A.CDY
M-2D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O;FYE8W1O<BYH='1P
M+DAT='!0<F]C97-S;W(N<')O8V5S<RA(='1P4')O8V5S<V]R+FIA=F$Z,3 T
M,"D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O;FYE8W1O<BYH='1P
M+DAT='!0<F]C97-S;W(N<G5N*$AT='!0<F]C97-S;W(N:F%V83HQ,34Q*0T*
M(" @(&%T(&IA=F$N;&%N9RY4:')E860N<G5N*%1H<F5A9"YJ879A.C4S-BD-
M"DYE<W1E9%1H<F]W86)L97-3=&%C:U1R86-E.@T*:F%V87@N:F1O+DI$3U5S
M97)%>&-E<'1I;VXZ($%N(&EN<W1A;F-E('=A<R!C;VYC=7)R96YT;'D@;6]D
M:69I960@:6X@86YO=&AE<B!T<F%N<V%C=&EO;B H;W!T:6UI<W1I8R!L;V-K
M(",Z(#(S."DN#0I&86EL961/8FIE8W0Z9&LN<&EN92YM961I86UA;F%G97(N
M96IB+FUO9&5L+D%P<&QI8V%T:6]N+34X#0H@(" @870@8V]M+G-O;&%R;65T
M<FEC+FMO9&\N:6UP;"YJ9&)C+F]R;6%P<&EN9RY#;&%S<TUA<'!I;F<D,2YA
M9G1E<E5P9&%T92A#;&%S<TUA<'!I;F<N:F%V83HV,3$I#0H@(" @870@8V]M
M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ9&)C+E-13$5X96-U=&EO;DUA;F%G
M97));7!L+F5X96-U=&5);G1E<FYA;"A344Q%>&5C=71I;VY-86YA9V5R26UP
M;"YJ879A.C0U-2D-"B @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYI;7!L
M+FID8F,N4U%,17AE8W5T:6]N36%N86=E<DEM<&PN9FQU<V@H4U%,17AE8W5T
M:6]N36%N86=E<DEM<&PN:F%V83HR-S(I#0H@(" @870@8V]M+G-O;&%R;65T
M<FEC+FMO9&\N:6UP;"YJ9&)C+G)U;G1I;64N2D1"0U-T;W)E36%N86=E<BYF
M;'5S:"A*1$)#4W1O<F5-86YA9V5R+FIA=F$Z-#$Q*0T*(" @(&%T(&-O;2YS
M;VQA<FUE=')I8RYK;V1O+G)U;G1I;64N4&5R<VES=&5N8V5-86YA9V5R26UP
M;"YF;'5S:"A097)S:7-T96YC94UA;F%G97));7!L+FIA=F$Z-3<U*0T*(" @
M(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+F5E+D5%4&5R<VES=&5N8V5-86YA
M9V5R+F)E9F]R94-O;7!L971I;VXH145097)S:7-T96YC94UA;F%G97(N:F%V
M83HQ.3(I#0H@(" @870@;W)G+FIB;W-S+G1M+E1X0V%P<W5L92YD;T)E9F]R
M94-O;7!L971I;VXH5'A#87!S=6QE+FIA=F$Z,3,Y-"D-"B @("!A="!O<F<N
M:F)O<W,N=&TN5'A#87!S=6QE+F-O;6UI="A4>$-A<'-U;&4N:F%V83HS-C0I
M#0H@(" @870@;W)G+FIB;W-S+G1M+E1R86YS86-T:6]N26UP;"YC;VUM:70H
M5')A;G-A8W1I;VY);7!L+FIA=F$Z-S,I#0H@(" @870@;W)G+FIB;W-S+F5J
M8BYP;'5G:6YS+E1X26YT97)C97!T;W)#350N<G5N5VET:%1R86YS86-T:6]N
M<RA4>$EN=&5R8V5P=&]R0TU4+FIA=F$Z,C Q*0T*(" @(&%T(&]R9RYJ8F]S
M<RYE:F(N<&QU9VEN<RY4>$EN=&5R8V5P=&]R0TU4+FEN=F]K92A4>$EN=&5R
M8V5P=&]R0TU4+FIA=F$Z-C I#0H@(" @870@;W)G+FIB;W-S+F5J8BYP;'5G
M:6YS+E-E8W5R:71Y26YT97)C97!T;W(N:6YV;VME*%-E8W5R:71Y26YT97)C
M97!T;W(N:F%V83HQ,S I#0H@(" @870@;W)G+FIB;W-S+F5J8BYP;'5G:6YS
M+DQO9TEN=&5R8V5P=&]R+FEN=F]K92A,;V=);G1E<F-E<'1O<BYJ879A.C(P
M-"D-"B @("!A="!O<F<N:F)O<W,N96IB+E-T871E;&5S<U-E<W-I;VY#;VYT
M86EN97(N:6YV;VME*%-T871E;&5S<U-E<W-I;VY#;VYT86EN97(N:F%V83HS
M,3,I#0H@(" @870@;W)G+FIB;W-S+F5J8BY#;VYT86EN97(N:6YV;VME*$-O
M;G1A:6YE<BYJ879A.C<Q,BD-"B @("!A="!O<F<N:F)O<W,N;7@N<V5R=F5R
M+DU"96%N4V5R=F5R26UP;"YI;G9O:V4H34)E86Y397)V97));7!L+FIA=F$Z
M-3$W*0T*(" @(&%T(&]R9RYJ8F]S<RYI;G9O8V%T:6]N+FQO8V%L+DQO8V%L
M26YV;VME<BYI;G9O:V4H3&]C86Q);G9O:V5R+FIA=F$Z.3@I#0H@(" @870@
M;W)G+FIB;W-S+FEN=F]C871I;VXN26YV;VME<DEN=&5R8V5P=&]R+FEN=F]K
M92A);G9O:V5R26YT97)C97!T;W(N:F%V83HQ,#(I#0H@(" @870@;W)G+FIB
M;W-S+G!R;WAY+E1R86YS86-T:6]N26YT97)C97!T;W(N:6YV;VME*%1R86YS
M86-T:6]N26YT97)C97!T;W(N:F%V83HW-RD-"B @("!A="!O<F<N:F)O<W,N
M<')O>'DN4V5C=7)I='E);G1E<F-E<'1O<BYI;G9O:V4H4V5C=7)I='E);G1E
M<F-E<'1O<BYJ879A.C@P*0T*(" @(&%T(&]R9RYJ8F]S<RYP<F]X>2YE:F(N
M4W1A=&5L97-S4V5S<VEO;DEN=&5R8V5P=&]R+FEN=F]K92A3=&%T96QE<W-3
M97-S:6]N26YT97)C97!T;W(N:F%V83HQ,3$I#0H@(" @870@;W)G+FIB;W-S
M+G!R;WAY+D-L:65N=$-O;G1A:6YE<BYI;G9O:V4H0VQI96YT0V]N=&%I;F5R
M+FIA=F$Z-S8I#0H@(" @870@)%!R;WAY-3(N8W)E871E5&5M<&QA=&4H56YK
M;F]W;B!3;W5R8V4I#0H@(" @870@9&LN<&EN92YM961I86-R96%T;W(N=V5B
M+E1E;7!L871E57!L;V%D06-T:6]N+F5X96-U=&4H5&5M<&QA=&55<&QO861!
M8W1I;VXN:F%V83HY,"D-"B @("!A="!O<F<N87!A8VAE+G-T<G5T<RYA8W1I
M;VXN4F5Q=65S=%!R;V-E<W-O<BYP<F]C97-S06-T:6]N4&5R9F]R;2A297%U
M97-T4')O8V5S<V]R+FIA=F$Z-#,W*0T*(" @(&%T(&]R9RYA<&%C:&4N<W1R
M=71S+F%C=&EO;BY297%U97-T4')O8V5S<V]R+G!R;V-E<W,H4F5Q=65S=%!R
M;V-E<W-O<BYJ879A.C(V-"D-"B @("!A="!O<F<N87!A8VAE+G-T<G5T<RYA
M8W1I;VXN06-T:6]N4V5R=FQE="YP<F]C97-S*$%C=&EO;E-E<G9L970N:F%V
M83HQ,3 Y*0T*(" @(&%T(&]R9RYA<&%C:&4N<W1R=71S+F%C=&EO;BY!8W1I
M;VY397)V;&5T+F1O4&]S="A!8W1I;VY397)V;&5T+FIA=F$Z-#<P*0T*(" @
M(&%T(&IA=F%X+G-E<G9L970N:'1T<"Y(='1P4V5R=FQE="YS97)V:6-E*$AT
M='!397)V;&5T+FIA=F$Z-S8P*0T*(" @(&%T(&IA=F%X+G-E<G9L970N:'1T
M<"Y(='1P4V5R=FQE="YS97)V:6-E*$AT='!397)V;&5T+FIA=F$Z.#4S*0T*
M(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y!<'!L:6-A=&EO;D9I
M;'1E<D-H86EN+FEN=&5R;F%L1&]&:6QT97(H07!P;&EC871I;VY&:6QT97)#
M:&%I;BYJ879A.C(T-RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O
M<F4N07!P;&EC871I;VY&:6QT97)#:&%I;BYD;T9I;'1E<BA!<'!L:6-A=&EO
M;D9I;'1E<D-H86EN+FIA=F$Z,3DS*0T*(" @(&%T(&1K+G!I;F4N8V]R92YU
M=&EL+G=E8BY796)&:6QT97(N9&]&:6QT97(H5V5B1FEL=&5R+FIA=F$Z-38I
M#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+D%P<&QI8V%T:6]N
M1FEL=&5R0VAA:6XN:6YT97)N86Q$;T9I;'1E<BA!<'!L:6-A=&EO;D9I;'1E
M<D-H86EN+FIA=F$Z,C$S*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N
M8V]R92Y!<'!L:6-A=&EO;D9I;'1E<D-H86EN+F1O1FEL=&5R*$%P<&QI8V%T
M:6]N1FEL=&5R0VAA:6XN:F%V83HQ.3,I#0H@(" @870@9&LN<&EN92YC;W)E
M+G5T:6PN=V5B+E-E=$-H87)A8W1E<D5N8V]D:6YG1FEL=&5R+F1O1FEL=&5R
M*%-E=$-H87)A8W1E<D5N8V]D:6YG1FEL=&5R+FIA=F$Z,3$Q*0T*(" @(&%T
M(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y!<'!L:6-A=&EO;D9I;'1E<D-H
M86EN+FEN=&5R;F%L1&]&:6QT97(H07!P;&EC871I;VY&:6QT97)#:&%I;BYJ
M879A.C(Q,RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N07!P
M;&EC871I;VY&:6QT97)#:&%I;BYD;T9I;'1E<BA!<'!L:6-A=&EO;D9I;'1E
M<D-H86EN+FIA=F$Z,3DS*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N
M8V]R92Y3=&%N9&%R9%=R87!P97)686QV92YI;G9O:V4H4W1A;F1A<F17<F%P
M<&5R5F%L=F4N:F%V83HR-C I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN
M82YC;W)E+E-T86YD87)D4&EP96QI;F4D4W1A;F1A<F10:7!E;&EN959A;'9E
M0V]N=&5X="YI;G9O:V5.97AT*%-T86YD87)D4&EP96QI;F4N:F%V83HV-#,I
M#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD87)D4&EP
M96QI;F4N:6YV;VME*%-T86YD87)D4&EP96QI;F4N:F%V83HT.# I#0H@(" @
M870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+D-O;G1A:6YE<D)A<V4N:6YV
M;VME*$-O;G1A:6YE<D)A<V4N:F%V83HY.34I#0H@(" @870@;W)G+F%P86-H
M92YC871A;&EN82YC;W)E+E-T86YD87)D0V]N=&5X=%9A;'9E+FEN=F]K92A3
M=&%N9&%R9$-O;G1E>'1686QV92YJ879A.C$Y,2D-"B @("!A="!O<F<N87!A
M8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN9213=&%N9&%R9%!I
M<&5L:6YE5F%L=F5#;VYT97AT+FEN=F]K94YE>'0H4W1A;F1A<F10:7!E;&EN
M92YJ879A.C8T,RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F%U=&AE
M;G1I8V%T;W(N075T:&5N=&EC871O<D)A<V4N:6YV;VME*$%U=&AE;G1I8V%T
M;W)"87-E+FIA=F$Z-3(W*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N
M8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP96QI;F5686QV94-O
M;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-C0Q*0T*
M(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N=F%L=F5S+D-E<G1I9FEC871E
M<U9A;'9E+FEN=F]K92A#97)T:69I8V%T97-686QV92YJ879A.C(T-BD-"B @
M("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN
M9213=&%N9&%R9%!I<&5L:6YE5F%L=F5#;VYT97AT+FEN=F]K94YE>'0H4W1A
M;F1A<F10:7!E;&EN92YJ879A.C8T,2D-"B @("!A="!O<F<N87!A8VAE+F-A
M=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN92YI;G9O:V4H4W1A;F1A<F10
M:7!E;&EN92YJ879A.C0X,"D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA
M+F-O<F4N0V]N=&%I;F5R0F%S92YI;G9O:V4H0V]N=&%I;F5R0F%S92YJ879A
M.CDY-2D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A
M<F1#;VYT97AT+FEN=F]K92A3=&%N9&%R9$-O;G1E>'0N:F%V83HR,SDV*0T*
M(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9$AO<W16
M86QV92YI;G9O:V4H4W1A;F1A<F1(;W-T5F%L=F4N:F%V83HQ.# I#0H@(" @
M870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD87)D4&EP96QI;F4D
M4W1A;F1A<F10:7!E;&EN959A;'9E0V]N=&5X="YI;G9O:V5.97AT*%-T86YD
M87)D4&EP96QI;F4N:F%V83HV-#,I#0H@(" @870@;W)G+F%P86-H92YC871A
M;&EN82YV86QV97,N17)R;W)$:7-P871C:&5R5F%L=F4N:6YV;VME*$5R<F]R
M1&ES<&%T8VAE<E9A;'9E+FIA=F$Z,3<P*0T*(" @(&%T(&]R9RYA<&%C:&4N
M8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP96QI
M;F5686QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA
M=F$Z-C0Q*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N=F%L=F5S+D5R
M<F]R4F5P;W)T5F%L=F4N:6YV;VME*$5R<F]R4F5P;W)T5F%L=F4N:F%V83HQ
M-S(I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD87)D
M4&EP96QI;F4D4W1A;F1A<F10:7!E;&EN959A;'9E0V]N=&5X="YI;G9O:V5.
M97AT*%-T86YD87)D4&EP96QI;F4N:F%V83HV-#$I#0H@(" @870@;W)G+F%P
M86-H92YC871A;&EN82YV86QV97,N06-C97-S3&]G5F%L=F4N:6YV;VME*$%C
M8V5S<TQO9U9A;'9E+FIA=F$Z-#8Y*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T
M86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP96QI;F56
M86QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z
M-C0Q*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R
M9%!I<&5L:6YE+FEN=F]K92A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-#@P*0T*
M(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y#;VYT86EN97)"87-E
M+FEN=F]K92A#;VYT86EN97)"87-E+FIA=F$Z.3DU*0T*(" @(&%T(&]R9RYA
M<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9$5N9VEN959A;'9E+FEN=F]K
M92A3=&%N9&%R9$5N9VEN959A;'9E+FIA=F$Z,3<T*0T*(" @(&%T(&]R9RYA
M<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D
M4&EP96QI;F5686QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L
M:6YE+FIA=F$Z-C0S*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R
M92Y3=&%N9&%R9%!I<&5L:6YE+FEN=F]K92A3=&%N9&%R9%!I<&5L:6YE+FIA
M=F$Z-#@P*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y#;VYT
M86EN97)"87-E+FEN=F]K92A#;VYT86EN97)"87-E+FIA=F$Z.3DU*0T*(" @
M(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]N;F5C=&]R+FAT=' N2'1T<%!R
M;V-E<W-O<BYP<F]C97-S*$AT='!0<F]C97-S;W(N:F%V83HQ,#0P*0T*(" @
M(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]N;F5C=&]R+FAT=' N2'1T<%!R
M;V-E<W-O<BYR=6XH2'1T<%!R;V-E<W-O<BYJ879A.C$Q-3$I#0H@(" @870@
M:F%V82YL86YG+E1H<F5A9"YR=6XH5&AR96%D+FIA=F$Z-3,V*0T*,C P,RTP
M,RTS,2 Q-3HP-CHR."PU,S @5%)!0T4@6V]R9RYJ8F]S<RYT;2Y4>$-A<'-U
M;&5=($)E9F]R92!C;VUP;&5T:6]N(&1O;F4L('1X/5AI9$EM<&P@6T9O<FUA
M=$ED/3(U-RP@1VQO8F%L260]:FQA+R\Q.3DP."P@0G)A;F-H475A;#U=+"!S
M=&%T=7,]4U1!5%537TU!4DM%1%]23TQ,0D%#2PT*,C P,RTP,RTS,2 Q-3HP
M-CHR."PU,S @5T%23B @6V]R9RYA<&%C:&4N<W1R=71S+F%C=&EO;BY297%U
M97-T4')O8V5S<V]R72 -"C(P,#,M,#,M,S$@,34Z,#8Z,C@L-3,P($524D]2
M(%MO<F<N:F)O<W,N=V5B+FQO8V%L:&]S="Y%;F=I;F5=(%-T86YD87)D5W)A
M<'!E<E9A;'9E6V%C=&EO;ETZ(%-E<G9L970N<V5R=FEC92@I(&9O<B!S97)V
M;&5T(&%C=&EO;B!T:')E=R!E>&-E<'1I;VX-"FIA=F%X+G-E<G9L970N4V5R
M=FQE=$5X8V5P=&EO;@T*(" @(&%T(&]R9RYA<&%C:&4N<W1R=71S+F%C=&EO
M;BY297%U97-T4')O8V5S<V]R+G!R;V-E<W-%>&-E<'1I;VXH4F5Q=65S=%!R
M;V-E<W-O<BYJ879A.C0Y."D-"B @("!A="!O<F<N87!A8VAE+G-T<G5T<RYA
M8W1I;VXN4F5Q=65S=%!R;V-E<W-O<BYP<F]C97-S06-T:6]N4&5R9F]R;2A2
M97%U97-T4')O8V5S<V]R+FIA=F$Z-#,Y*0T*(" @(&%T(&]R9RYA<&%C:&4N
M<W1R=71S+F%C=&EO;BY297%U97-T4')O8V5S<V]R+G!R;V-E<W,H4F5Q=65S
M=%!R;V-E<W-O<BYJ879A.C(V-"D-"B @("!A="!O<F<N87!A8VAE+G-T<G5T
M<RYA8W1I;VXN06-T:6]N4V5R=FQE="YP<F]C97-S*$%C=&EO;E-E<G9L970N
M:F%V83HQ,3 Y*0T*(" @(&%T(&]R9RYA<&%C:&4N<W1R=71S+F%C=&EO;BY!
M8W1I;VY397)V;&5T+F1O4&]S="A!8W1I;VY397)V;&5T+FIA=F$Z-#<P*0T*
M(" @(&%T(&IA=F%X+G-E<G9L970N:'1T<"Y(='1P4V5R=FQE="YS97)V:6-E
M*$AT='!397)V;&5T+FIA=F$Z-S8P*0T*(" @(&%T(&IA=F%X+G-E<G9L970N
M:'1T<"Y(='1P4V5R=FQE="YS97)V:6-E*$AT='!397)V;&5T+FIA=F$Z.#4S
M*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y!<'!L:6-A=&EO
M;D9I;'1E<D-H86EN+FEN=&5R;F%L1&]&:6QT97(H07!P;&EC871I;VY&:6QT
M97)#:&%I;BYJ879A.C(T-RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA
M+F-O<F4N07!P;&EC871I;VY&:6QT97)#:&%I;BYD;T9I;'1E<BA!<'!L:6-A
M=&EO;D9I;'1E<D-H86EN+FIA=F$Z,3DS*0T*(" @(&%T(&1K+G!I;F4N8V]R
M92YU=&EL+G=E8BY796)&:6QT97(N9&]&:6QT97(H5V5B1FEL=&5R+FIA=F$Z
M-38I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+D%P<&QI8V%T
M:6]N1FEL=&5R0VAA:6XN:6YT97)N86Q$;T9I;'1E<BA!<'!L:6-A=&EO;D9I
M;'1E<D-H86EN+FIA=F$Z,C$S*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI
M;F$N8V]R92Y!<'!L:6-A=&EO;D9I;'1E<D-H86EN+F1O1FEL=&5R*$%P<&QI
M8V%T:6]N1FEL=&5R0VAA:6XN:F%V83HQ.3,I#0H@(" @870@9&LN<&EN92YC
M;W)E+G5T:6PN=V5B+E-E=$-H87)A8W1E<D5N8V]D:6YG1FEL=&5R+F1O1FEL
M=&5R*%-E=$-H87)A8W1E<D5N8V]D:6YG1FEL=&5R+FIA=F$Z,3$Q*0T*(" @
M(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y!<'!L:6-A=&EO;D9I;'1E
M<D-H86EN+FEN=&5R;F%L1&]&:6QT97(H07!P;&EC871I;VY&:6QT97)#:&%I
M;BYJ879A.C(Q,RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N
M07!P;&EC871I;VY&:6QT97)#:&%I;BYD;T9I;'1E<BA!<'!L:6-A=&EO;D9I
M;'1E<D-H86EN+FIA=F$Z,3DS*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI
M;F$N8V]R92Y3=&%N9&%R9%=R87!P97)686QV92YI;G9O:V4H4W1A;F1A<F17
M<F%P<&5R5F%L=F4N:F%V83HR-C I#0H@(" @870@;W)G+F%P86-H92YC871A
M;&EN82YC;W)E+E-T86YD87)D4&EP96QI;F4D4W1A;F1A<F10:7!E;&EN959A
M;'9E0V]N=&5X="YI;G9O:V5.97AT*%-T86YD87)D4&EP96QI;F4N:F%V83HV
M-#,I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD87)D
M4&EP96QI;F4N:6YV;VME*%-T86YD87)D4&EP96QI;F4N:F%V83HT.# I#0H@
M(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+D-O;G1A:6YE<D)A<V4N
M:6YV;VME*$-O;G1A:6YE<D)A<V4N:F%V83HY.34I#0H@(" @870@;W)G+F%P
M86-H92YC871A;&EN82YC;W)E+E-T86YD87)D0V]N=&5X=%9A;'9E+FEN=F]K
M92A3=&%N9&%R9$-O;G1E>'1686QV92YJ879A.C$Y,2D-"B @("!A="!O<F<N
M87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN9213=&%N9&%R
M9%!I<&5L:6YE5F%L=F5#;VYT97AT+FEN=F]K94YE>'0H4W1A;F1A<F10:7!E
M;&EN92YJ879A.C8T,RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F%U
M=&AE;G1I8V%T;W(N075T:&5N=&EC871O<D)A<V4N:6YV;VME*$%U=&AE;G1I
M8V%T;W)"87-E+FIA=F$Z-3(W*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI
M;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP96QI;F5686QV
M94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-C0Q
M*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N=F%L=F5S+D-E<G1I9FEC
M871E<U9A;'9E+FEN=F]K92A#97)T:69I8V%T97-686QV92YJ879A.C(T-BD-
M"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E
M;&EN9213=&%N9&%R9%!I<&5L:6YE5F%L=F5#;VYT97AT+FEN=F]K94YE>'0H
M4W1A;F1A<F10:7!E;&EN92YJ879A.C8T,2D-"B @("!A="!O<F<N87!A8VAE
M+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN92YI;G9O:V4H4W1A;F1A
M<F10:7!E;&EN92YJ879A.C0X,"D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L
M:6YA+F-O<F4N0V]N=&%I;F5R0F%S92YI;G9O:V4H0V]N=&%I;F5R0F%S92YJ
M879A.CDY-2D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A
M;F1A<F1#;VYT97AT+FEN=F]K92A3=&%N9&%R9$-O;G1E>'0N:F%V83HR,SDV
M*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9$AO
M<W1686QV92YI;G9O:V4H4W1A;F1A<F1(;W-T5F%L=F4N:F%V83HQ.# I#0H@
M(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD87)D4&EP96QI
M;F4D4W1A;F1A<F10:7!E;&EN959A;'9E0V]N=&5X="YI;G9O:V5.97AT*%-T
M86YD87)D4&EP96QI;F4N:F%V83HV-#,I#0H@(" @870@;W)G+F%P86-H92YC
M871A;&EN82YV86QV97,N17)R;W)$:7-P871C:&5R5F%L=F4N:6YV;VME*$5R
M<F]R1&ES<&%T8VAE<E9A;'9E+FIA=F$Z,3<P*0T*(" @(&%T(&]R9RYA<&%C
M:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP
M96QI;F5686QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE
M+FIA=F$Z-C0Q*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N=F%L=F5S
M+D5R<F]R4F5P;W)T5F%L=F4N:6YV;VME*$5R<F]R4F5P;W)T5F%L=F4N:F%V
M83HQ-S(I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD
M87)D4&EP96QI;F4D4W1A;F1A<F10:7!E;&EN959A;'9E0V]N=&5X="YI;G9O
M:V5.97AT*%-T86YD87)D4&EP96QI;F4N:F%V83HV-#$I#0H@(" @870@;W)G
M+F%P86-H92YC871A;&EN82YV86QV97,N06-C97-S3&]G5F%L=F4N:6YV;VME
M*$%C8V5S<TQO9U9A;'9E+FIA=F$Z-#8Y*0T*(" @(&%T(&]R9RYA<&%C:&4N
M8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP96QI
M;F5686QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA
M=F$Z-C0Q*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N
M9&%R9%!I<&5L:6YE+FEN=F]K92A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-#@P
M*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y#;VYT86EN97)"
M87-E+FEN=F]K92A#;VYT86EN97)"87-E+FIA=F$Z.3DU*0T*(" @(&%T(&]R
M9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9$5N9VEN959A;'9E+FEN
M=F]K92A3=&%N9&%R9$5N9VEN959A;'9E+FIA=F$Z,3<T*0T*(" @(&%T(&]R
M9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD
M87)D4&EP96QI;F5686QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I
M<&5L:6YE+FIA=F$Z-C0S*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N
M8V]R92Y3=&%N9&%R9%!I<&5L:6YE+FEN=F]K92A3=&%N9&%R9%!I<&5L:6YE
M+FIA=F$Z-#@P*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y#
M;VYT86EN97)"87-E+FEN=F]K92A#;VYT86EN97)"87-E+FIA=F$Z.3DU*0T*
M(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]N;F5C=&]R+FAT=' N2'1T
M<%!R;V-E<W-O<BYP<F]C97-S*$AT='!0<F]C97-S;W(N:F%V83HQ,#0P*0T*
M(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]N;F5C=&]R+FAT=' N2'1T
M<%!R;V-E<W-O<BYR=6XH2'1T<%!R;V-E<W-O<BYJ879A.C$Q-3$I#0H@(" @
M870@:F%V82YL86YG+E1H<F5A9"YR=6XH5&AR96%D+FIA=F$Z-3,V*0T*,C P
M,RTP,RTS,2 Q-3HP-CHR."PU-3 @15)23U(@6V]R9RYJ8F]S<RYW96(N;&]C
M86QH;W-T+D5N9VEN95T@+2TM+2T@4F]O="!#875S92 M+2TM+0T*:F%V82YL
M86YG+G)E9FQE8W0N56YD96-L87)E9%1H<F]W86)L945X8V5P=&EO;@T*(" @
M(&%T("10<F]X>34R+F-R96%T951E;7!L871E*%5N:VYO=VX@4V]U<F-E*0T*
M(" @(&%T(&1K+G!I;F4N;65D:6%C<F5A=&]R+G=E8BY496UP;&%T955P;&]A
M9$%C=&EO;BYE>&5C=71E*%1E;7!L871E57!L;V%D06-T:6]N+FIA=F$Z.3 I
M#0H@(" @870@;W)G+F%P86-H92YS=')U=',N86-T:6]N+E)E<75E<W10<F]C
M97-S;W(N<')O8V5S<T%C=&EO;E!E<F9O<FTH4F5Q=65S=%!R;V-E<W-O<BYJ
M879A.C0S-RD-"B @("!A="!O<F<N87!A8VAE+G-T<G5T<RYA8W1I;VXN4F5Q
M=65S=%!R;V-E<W-O<BYP<F]C97-S*%)E<75E<W10<F]C97-S;W(N:F%V83HR
M-C0I#0H@(" @870@;W)G+F%P86-H92YS=')U=',N86-T:6]N+D%C=&EO;E-E
M<G9L970N<')O8V5S<RA!8W1I;VY397)V;&5T+FIA=F$Z,3$P.2D-"B @("!A
M="!O<F<N87!A8VAE+G-T<G5T<RYA8W1I;VXN06-T:6]N4V5R=FQE="YD;U!O
M<W0H06-T:6]N4V5R=FQE="YJ879A.C0W,"D-"B @("!A="!J879A>"YS97)V
M;&5T+FAT=' N2'1T<%-E<G9L970N<V5R=FEC92A(='1P4V5R=FQE="YJ879A
M.C<V,"D-"B @("!A="!J879A>"YS97)V;&5T+FAT=' N2'1T<%-E<G9L970N
M<V5R=FEC92A(='1P4V5R=FQE="YJ879A.C@U,RD-"B @("!A="!O<F<N87!A
M8VAE+F-A=&%L:6YA+F-O<F4N07!P;&EC871I;VY&:6QT97)#:&%I;BYI;G1E
M<FYA;$1O1FEL=&5R*$%P<&QI8V%T:6]N1FEL=&5R0VAA:6XN:F%V83HR-#<I
M#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+D%P<&QI8V%T:6]N
M1FEL=&5R0VAA:6XN9&]&:6QT97(H07!P;&EC871I;VY&:6QT97)#:&%I;BYJ
M879A.C$Y,RD-"B @("!A="!D:RYP:6YE+F-O<F4N=71I;"YW96(N5V5B1FEL
M=&5R+F1O1FEL=&5R*%=E8D9I;'1E<BYJ879A.C4V*0T*(" @(&%T(&]R9RYA
M<&%C:&4N8V%T86QI;F$N8V]R92Y!<'!L:6-A=&EO;D9I;'1E<D-H86EN+FEN
M=&5R;F%L1&]&:6QT97(H07!P;&EC871I;VY&:6QT97)#:&%I;BYJ879A.C(Q
M,RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N07!P;&EC871I
M;VY&:6QT97)#:&%I;BYD;T9I;'1E<BA!<'!L:6-A=&EO;D9I;'1E<D-H86EN
M+FIA=F$Z,3DS*0T*(" @(&%T(&1K+G!I;F4N8V]R92YU=&EL+G=E8BY3971#
M:&%R86-T97)%;F-O9&EN9T9I;'1E<BYD;T9I;'1E<BA3971#:&%R86-T97)%
M;F-O9&EN9T9I;'1E<BYJ879A.C$Q,2D-"B @("!A="!O<F<N87!A8VAE+F-A
M=&%L:6YA+F-O<F4N07!P;&EC871I;VY&:6QT97)#:&%I;BYI;G1E<FYA;$1O
M1FEL=&5R*$%P<&QI8V%T:6]N1FEL=&5R0VAA:6XN:F%V83HR,3,I#0H@(" @
M870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+D%P<&QI8V%T:6]N1FEL=&5R
M0VAA:6XN9&]&:6QT97(H07!P;&EC871I;VY&:6QT97)#:&%I;BYJ879A.C$Y
M,RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F17
M<F%P<&5R5F%L=F4N:6YV;VME*%-T86YD87)D5W)A<'!E<E9A;'9E+FIA=F$Z
M,C8P*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R
M9%!I<&5L:6YE)%-T86YD87)D4&EP96QI;F5686QV94-O;G1E>'0N:6YV;VME
M3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-C0S*0T*(" @(&%T(&]R9RYA
M<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE+FEN=F]K92A3
M=&%N9&%R9%!I<&5L:6YE+FIA=F$Z-#@P*0T*(" @(&%T(&]R9RYA<&%C:&4N
M8V%T86QI;F$N8V]R92Y#;VYT86EN97)"87-E+FEN=F]K92A#;VYT86EN97)"
M87-E+FIA=F$Z.3DU*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N8V]R
M92Y3=&%N9&%R9$-O;G1E>'1686QV92YI;G9O:V4H4W1A;F1A<F1#;VYT97AT
M5F%L=F4N:F%V83HQ.3$I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC
M;W)E+E-T86YD87)D4&EP96QI;F4D4W1A;F1A<F10:7!E;&EN959A;'9E0V]N
M=&5X="YI;G9O:V5.97AT*%-T86YD87)D4&EP96QI;F4N:F%V83HV-#,I#0H@
M(" @870@;W)G+F%P86-H92YC871A;&EN82YA=71H96YT:6-A=&]R+D%U=&AE
M;G1I8V%T;W)"87-E+FEN=F]K92A!=71H96YT:6-A=&]R0F%S92YJ879A.C4R
M-RD-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10
M:7!E;&EN9213=&%N9&%R9%!I<&5L:6YE5F%L=F5#;VYT97AT+FEN=F]K94YE
M>'0H4W1A;F1A<F10:7!E;&EN92YJ879A.C8T,2D-"B @("!A="!O<F<N87!A
M8VAE+F-A=&%L:6YA+G9A;'9E<RY#97)T:69I8V%T97-686QV92YI;G9O:V4H
M0V5R=&EF:6-A=&5S5F%L=F4N:F%V83HR-#8I#0H@(" @870@;W)G+F%P86-H
M92YC871A;&EN82YC;W)E+E-T86YD87)D4&EP96QI;F4D4W1A;F1A<F10:7!E
M;&EN959A;'9E0V]N=&5X="YI;G9O:V5.97AT*%-T86YD87)D4&EP96QI;F4N
M:F%V83HV-#$I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T
M86YD87)D4&EP96QI;F4N:6YV;VME*%-T86YD87)D4&EP96QI;F4N:F%V83HT
M.# I#0H@(" @870@;W)G+F%P86-H92YC871A;&EN82YC;W)E+D-O;G1A:6YE
M<D)A<V4N:6YV;VME*$-O;G1A:6YE<D)A<V4N:F%V83HY.34I#0H@(" @870@
M;W)G+F%P86-H92YC871A;&EN82YC;W)E+E-T86YD87)D0V]N=&5X="YI;G9O
M:V4H4W1A;F1A<F1#;VYT97AT+FIA=F$Z,C,Y-BD-"B @("!A="!O<F<N87!A
M8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F1(;W-T5F%L=F4N:6YV;VME*%-T
M86YD87)D2&]S=%9A;'9E+FIA=F$Z,3@P*0T*(" @(&%T(&]R9RYA<&%C:&4N
M8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD87)D4&EP96QI
M;F5686QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I<&5L:6YE+FIA
M=F$Z-C0S*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N=F%L=F5S+D5R
M<F]R1&ES<&%T8VAE<E9A;'9E+FEN=F]K92A%<G)O<D1I<W!A=&-H97)686QV
M92YJ879A.C$W,"D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N
M4W1A;F1A<F10:7!E;&EN9213=&%N9&%R9%!I<&5L:6YE5F%L=F5#;VYT97AT
M+FEN=F]K94YE>'0H4W1A;F1A<F10:7!E;&EN92YJ879A.C8T,2D-"B @("!A
M="!O<F<N87!A8VAE+F-A=&%L:6YA+G9A;'9E<RY%<G)O<E)E<&]R=%9A;'9E
M+FEN=F]K92A%<G)O<E)E<&]R=%9A;'9E+FIA=F$Z,3<R*0T*(" @(&%T(&]R
M9RYA<&%C:&4N8V%T86QI;F$N8V]R92Y3=&%N9&%R9%!I<&5L:6YE)%-T86YD
M87)D4&EP96QI;F5686QV94-O;G1E>'0N:6YV;VME3F5X="A3=&%N9&%R9%!I
M<&5L:6YE+FIA=F$Z-C0Q*0T*(" @(&%T(&]R9RYA<&%C:&4N8V%T86QI;F$N
M=F%L=F5S+D%C8V5S<TQO9U9A;'9E+FEN=F]K92A!8V-E<W-,;V=686QV92YJ
M879A.C0V.2D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A
M;F1A<F10:7!E;&EN9213=&%N9&%R9%!I<&5L:6YE5F%L=F5#;VYT97AT+FEN
M=F]K94YE>'0H4W1A;F1A<F10:7!E;&EN92YJ879A.C8T,2D-"B @("!A="!O
M<F<N87!A8VAE+F-A=&%L:6YA+F-O<F4N4W1A;F1A<F10:7!E;&EN92YI;G9O
M:V4H4W1A;F1A<F10:7!E;&EN92YJ879A.C0X,"D-"B @("!A="!O<F<N87!A
M8VAE+F-A=&%L:6YA+F-O<F4N0V]N=&%I;F5R0F%S92YI;G9O:V4H0V]N=&%I
M;F5R0F%S92YJ879A.CDY-2D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA
M+F-O<F4N4W1A;F1A<F1%;F=I;F5686QV92YI;G9O:V4H4W1A;F1A<F1%;F=I
M;F5686QV92YJ879A.C$W-"D-"B @("!A="!O<F<N87!A8VAE+F-A=&%L:6YA
M+F-O<F4N4W

Kodo handled the concurrency by telling you your instance was stale.
I.e:
A bank account starts with $0.
A person retrieves the account with $0 balance.
Person 2 retrieves the account with $0 balance.
Person 1 deposits the account with $5 ($0 + $5 = $5 total).
Person 2 deposits the account with $2 ($0 + $2 = $2 total)
Person 1 commits. The Account the DB is now at $5.
Person 2 attempts to commit. The version of Account is stale, and thus
tells the application that Person 2 is attempting to put in invalid data
(it should instead be at $7).
With pessismistic locking, Person 2 has to wait for Person 1 to finish.
Thus the deadlock:
Person 1 locks up resource a.
Person 2 locks up resource b.
Person 2 attempts to lock up resource a but is waiting for Person 1 to
finish.
Person 1 attempts to lock up resource b but is waiting for Person 2 to
finish.
These are the kinds of situations that Kodo does handle, but it is up to
you to figure out what to do when such concurrency situations happen...
i.e. handle the optimistic lock exception.
Jesper Ladegaard wrote:
Hi,
When multiple ejb instances/threads are accessing the same persistence
object I get this exception:
javax.jdo.JDOUserException: An instance was concurrently modified in another
transaction (optimistic lock #: 238).
FailedObject:dk.pine.mediamanager.ejb.model.Application-58
at
com.solarmetric.kodo.runtime.PersistenceManagerImpl.flush(PersistenceManager
Impl.java:577)
at
com.solarmetric.kodo.ee.EEPersistenceManager.beforeCompletion(EEPersistenceM
anager.java:192)
at org.jboss.tm.TxCapsule.doBeforeCompletion(TxCapsule.java:1394)
at org.jboss.tm.TxCapsule.commit(TxCapsule.java:364)
(full stack trace included as attachment)
The only field accessed is a collection - objects are added to the
collection from several bean instances.
Is kodo not supposed to handle this?
The optimistic property is set to default (true). I've tried setting it to
false, but then the app server hangs or dead locks occur in the database.
System configuration:
jdk 1.4
kodo 2.4.2
jboss 3.0.4
sql server 2000
windows 2000
Thanks
Jesper
2003-03-31 15:06:28,520 TRACE [org.jboss.tm.TxCapsule] failed before completion
javax.jdo.JDOUserException: Errors were detected when flushing to the data store. If using optimistic transactions, this could indicate that lock violations were detected. The "getNestedExceptions" method of this Exception will return the specific errors.
NestedThrowables:
javax.jdo.JDOUserException: An instance was concurrently modified in another transaction (optimistic lock #: 238).
FailedObject:dk.pine.mediamanager.ejb.model.Application-58
at com.solarmetric.kodo.runtime.PersistenceManagerImpl.flush(PersistenceManagerImpl.java:577)
at com.solarmetric.kodo.ee.EEPersistenceManager.beforeCompletion(EEPersistenceManager.java:192)
at org.jboss.tm.TxCapsule.doBeforeCompletion(TxCapsule.java:1394)
at org.jboss.tm.TxCapsule.commit(TxCapsule.java:364)
at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:73)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:201)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:60)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:130)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:204)
at org.jboss.ejb.StatelessSessionContainer.invoke(StatelessSessionContainer.java:313)
at org.jboss.ejb.Container.invoke(Container.java:712)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:98)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:102)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:77)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:80)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:111)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76)
at $Proxy52.createTemplate(Unknown Source)
at dk.pine.mediacreator.web.TemplateUploadAction.execute(TemplateUploadAction.java:90)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:437)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:264)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1109)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at dk.pine.core.util.web.WebFilter.doFilter(WebFilter.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at dk.pine.core.util.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:527)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
at java.lang.Thread.run(Thread.java:536)
NestedThrowablesStackTrace:
javax.jdo.JDOUserException: An instance was concurrently modified in another transaction (optimistic lock #: 238).
FailedObject:dk.pine.mediamanager.ejb.model.Application-58
at com.solarmetric.kodo.impl.jdbc.ormapping.ClassMapping$1.afterUpdate(ClassMapping.java:611)
at com.solarmetric.kodo.impl.jdbc.SQLExecutionManagerImpl.executeInternal(SQLExecutionManagerImpl.java:455)
at com.solarmetric.kodo.impl.jdbc.SQLExecutionManagerImpl.flush(SQLExecutionManagerImpl.java:272)
at com.solarmetric.kodo.impl.jdbc.runtime.JDBCStoreManager.flush(JDBCStoreManager.java:411)
at com.solarmetric.kodo.runtime.PersistenceManagerImpl.flush(PersistenceManagerImpl.java:575)
at com.solarmetric.kodo.ee.EEPersistenceManager.beforeCompletion(EEPersistenceManager.java:192)
at org.jboss.tm.TxCapsule.doBeforeCompletion(TxCapsule.java:1394)
at org.jboss.tm.TxCapsule.commit(TxCapsule.java:364)
at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:73)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:201)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:60)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:130)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:204)
at org.jboss.ejb.StatelessSessionContainer.invoke(StatelessSessionContainer.java:313)
at org.jboss.ejb.Container.invoke(Container.java:712)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:98)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:102)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:77)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:80)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:111)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76)
at $Proxy52.createTemplate(Unknown Source)
at dk.pine.mediacreator.web.TemplateUploadAction.execute(TemplateUploadAction.java:90)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:437)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:264)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1109)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at dk.pine.core.util.web.WebFilter.doFilter(WebFilter.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at dk.pine.core.util.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:527)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
at java.lang.Thread.run(Thread.java:536)
2003-03-31 15:06:28,530 TRACE [org.jboss.tm.TxCapsule] Before completion done, tx=XidImpl [FormatId=257, GlobalId=jla//19908, BranchQual=], status=STATUS_MARKED_ROLLBACK
2003-03-31 15:06:28,530 WARN [org.apache.struts.action.RequestProcessor]
2003-03-31 15:06:28,530 ERROR [org.jboss.web.localhost.Engine] StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
javax.servlet.ServletException
at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:498)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:439)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:264)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1109)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at dk.pine.core.util.web.WebFilter.doFilter(WebFilter.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at dk.pine.core.util.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:527)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
at java.lang.Thread.run(Thread.java:536)
2003-03-31 15:06:28,550 ERROR [org.jboss.web.localhost.Engine] ----- Root Cause -----
java.lang.reflect.UndeclaredThrowableException
at $Proxy52.createTemplate(Unknown Source)
at dk.pine.mediacreator.web.TemplateUploadAction.execute(TemplateUploadAction.java:90)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:437)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:264)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1109)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:470)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at dk.pine.core.util.web.WebFilter.doFilter(WebFilter.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at dk.pine.core.util.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:527)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
at java.lang.Thread.run(Thread.java:536)
Caused by: javax.transaction.RollbackException: Unable to commit, tx=XidImpl [FormatId=257, GlobalId=jla//19908, BranchQual=] status=STATUS_ROLLEDBACK
at org.jboss.tm.TxCapsule.commit(TxCapsule.java:425)
at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:73)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:201)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:60)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:130)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:204)
at org.jboss.ejb.StatelessSessionContainer.invoke(StatelessSessionContainer.java:313)
at org.jboss.ejb.Container.invoke(Container.java:712)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:98)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:102)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:77)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:80)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:111)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76)
... 46 more--
Stephen Kim
[email protected]
SolarMetric, Inc.
http://www.solarmetric.com

Similar Messages

  • [svn] 1043: Bug: LCDS-184 - Concurrent modification exception thrown during remote subscription management

    Revision: 1043
    Author: [email protected]
    Date: 2008-03-31 15:22:13 -0700 (Mon, 31 Mar 2008)
    Log Message:
    Bug: LCDS-184 - Concurrent modification exception thrown during remote subscription management
    QA: Yes
    Doc: No
    Details:
    Make the 'subscriptions' set in MessageClient/RemoteMessageClient concurrent modification safe.
    Ticket Links:
    http://bugs.adobe.com/jira/browse/LCDS-184
    Modified Paths:
    blazeds/branches/3.0.x/modules/core/src/java/flex/messaging/services/messaging/RemoteMess ageClient.java

  • [svn] 1044: Bug: LCDS-184 - Concurrent modification exception thrown during remote subscription management

    Revision: 1044
    Author: [email protected]
    Date: 2008-03-31 15:23:07 -0700 (Mon, 31 Mar 2008)
    Log Message:
    Bug: LCDS-184 - Concurrent modification exception thrown during remote subscription management
    QA: Yes
    Doc: No
    Details:
    Make the 'subscriptions' set in MessageClient/RemoteMessageClient concurrent modification safe.
    Ticket Links:
    http://bugs.adobe.com/jira/browse/LCDS-184
    Modified Paths:
    blazeds/branches/3.0.x/modules/core/src/java/flex/messaging/MessageClient.java

  • Concurrent modification exception inside fully synchronized code

    Hello,
    We have a private list
    private LinkedList<ConnectionChannel> channels = new LinkedList<ConnectionChannel>();that is accessed by multiple threads. One is traversing the items and operating on them, while another thread is adding and removing items to the list. Each such access to the list is protected with
    synchronized(channels) {
    } scopes so that no simultanious access to this list is possible.
    We do however get Concurrent Modification excpetions on this list when we do performance tests with heavy load on the sun server + heavy load on the java server itself. I cannot understand this problem in any other way that this must be a problem with the virtual machine! I know you guys probably will object to this furiously, but I am 100% sure that there is no logical error in my code.
    We're running on jre 1.5..0_03. uname -a on my solaris host gives me:
    SunOS trinity 5.8 Generic_108528-27 sun4u sparc SUNW,Sun-Fire-480R.
    Best regards,
    Helge Fredriksen

    I'm very sure about this, yes. Here's all blocks where the list is used:
            synchronized (channels) {
                logger.info("Connecting observer channel from client at " + token.getSource());
                channels.add(new ConnectionChannel(token, globalObserver));
           synchronized (channels) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Sending local event to processing in " + channels.size() + " parallel channel(s)");
                for (ConnectionChannel connectionChanel : channels) {
                    connectionChanel.send(event);
            synchronized (channels) {
                for (Iterator<ConnectionChannel> iterator = channels.iterator(); iterator.hasNext();) {
                    ConnectionChannel connectionChannel = iterator.next();
                    if (connectionChannel.getToken().getId().equals(token.getId())) {
                        iterator.remove();
                        logger.info("Removing connection channel to " + token.getSource());
                        return;
            }and
            synchronized (channels) {
                for (ConnectionChannel channel : channels) {
                    channel.flush(5000);
            }

  • Concurrent Modifications

    Hello,
    Just a question about a piece of code.
    I have an EJB3 application with a simple Job object containing Configuration objects in an ArrayList.
    The job is managed by a stateful session bean used to add and remove configurations. Cascading for the configurations inside the job is set to CascadeType.ALL.
    Adding configurations works fine, but removing them is a standard way results in ConcurrentModificationExceptions.
    I solved this exception by using thread synchronization inside the removeConfiguration method.
    The workaround code is
    public void removeConfiguration(String configName)
    throws InvalidParameterException, EntityDoesNotExistException,
            OperationNotAllowedException, StorageException {
            if(job == null){
                throw new OperationNotAllowedException("No job was created or selected.");
            //Since removing elements from the list on configurations resulted
            //in a concurrent modification exception at runtime, we had to create
            //a deep clone of the array of configurations. After creating the deep
            //clone, the element to remove will be removed from the deep copy.
            //Both operations require non modification guarantee to the original
            //configuration list.
            //After updating the deep copy, the new list of configurations will
            //be stored in the job. During this operation no modification guarantee
            //is required for the deep copy.
            List<Configuration> configurations = new ArrayList<Configuration>();
            //Prevent modifications to the original list of configurations.
            synchronized(job.getConfigurations()){
                //Create the deep clone while locking the original configurations.
                for(Configuration config : job.getConfigurations()){
                    configurations.add((Configuration)config.clone());
                //Remove the object to be removed from the deep copy while locking
                //the original configurations.
                for(Configuration config : job.getConfigurations()){
                    if(config.getDescription().equals(configName)){
                        configurations.remove(config);
            //Lock the deep copy and write it to the created/selected job.
            //Prevent modifications to the deep copy.
            synchronized(configurations){
                job.setConfigurations(configurations);
    }The code above works as expected and does not cause any exceptions.
    The simplified code causing exceptions to be thrown:
    public void removeConfiguration(String configName)
    throws InvalidParameterException, EntityDoesNotExistException,
              OperationNotAllowedException, StorageException {
            if(job == null){
                throw new OperationNotAllowedException("No job was created or selected.");
            for(Configuration config : job.getConfigurations()){
                    if(config.getDescription().equals(configName)){
                        job.getConfigurations().remove(config);
    }Allthough the first snippet works fine, it seems a bit strange to me. Isn't it recommended not to use synchronization inside business method and leave this up to the container?
    Or is the solution just fine and not a problem at all. Code should be neat and not prone to errors or unexpected behaviour. This is my concern for the code above.
    Better solutions are always welcome and will be Duke rewarded off course!
    Thanks for your opinion. Regards,
    Kurt

    Hi,
    I replaced the synchronized code with the one below and everything works as expected.
    Thanks to both of you for the fast response and for your help.
    The new snippet looks a lot more solid to me.
    public void removeConfiguration(String configName)
    throws InvalidParameterException, OperationNotAllowedException {
            ParameterValidation.stringNotNullNotEmpty(configName, "removeConfiguration", "config name", LOG);
            if(job == null){
                throw new OperationNotAllowedException("No job was created or selected.");
            ListIterator<Configuration> lstConfiguration = job.getConfigurations().listIterator();
            while(lstConfiguration.hasNext()){
                Configuration config = lstConfiguration.next();
                if(config.getDescription().equals(configName)){
                    lstConfiguration.remove();
    }Regards,
    Kurt

  • Concurrent Modification of HashMap

    I have a data structure like below
    HashMap <String, HashMap<String, Object>>
    Basically its a hashmap within a hash map. Its a global data structure.
    I have a timerTask which at every interval iterates the inner hashMap and Modifies an attribute in the Object (Say Decrements an Integer attribute in the Object)
    This will be continuing.
    While the iteration is in progress inside the TimerTask, if i try to Modify the HashMap from outside via some other method call, I receive a concurrent Modification Exception.
    My Question is, How to over come this Problem of managing both the things concurrently?

    wizsen wrote:
    HashMap <String, HashMap<String, Object>>
    Basically its a hashmap within a hash map.That's a bad idea. You almost certainly will want to encapsulate it in one way or another. You probably want a custom class to hold that structure.
    Its a global data structure.What does that mean?
    My Question is, How to over come this Problem of managing both the things concurrently?Avoid accessing the data structure from two places at the same time. Possibly using synchronization.

  • Logging JDO exceptions

    I find that JBoss hides JDO exceptions which occur on commit. Does
    anyone know how to successfully turn on TRACE level log4j output on
    jboss 3.0.1RC1? Alternatively, is there a way of getting Kodo to log
    exceptions when they are thrown?
    Thanks,
    Tom

    You can catch "unhandled" exceptions as well and do what you want with them.
    Things such as NullPointerException fall under RuntimeException. If you catch that, you can log it as you see fit.
    Is that what you're asking?

  • Concurrent modification exception. What is causing this?

    Here is my the pasrt of code causing the exception I have put a line comment ti indicate the line where it occurs. In addition I would like to know the cause of this eception as its a first for me.
    Here is the full exception ....
    Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
            at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:3
    72)
            at java.util.AbstractList$Itr.next(AbstractList.java:343)
            at Contact.modifyExisting(Contact.java:432)
            at Phonebook1.actionPerformed(Phonebook1.java:236)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:19
    95)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
    a:2318)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
    .java:387)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242
            at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
            at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicR
    ootPaneUI.java:191)
            at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
            at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
            at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267)
            at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:2
    16)
            at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.
    java:2926)
            at javax.swing.JComponent.processKeyBindings(JComponent.java:2918)
            at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
            at java.awt.Component.processEvent(Component.java:5815)
            at java.awt.Container.processEvent(Container.java:2058)
            at java.awt.Component.dispatchEventImpl(Component.java:4410)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Component.dispatchEvent(Component.java:4240)
            at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.ja
    va:1848)
            at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboard
    FocusManager.java:697)
            at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeybo
    ardFocusManager.java:962)
            at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeybo
    ardFocusManager.java:834)
            at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFoc
    usManager.java:661)
            at java.awt.Component.dispatchEventImpl(Component.java:4282)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Window.dispatchEventImpl(Window.java:2429)
            at java.awt.Component.dispatchEvent(Component.java:4240)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
    ad.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
    java:183)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:173)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)and the code.......
    if(modifiedWork.length()>0)
                             try
                                  modifiedWorkNum = Integer.parseInt(modifiedWork);
                             } //////// THIS IS LINE 372
                             catch(Exception e)
                                  JOptionPane.showMessageDialog(null,"You may only enter numbers for a valid phone number to try again press the modify nutton again.","Error",JOptionPane.ERROR_MESSAGE);
                                  validModify = false;
                                  return;
                        }Thanks in advance...

    Would you mind looking at my modifyExisting method I apologise as it is long. I have icluded a line comment on line 432.
    public void modifyExisting()
         {// Start of modifyExisting()
              int count = 0;
              int count1 = 0;
              int count2 = 0;
              int modifiedCellNum, modifiedWorkNum, modifiedHomeNum = 0;
              boolean validModify = true;
              boolean found = false;
              String currentHome = "";
              String currentWork = "";
              String currentCell = "";
              if(phoneList.size() > 0)
                   String nameOfContactToEdit = JOptionPane.showInputDialog(null,"Please enter the name of the contact you wish to edit details for or press cancel to exit");
                   if(nameOfContactToEdit == null)
                        finish();
                   if(nameOfContactToEdit.trim().length()<= 0)
                        JOptionPane.showMessageDialog(null,"You have entered an invalid name. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                        modifyExisting();
                        validModify = false;
                        return;
                   String surnameOfContactToEdit = JOptionPane.showInputDialog(null,"Please enter the the surname for "+nameOfContactToEdit+" if one exists or press cancel to exit.");
                   if(surnameOfContactToEdit == null)
                        finish();
                   for(Person m: phoneList)
                        m = phoneList.get(count);
                        if((m.name).equals(nameOfContactToEdit.trim().toUpperCase())&&(m.surname).equals(surnameOfContactToEdit.trim().toUpperCase()))
                             currentHome = m.home;
                             currentWork = m.work;
                             currentCell = m.cell;
                             found = true;
                        count ++;
                   if(found == true)
                        String modifiedName = JOptionPane.showInputDialog("Please enter the new name for contact or press cancel to keep it as "+nameOfContactToEdit+".");
                        if(modifiedName == null)
                             modifiedName = nameOfContactToEdit;
                        if(modifiedName.trim().length()<= 0)
                             JOptionPane.showMessageDialog(null,"You have entered an invalid name. Please press the modify button to try again.","Error",JOptionPane.ERROR_MESSAGE);
                             return;
                        if(modifiedName.trim().length()>10)
                             JOptionPane.showMessageDialog(null,"You may not enter a new name longer than 10 characters long. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                             validModify = false;
                             modifyExisting();
                             return;
                        String modifiedSurname = JOptionPane.showInputDialog("Please enter the new surname for contact or press cancel to keep it as "+surnameOfContactToEdit+".");
                        if(modifiedSurname == null)
                             modifiedSurname = surnameOfContactToEdit;
                        if(modifiedSurname.trim().length()>10)
                             JOptionPane.showMessageDialog(null,"You may not enter a surname longer than 10 characters long. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                             validModify = false;
                             modifyExisting();
                             return;
                        String modifiedHome = JOptionPane.showInputDialog("Please enter a new home number for "+modifiedName+" or press cancel to keep it as is.");
                        if(modifiedHome == null)
                             modifiedHome = currentHome;
                        if(modifiedHome.length()>0)
                             try
                                  modifiedHomeNum = Integer.parseInt(modifiedHome);
                             catch(Exception e)
                                  JOptionPane.showMessageDialog(null,"You may only enter numbers for a valid phone number to try again press the modify nutton again.","Error",JOptionPane.ERROR_MESSAGE);
                                  validModify = false;
                                  return;
                        if(modifiedHome.length() > 10)
                             JOptionPane.showMessageDialog(null,"You may not enter a number longer than 10 characters long. Please press the modify button to try again.","Error",JOptionPane.ERROR_MESSAGE);
                             validModify = false;
                             return;
                        String modifiedWork = JOptionPane.showInputDialog("Please enter a new home number for "+modifiedName+" or press cancel to keep it as is.");
                        if(modifiedHome == null)
                             modifiedWork = currentWork;
                        if(modifiedWork.length()>0)
                             try
                                  modifiedWorkNum = Integer.parseInt(modifiedWork);
                             catch(Exception e)
                                  JOptionPane.showMessageDialog(null,"You may only enter numbers for a valid phone number to try again press the modify nutton again.","Error",JOptionPane.ERROR_MESSAGE);
                                  validModify = false;
                                  return;
                        if(modifiedWork.length() > 10)
                             JOptionPane.showMessageDialog(null,"You may not enter a number longer than 10 characters long. Please press the modify button to try again.","Error",JOptionPane.ERROR_MESSAGE);
                             validModify = false;
                             return;
                        String modifiedCell = JOptionPane.showInputDialog("Please enter a new home number for "+modifiedName+" or press cancel to keep it as is.");
                        if(modifiedCell == null)
                             modifiedCell = currentCell;
                        if(modifiedCell.length()>0)
                             try
                                  modifiedCellNum = Integer.parseInt(modifiedCell);
                             catch(Exception e)
                                  JOptionPane.showMessageDialog(null,"You may only enter numbers for a valid phone number to try again press the modify nutton again.","Error",JOptionPane.ERROR_MESSAGE);
                                  validModify = false;
                                  return;
                        if(modifiedCell.length() > 10)
                             JOptionPane.showMessageDialog(null,"You may not enter a number longer than 10 characters long. Please press the modify button to try again.","Error",JOptionPane.ERROR_MESSAGE);
                             validModify = false;
                             return;
                        if((modifiedHome.length() <= 0) && (modifiedWork.length() <= 0) && (modifiedCell.length() <= 0))
                             JOptionPane.showMessageDialog(null,"The contact must have at least one number to be included in the phonebook. Please press modify button to try again.","Error",JOptionPane.ERROR_MESSAGE);
                             validModify = false;
                             return;
                        for(Person z: phoneList)
                             z = phoneList.get(count1);
                             if((z.name).equals(modifiedName.trim().toUpperCase()) && (z.surname).equals(modifiedSurname.trim().toUpperCase()))
                                  JOptionPane.showMessageDialog(null,"You may not enter duplicate contacts. Please try again.","Error",JOptionPane.ERROR_MESSAGE);
                                  validModify = false;
                                  modifyExisting();
                                  return;
                             count1 ++;
                        if(validModify == true)
                             for(Person contactToMod: phoneList)/////////////////////////////////////////////////////// line 432
                                  contactToMod = phoneList.get(count2);
                                  if((contactToMod.name.equals(nameOfContactToEdit.trim().toUpperCase())) && (contactToMod.surname.equals(surnameOfContactToEdit.trim().toUpperCase())))
                                       try
                                            contactToMod.setName(modifiedName.trim().toUpperCase());
                                            contactToMod.setSurname(modifiedSurname.trim().toUpperCase());
                                            contactToMod.setHome(modifiedHome);
                                            contactToMod.setWork(modifiedWork);
                                            contactToMod.setCell(modifiedCell);
                                            phoneList.add(contactToMod);
                                            JOptionPane.showMessageDialog(null,"Updated contact succesfully.","Information",JOptionPane.INFORMATION_MESSAGE);
                                       catch(Exception e)
                                            JOptionPane.showMessageDialog(null,"The contact was not updated. If probelm persists please contact system administrator.","Error",JOptionPane.ERROR_MESSAGE);
                                  count2 ++;
                   else
                        JOptionPane.showMessageDialog(null,"No contact with that name and surname exists. Please press the modify button to try again.","Error",JOptionPane.ERROR_MESSAGE);
              else
                   JOptionPane.showMessageDialog(null,"The phone list is empty and there are no contacts to modify.","Information Message",JOptionPane.INFORMATION_MESSAGE);
         }// End of modifyExisting()Edited by: Yucca on May 6, 2008 8:12 PM

  • Concurrent Modification Exception

    im running 2 "for" loops on a TreeMap's keySet. But everytime I remove a mapping from the inner loop using iterators I get the CMException. Is there a way to remove a mapping in the inner loop without getting the Exception?

    Try Using two references to the same iterator. At the moment, it sounds like you are getting an iterator twice, once for each loop.

  • List Concurrent Modification Exception

    The following codes throws the java.util.ConcurrentModificationException
    public static void main(String[] args) {
            List<Integer> list1 = new LinkedList<Integer>();
            ListIterator head = list1.listIterator();
            list1.add(1);
            while(head.hasNext()) {
                System.out.println(head.next());
        }But if I put list1.add(1) before
       ListIterator head = list1.listIterator();, then it runs fine.
    I've googled the exception and get the idea that it is caused by 2 threads accessing the list. Where are the 2 threads?
    Edited by: pinkyDeveloper on Feb 17, 2009 3:00 PM

    nothing to do with threads and everything to do with changing the list after getting the iterator and then iterating with the iterator. Don't do this unless you change the list through the iterator. You might want to read the API on LinkedList which states:
    The iterators returned by this class's iterator and listIterator methods are fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException.
    Edited by: Encephalopathic on Feb 17, 2009 3:13 PM

  • Concurrent modification exception while iterating through list

    Hi,
    I have a list of objects. I use for each loop in java to iterate through that list of objects and display them.
    The problem is that while iterating other thread can add or remove some objects from that list, and I get ConcurrentModificationException.
    How can I handle this problem. How can I be sure that I am iteration through the updated list.
    Thank you

    Synchonize on the list before iterating through it, and make sure that other code also synchronizes on the list before adding to it or removing from it. Using a list implementation that simply synchronizes all the methods (e.g. Vector) will not do that, you have to do it yourself.

  • Concurrent Modification in a loop

    This loop iterates through a list of urls that parses a document for urls, if it finds some, then it adds them to a PriorityQueue. I'm getting the modification exception when the loop runs the second time at the it.next() line. Can someone help me with why?
        public synchronized void TidyProcess()
            Iterator it = urlQueue.iterator();
            String userURL;
            while (it.hasNext())
                javax.swing.JEditorPane jEditorPane1 = TC1.getEditorPane();
                userURL = it.next().toString();
                int position = jEditorPane1.getText().length();
                try
                    jEditorPane1.getDocument().insertString(position, "Processing: " + userURL, null);
                catch(javax.swing.text.BadLocationException e)
                    logger.debug(e.getMessage());
                Document tidydoc = TP1.tagParser(userURL); //retrieves document in XML format
                String xmldoc = tidydoc.toXML();
                urlQueue.addAll(TP1.getUrls(tidydoc)); //Processes the document for urls, returns them in a PriorityQueue collection
        }Message was edited by:
    subnetrx
    Message was edited by:
    subnetrx

    You need to add via the Iterator (cast it to a ListIterator) not to the collection itself, otherwise the iterator will complain.

  • Concurrent Task/Service Exception

    Olá! How can I get the exception raised on a concurrent Task/Service class?
    I have this Service:
    private Service<Void> myService = new Service<Void>() {
        @Override
        protected Task createTask() {
            return new Task<Void>() {
                @Override
                protected Void call() throws Exception {
                    throw new Exception("Hello, exception!");
    };And this initialize function:
    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        myService.stateProperty().addListener(new ChangeListener<State>() {
            @Override
            public void changed(ObservableValue<? extends State> ov, State t, State t1) {
                System.out.println("state.changed " + t1);
        myService.exceptionProperty().addListener(new ChangeListener<Throwable>() {
            @Override
            public void changed(ObservableValue<? extends Throwable> ov, Throwable t, Throwable t1) {
                t1.printStackTrace();
    }I call the Service this way:
    @FXML
    protected void myButtonAction(ActionEvent event) {
        myService.start();
    }Finally, the output is:
    state.changed SCHEDULED
    state.changed RUNNING
    And the function silently stops at the point of the exception.
    There's a way to get the exception raised?
    Thanks,
    Victor (Brazil)
    PS: b42.
    Edited by: Victor on 05/09/2011 07:32

    Hi Victor,
    This is unfortunately a bug in the Asynch implementation at the moment. Seems a fix is due in b43: http://javafx-jira.kenai.com/browse/RT-15612
    In the interim, I am using a dodgy little hack. I create my own Service base class like so:
    private Service<Void> myService = new Service<Void>() {
        private Throwable lastException;   
        @Override
        protected Task createTask() {
            return new Task<Void>() {
                @Override
                protected Void call() throws Exception {
                    lastException = null;
                    try {
                        // do background task as normal
                    catch (Throwable t) {
                        lastException = t;
    };Then your initialise looks something like:
    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        myService.stateProperty().addListener(new ChangeListener<State>() {
            @Override
            public void changed(ObservableValue<? extends State> ov, State t, State t1) {
                 if (t1 == Worker.State.SUCCEEDED) {
                     if (myService.getException() != null) {
                         // do success
                     } else {
                         // do failure with myService.getException()
    }If you go for this, t's worth creating a base class that hides this cludge, then when b43 is released you have less refactoring to do.
    Enjoy,
    zonski

  • Concurrent modification of Indirect Set

    Hello, the last months I have been working with JPA without going deeply in it, currently my project is suffering some issues with concurrency.
    I have a OneToMany relationship defined as a Set (default values that is transparent indirection), the core of the project is a EJB 3; when two concurrent invocations of the EJB 3 try to modify (adding and removing) an element of the Set toplink send a ConcurrentModificationException, I thought that toplink manages the concurrency but I must haver missed something...
    Caused by: Exception [TOPLINK-6055] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.QueryException
    Exception Description: The method invocation of the method [public java.lang.Object java.util.HashSet.clone()] on the object [[class org.cesga.ifec.engine.database.ACRequestRegister[id=1642], class org.cesga.ifec.engine.database.ACRequestRegister[id=1643], of class [class java.util.HashSet], triggered an exception.
    Internal Exception: java.lang.reflect.InvocationTargetException
    Target Invocation Exception: java.util.ConcurrentModificationException
    at oracle.toplink.essentials.exceptions.QueryException.methodInvocationFailed(QueryException.java:746)
    at oracle.toplink.essentials.internal.queryframework.InterfaceContainerPolicy.invokeCloneMethodOn(InterfaceContainerPolicy.java:221)
    at oracle.toplink.essentials.internal.queryframework.InterfaceContainerPolicy.cloneFor(InterfaceContainerPolicy.java:105)
    at oracle.toplink.essentials.mappings.CollectionMapping.buildCloneForPartObject(CollectionMapping.java:173)
    at oracle.toplink.essentials.internal.indirection.UnitOfWorkQueryValueHolder.buildCloneFor(UnitOfWorkQueryValueHolder.java:75)
    at oracle.toplink.essentials.internal.indirection.UnitOfWorkValueHolder.instantiateImpl(UnitOfWorkValueHolder.java:176)
    at oracle.toplink.essentials.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:247)
    at oracle.toplink.essentials.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:105)
    at oracle.toplink.essentials.indirection.IndirectSet.buildDelegate(IndirectSet.java:193)
    at oracle.toplink.essentials.indirection.IndirectSet.getDelegate(IndirectSet.java:308)
    at oracle.toplink.essentials.indirection.IndirectSet.add(IndirectSet.java:168)
    at org.cesga.ifec.engine.Engine.newACRequest(Engine.java:1608)
    at sun.reflect.GeneratedMethodAccessor224.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1067)
    at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:176)
    at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2895)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3986)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:197)
    ... 62 more
    Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor213.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at oracle.toplink.essentials.internal.security.PrivilegedAccessHelper.invokeMethod(PrivilegedAccessHelper.java:322)
    at oracle.toplink.essentials.internal.queryframework.InterfaceContainerPolicy.invokeCloneMethodOn(InterfaceContainerPolicy.java:216)
    ... 80 more
    Caused by: java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
    at java.util.HashMap$EntryIterator.next(HashMap.java:834)
    at java.util.HashMap$EntryIterator.next(HashMap.java:832)
    at java.util.HashMap.putAllForCreate(HashMap.java:435)
    at java.util.HashMap.clone(HashMap.java:669)
    at java.util.HashSet.clone(HashSet.java:236)
    ... 85 more
    Thanks!!
    Luis M.

    The latest code in EclipseLink seems to be correctly synchronizing. You could try using EclipseLink 1.0 and see if the issue still occurs.
    Workarounds may include:
    - using a List or Collection instead of Set
    - use eager
    - use an isolated (not shared) cache
    James : http://www.eclipselink.org

  • Package Variable Concurrent Modification

    Say I have the following public global variable defined in a package specification:
    create or replace package my_pkg is
    my_var number := 0;
    end my_pkg;
    Is it possible for procedures from other packages (or within the same package) to concurrently access/modify the value of my_var, or is there some sort of locking mechanism to protect against this? If not, is there any sort of semaphore implementation that would allow me to manually protect a shared resource?

    crottyan wrote:
    So it's not possible to have multiple concurrent processes executing within a single session?Yes, but not the way you think.
    A session is a serialised process. A session is serviced by a serialised Oracle server process. Threading is not supported in this processing model - and for very good and sound reasons.
    However, a serialised session can be serviced by multiple parallel processing processes - courtesy of the Parallel Query (PQ) feature of Oracle. PQ can be used for servicing DDL and DML calls made by that session, in parallel - and this also includes the ability to run PL/SQL code in parallel via a feature called pipeline table functions.
    However, this is more comparable to the Unix fork() model than the Windows CreateThread() model. Each PQ process is an actual process image in the kernel. It does not share the code or data segments of the process servicing that session.
    There is a fundamental concept issue with your question though. It does not make ANY sense within Oracle architecture to have a package's data segment (and a static variable in it), being accessed concurrently. This is not how Oracle's concurrency model works. This should not even be a consideration during the design.
    I suggest that you familiarise yourself properly with the Oracle architecture as the question shows serious gaps in understanding this architecture.

Maybe you are looking for

  • Time Machine ERASES EARLY SAVES WITHOUT PERMISSION

    If the backup storage is nearly full, Time Machine will clear space for a new backup by DELETING THE OLDEST FILES. It only tells you after the fact that it's done so, thus I never had the opportunity to prevent erasure of the very first set of files

  • Dynamic Identifiers

    Hello! I'm working on a custom app that displays dynamic form elements based on how many elements were set in the admin tool. Where I'm having an issue is when the mx:Repeater is displaying each form element. Here's an example: <mx:Repeater id="lblRe

  • BT848 TV not working with custom 2.6.22 kernel

    Hi, I installed a custom compiled 2.6.22 kernel (built the traditional way, using menuconfig in /usr/src/linux-2.6.22) but then tvtime could not work with my BT848 TV card (error message - "not a video4linux device" and "cannot open capture device /d

  • How to load html in loader

    Hi, I am loading one swf file in loader. but it was notatall loading here. That movie size is more than 1mb. But if i open the same file with html script, the move is able to open in the browse. So, can i load that html in my loader. Can anybody give

  • Locking issue with BAPI_GOODSMVT_CREATE in userexit_save_document

    Hello All, I am performing a separate goods movement for one of the materials in the delivery userexit_save_document during PGI. I have an issue. We might have multiple users trying to PGI deliveries and thereby performing the goods movement for the