Author: thilinamb Date: Tue Mar 6 06:21:17 2012 New Revision: 1297344 URL: http://svn.apache.org/viewvc?rev=1297344&view=rev Log: Fixing RAMPART-332 - Making getEffectivePolicy() method thread safe.
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisMessage.java Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java?rev=1297344&r1=1297343&r2=1297344&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java (original) +++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java Tue Mar 6 06:21:17 2012 @@ -19,11 +19,6 @@ package org.apache.axis2.description; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; @@ -36,6 +31,12 @@ import org.apache.axis2.util.WSDLSeriali import org.apache.axis2.wsdl.WSDLConstants; import org.apache.neethi.Policy; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + public class AxisBindingMessage extends AxisDescription { private String name; @@ -50,8 +51,9 @@ public class AxisBindingMessage extends // WSDL 2.0 serializer private boolean fault = false; - private Policy effectivePolicy = null; - private Date lastPolicyCalcuatedTime = null; + private volatile Policy effectivePolicy = null; + private volatile Date lastPolicyCalculatedTime = null; + private final ReentrantLock reentrantLock = new ReentrantLock(); public boolean isFault() { return fault; @@ -218,12 +220,17 @@ public class AxisBindingMessage extends return (AxisBindingOperation) parent; } - public Policy getEffectivePolicy() { - if (lastPolicyCalcuatedTime == null || isPolicyUpdated()) { - effectivePolicy = calculateEffectivePolicy(); - } - return effectivePolicy; - } + public Policy getEffectivePolicy() { + if (lastPolicyCalculatedTime == null || isPolicyUpdated()) { + synchronized (this) { + if (lastPolicyCalculatedTime == null || isPolicyUpdated()) { + effectivePolicy = calculateEffectivePolicy(); + lastPolicyCalculatedTime = new Date(); + } + } + } + return effectivePolicy; + } public Policy calculateEffectivePolicy() { PolicySubject policySubject = null; @@ -286,20 +293,19 @@ public class AxisBindingMessage extends .getAttachedPolicyComponents()); } - lastPolicyCalcuatedTime = new Date(); return PolicyUtil.getMergedPolicy(policyList, axisService); } private boolean isPolicyUpdated() { if (getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisBindingOperation AxisBindingOperation axisBindingOperation = getAxisBindingOperation(); if (axisBindingOperation != null && axisBindingOperation.getPolicySubject().getLastUpdatedTime() - .after(lastPolicyCalcuatedTime)) { + .after(lastPolicyCalculatedTime)) { return true; } // AxisBinding @@ -307,7 +313,7 @@ public class AxisBindingMessage extends : axisBindingOperation.getAxisBinding(); if (axisBinding != null && axisBinding.getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisEndpoint @@ -315,13 +321,13 @@ public class AxisBindingMessage extends .getAxisEndpoint(); if (axisEndpoint != null && axisEndpoint.getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisMessage if (axisMessage != null && axisMessage.getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisOperation @@ -329,7 +335,7 @@ public class AxisBindingMessage extends : axisMessage.getAxisOperation(); if (axisOperation != null && axisOperation.getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisService @@ -337,7 +343,7 @@ public class AxisBindingMessage extends : axisOperation.getAxisService(); if (axisService != null && axisService.getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisConfiguration @@ -345,7 +351,7 @@ public class AxisBindingMessage extends : axisService.getAxisConfiguration(); if (axisConfiguration != null && axisConfiguration.getPolicySubject().getLastUpdatedTime() - .after(lastPolicyCalcuatedTime)) { + .after(lastPolicyCalculatedTime)) { return true; } return false; Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisMessage.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisMessage.java?rev=1297344&r1=1297343&r2=1297344&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisMessage.java (original) +++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisMessage.java Tue Mar 6 06:21:17 2012 @@ -19,13 +19,6 @@ package org.apache.axis2.description; -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; -import java.util.List; - -import javax.xml.namespace.QName; - import org.apache.axis2.AxisFault; import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; import org.apache.axis2.engine.AxisConfiguration; @@ -35,11 +28,13 @@ import org.apache.axis2.util.PolicyUtil; import org.apache.axis2.wsdl.SOAPHeaderMessage; import org.apache.neethi.Policy; import org.apache.neethi.PolicyComponent; -import org.apache.ws.commons.schema.XmlSchema; -import org.apache.ws.commons.schema.XmlSchemaElement; -import org.apache.ws.commons.schema.XmlSchemaImport; -import org.apache.ws.commons.schema.XmlSchemaInclude; -import org.apache.ws.commons.schema.XmlSchemaObjectCollection; +import org.apache.ws.commons.schema.*; + +import javax.xml.namespace.QName; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; /** @@ -66,10 +61,10 @@ public class AxisMessage extends AxisDes //To chcek whether the message is wrapped or unwrapped private boolean wrapped = true; - - private Policy effectivePolicy = null; - private Date lastPolicyCalcuatedTime = null; - + + private volatile Policy effectivePolicy = null; + private volatile Date lastPolicyCalculatedTime = null; + public String getMessagePartName() { return messagePartName; } @@ -242,13 +237,18 @@ public class AxisMessage extends AxisDes public void setWrapped(boolean wrapped) { this.wrapped = wrapped; } - + public Policy getEffectivePolicy() { - if (lastPolicyCalcuatedTime == null || isPolicyUpdated()) { - effectivePolicy = calculateEffectivePolicy(); - } - return effectivePolicy; - } + if (lastPolicyCalculatedTime == null || isPolicyUpdated()) { + synchronized (this) { + if (lastPolicyCalculatedTime == null || isPolicyUpdated()) { + effectivePolicy = calculateEffectivePolicy(); + lastPolicyCalculatedTime = new Date(); + } + } + } + return effectivePolicy; + } public Policy calculateEffectivePolicy() { PolicySubject policySubject; @@ -282,21 +282,20 @@ public class AxisMessage extends AxisDes } Policy result = PolicyUtil.getMergedPolicy(policyList, axisService); - lastPolicyCalcuatedTime = new Date(); return result; } public boolean isPolicyUpdated() { // AxisMessage if (getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisOperation AxisOperation axisOperation = (AxisOperation) parent; if (axisOperation != null && axisOperation.getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisService @@ -304,7 +303,7 @@ public class AxisMessage extends AxisDes : axisOperation.getAxisService(); if (axisService != null && axisService.getPolicySubject().getLastUpdatedTime().after( - lastPolicyCalcuatedTime)) { + lastPolicyCalculatedTime)) { return true; } // AxisConfiguration @@ -312,6 +311,6 @@ public class AxisMessage extends AxisDes : axisService.getAxisConfiguration(); return axisConfiguration != null && axisConfiguration.getPolicySubject().getLastUpdatedTime() - .after(lastPolicyCalcuatedTime); + .after(lastPolicyCalculatedTime); } }