Dennis, Curiosity: Would just switching from ArrayList and HashMap to CopyOnWriteArrayList and ConcurrentHashMap be a better solution for this? In general, I'm not a fan of sticking synchronized blocks all over the place if we don't need to.
Dan On Monday 21 February 2011 4:54:03 AM dsosno...@apache.org wrote: > Author: dsosnoski > Date: Mon Feb 21 09:54:02 2011 > New Revision: 1072914 > > URL: http://svn.apache.org/viewvc?rev=1072914&view=rev > Log: > Sychronize use of collections in WS-RM acknowledgement processing > (CXF-3273) > > Modified: > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Destination.java > > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapIntercept > or.java > > Modified: > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Destination.java > URL: > http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/c > xf/ws/rm/Destination.java?rev=1072914&r1=1072913&r2=1072914&view=diff > ========================================================================== > ==== --- > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Destination.java > (original) +++ > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Destination.java Mon > Feb 21 09:54:02 2011 @@ -140,13 +140,14 @@ public class Destination > extends Abstrac > if (null == ars) { > return; > } > - for (AckRequestedType ar : ars) { > - Identifier id = ar.getIdentifier(); > - DestinationSequence seq = getSequence(id); > - if (null == seq) { > - continue; > + synchronized (ars) { > + for (AckRequestedType ar : ars) { > + Identifier id = ar.getIdentifier(); > + DestinationSequence seq = getSequence(id); > + if (null != seq) { > + ackImmediately(seq, message); > + } > } > - ackImmediately(seq, message); > } > } > > > Modified: > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java > URL: > http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/c > xf/ws/rm/RMInInterceptor.java?rev=1072914&r1=1072913&r2=1072914&view=diff > ========================================================================== > ==== --- > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java > (original) +++ > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java > Mon Feb 21 09:54:02 2011 @@ -123,13 +123,15 @@ public class > RMInInterceptor extends Abs > > Collection<SequenceAcknowledgement> acks = rmps.getAcks(); > if (null != acks) { > - for (SequenceAcknowledgement ack : acks) { > - Identifier id = ack.getIdentifier(); > - SourceSequence ss = source.getSequence(id); > - if (null != ss) { > - ss.setAcknowledged(ack); > - } else { > - throw (new > SequenceFaultFactory()).createUnknownSequenceFault(id); + > synchronized (acks) { > + for (SequenceAcknowledgement ack : acks) { > + Identifier id = ack.getIdentifier(); > + SourceSequence ss = source.getSequence(id); > + if (null != ss) { > + ss.setAcknowledged(ack); > + } else { > + throw (new > SequenceFaultFactory()).createUnknownSequenceFault(id); + > } > } > } > } > > Modified: > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java > URL: > http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/c > xf/ws/rm/RMProperties.java?rev=1072914&r1=1072913&r2=1072914&view=diff > ========================================================================== > ==== --- > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java > (original) +++ > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java > Mon Feb 21 09:54:02 2011 @@ -40,11 +40,15 @@ public class RMProperties { > } > > public void setAcks(Collection<SequenceAcknowledgement> a) { > - acks = a; > + synchronized (a) { > + acks = a; > + } > } > > public void setAcksRequested(Collection<AckRequestedType> ar) { > - acksRequested = ar; > + synchronized (ar) { > + acksRequested = ar; > + } > } > > public void setSequence(SequenceType s) { > @@ -65,9 +69,11 @@ public class RMProperties { > if (null == acks) { > acks = new ArrayList<SequenceAcknowledgement>(); > } > - SequenceAcknowledgement ack = seq.getAcknowledgment(); > - acks.add(ack); > - seq.acknowledgmentSent(); > + synchronized (acks) { > + SequenceAcknowledgement ack = seq.getAcknowledgment(); > + acks.add(ack); > + seq.acknowledgmentSent(); > + } > } > > } > > Modified: > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapIntercept > or.java URL: > http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/c > xf/ws/rm/soap/RMSoapInterceptor.java?rev=1072914&r1=1072913&r2=1072914&view > =diff > ========================================================================== > ==== --- > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapIntercept > or.java (original) +++ > cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapIntercept > or.java Mon Feb 21 09:54:02 2011 @@ -202,22 +202,26 @@ public class > RMSoapInterceptor extends A > } > Collection<SequenceAcknowledgement> acks = rmps.getAcks(); > if (null != acks) { > - for (SequenceAcknowledgement ack : acks) { > - encodeProperty(ack, > - RMConstants.getSequenceAckQName(), > - SequenceAcknowledgement.class, > - hdr, > - marshaller); > + synchronized (acks) { > + for (SequenceAcknowledgement ack : acks) { > + encodeProperty(ack, > + RMConstants.getSequenceAckQName(), > + SequenceAcknowledgement.class, > + hdr, > + marshaller); > + } > } > } > Collection<AckRequestedType> requested = > rmps.getAcksRequested(); if (null != requested) { > - for (AckRequestedType ar : requested) { > - encodeProperty(ar, > - RMConstants.getAckRequestedQName(), > - AckRequestedType.class, > - hdr, > - marshaller); > + synchronized (requested) { > + for (AckRequestedType ar : requested) { > + encodeProperty(ar, > + RMConstants.getAckRequestedQName(), > + AckRequestedType.class, > + hdr, > + marshaller); > + } > } > } > Node node = hdr.getFirstChild(); -- Daniel Kulp dk...@apache.org http://dankulp.com/blog Talend - http://www.talend.com