You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ds...@apache.org on 2011/02/22 09:22:32 UTC

svn commit: r1073249 - in /cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm: Destination.java RMInInterceptor.java RMProperties.java soap/RMSoapInterceptor.java

Author: dsosnoski
Date: Tue Feb 22 08:22:32 2011
New Revision: 1073249

URL: http://svn.apache.org/viewvc?rev=1073249&view=rev
Log:
Eliminate need for synchronization blocks by converting to CopyOnWriteArrayList collections.

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/RMSoapInterceptor.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/cxf/ws/rm/Destination.java?rev=1073249&r1=1073248&r2=1073249&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 Tue Feb 22 08:22:32 2011
@@ -140,14 +140,13 @@ public class Destination extends Abstrac
         if (null == ars) {
             return;
         }
-        synchronized (ars) {
-            for (AckRequestedType ar : ars) {
-                Identifier id = ar.getIdentifier();
-                DestinationSequence seq = getSequence(id);
-                if (null != seq) {
-                    ackImmediately(seq, message);
-                }
+        for (AckRequestedType ar : ars) {
+            Identifier id = ar.getIdentifier();
+            DestinationSequence seq = getSequence(id);
+            if (null == seq) {
+                continue;
             }
+            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/cxf/ws/rm/RMInInterceptor.java?rev=1073249&r1=1073248&r2=1073249&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 Tue Feb 22 08:22:32 2011
@@ -123,15 +123,13 @@ public class RMInInterceptor extends Abs
         
         Collection<SequenceAcknowledgement> acks = rmps.getAcks();
         if (null != acks) {
-            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);
-                    }
+            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/cxf/ws/rm/RMProperties.java?rev=1073249&r1=1073248&r2=1073249&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 Tue Feb 22 08:22:32 2011
@@ -21,6 +21,7 @@ package org.apache.cxf.ws.rm;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 public class RMProperties {
     private SequenceType sequence;
@@ -40,15 +41,13 @@ public class RMProperties {
     }
     
     public void setAcks(Collection<SequenceAcknowledgement> a) {
-        synchronized (a) {
-            acks = a;
-        }
+        // use threadsafe implementation for working copy, to avoid concurrent modifications
+        acks = new CopyOnWriteArrayList<SequenceAcknowledgement>(a);
     }
     
     public void setAcksRequested(Collection<AckRequestedType> ar) {
-        synchronized (ar) {
-            acksRequested = ar;
-        }
+        // use threadsafe implementation for working copy, to avoid concurrent modifications
+        acksRequested = new CopyOnWriteArrayList<AckRequestedType>(ar);       
     }
     
     public void setSequence(SequenceType s) {
@@ -69,11 +68,9 @@ public class RMProperties {
         if (null == acks) {
             acks = new ArrayList<SequenceAcknowledgement>();
         }
-        synchronized (acks) {
-            SequenceAcknowledgement ack = seq.getAcknowledgment();
-            acks.add(ack);
-            seq.acknowledgmentSent();
-        }
+        SequenceAcknowledgement ack = seq.getAcknowledgment();
+        acks.add(ack);
+        seq.acknowledgmentSent();
     }
   
 }

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java?rev=1073249&r1=1073248&r2=1073249&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java Tue Feb 22 08:22:32 2011
@@ -202,26 +202,22 @@ public class RMSoapInterceptor extends A
             } 
             Collection<SequenceAcknowledgement> acks = rmps.getAcks();
             if (null != acks) {
-                synchronized (acks) {
-                    for (SequenceAcknowledgement ack : acks) {
-                        encodeProperty(ack, 
-                                       RMConstants.getSequenceAckQName(), 
-                                       SequenceAcknowledgement.class, 
-                                       hdr,
-                                       marshaller);
-                    }
+                for (SequenceAcknowledgement ack : acks) {
+                    encodeProperty(ack, 
+                                   RMConstants.getSequenceAckQName(), 
+                                   SequenceAcknowledgement.class, 
+                                   hdr,
+                                   marshaller);
                 }
             }
             Collection<AckRequestedType> requested = rmps.getAcksRequested();
             if (null != requested) {
-                synchronized (requested) {
-                    for (AckRequestedType ar : requested) {
-                        encodeProperty(ar, 
-                                       RMConstants.getAckRequestedQName(), 
-                                       AckRequestedType.class, 
-                                       hdr,
-                                       marshaller);
-                    }
+                for (AckRequestedType ar : requested) {
+                    encodeProperty(ar, 
+                                   RMConstants.getAckRequestedQName(), 
+                                   AckRequestedType.class, 
+                                   hdr,
+                                   marshaller);
                 }
             }
             Node node = hdr.getFirstChild();