You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2008/02/26 23:04:02 UTC
svn commit: r631403 - in /webservices/axis2/trunk/java/modules:
integration/test/org/apache/axis2/engine/
kernel/src/org/apache/axis2/client/ kernel/src/org/apache/axis2/context/
kernel/src/org/apache/axis2/description/ kernel/src/org/apache/axis2/engi...
Author: dims
Date: Tue Feb 26 14:03:54 2008
New Revision: 631403
URL: http://svn.apache.org/viewvc?rev=631403&view=rev
Log:
Fix for AXIS2-1053 - ConcurrentModificationException when concurrent threads try to engage the Addressing module
Modified:
webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/PausingHandlerExecutionTest.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/ServiceClient.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/MessageContext.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java
webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java
webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSelfManagedDataTest.java
webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java
webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java
Modified: webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/PausingHandlerExecutionTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/PausingHandlerExecutionTest.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/PausingHandlerExecutionTest.java (original)
+++ webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/PausingHandlerExecutionTest.java Tue Feb 26 14:03:54 2008
@@ -349,7 +349,7 @@
Phase phase = (Phase)handler;
System.out.println("Phase name [" + phase.getName() + "]");
- ArrayList list2 = phase.getHandlers();
+ List list2 = phase.getHandlers();
Iterator it2 = list2.iterator();
checkHandler(it2);
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/ServiceClient.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/ServiceClient.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/ServiceClient.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/ServiceClient.java Tue Feb 26 14:03:54 2008
@@ -264,7 +264,9 @@
* Returns the AxisConfiguration associated with the client.
*/
public AxisConfiguration getAxisConfiguration() {
- return axisConfig;
+ synchronized(this.axisConfig) {
+ return axisConfig;
+ }
}
/**
@@ -336,7 +338,7 @@
* @throws AxisFault if something goes wrong
*/
public void engageModule(String moduleName) throws AxisFault {
- synchronized (this) {
+ synchronized (this.axisConfig) {
AxisModule module = axisConfig.getModule(moduleName);
if (module != null) {
axisService.engageModule(module);
@@ -362,12 +364,14 @@
* @param moduleName name of Module to disengage
*/
public void disengageModule(String moduleName) {
- AxisModule module = axisConfig.getModule(moduleName);
- if (module != null) {
- try {
- axisService.disengageModule(module);
- } catch (AxisFault axisFault) {
- log.error(axisFault.getMessage(), axisFault);
+ synchronized (this.axisConfig) {
+ AxisModule module = axisConfig.getModule(moduleName);
+ if (module != null) {
+ try {
+ axisService.disengageModule(module);
+ } catch (AxisFault axisFault) {
+ log.error(axisFault.getMessage(), axisFault);
+ }
}
}
}
@@ -536,10 +540,8 @@
if(options.isCallTransportCleanup()){
response.getEnvelope().build();
cleanupTransport();
- return response.getEnvelope().getBody().getFirstElement();
- } else {
- return response.getEnvelope().getBody().getFirstElement();
}
+ return response.getEnvelope().getBody().getFirstElement();
}
/**
@@ -822,12 +824,13 @@
throw new IllegalArgumentException("AxisService is null");
}
- axisConfig.removeService(this.axisService.getName());
- this.axisService = axisService;
-
- axisService.setClientSide(true);
- axisConfig.addService(axisService);
-
+ synchronized(this.axisConfig) {
+ axisConfig.removeService(this.axisService.getName());
+ this.axisService = axisService;
+
+ axisService.setClientSide(true);
+ axisConfig.addService(axisService);
+ }
AxisServiceGroup axisServiceGroup = axisService.getAxisServiceGroup();
ServiceGroupContext serviceGroupContext =
configContext.createServiceGroupContext(axisServiceGroup);
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/MessageContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/MessageContext.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/MessageContext.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/MessageContext.java Tue Feb 26 14:03:54 2008
@@ -74,6 +74,7 @@
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
+import java.util.List;
/**
* <p>Axis2 states are held in two information models, called description hierarchy
@@ -1827,7 +1828,7 @@
* @param map users should pass null as this is just a holder for the recursion
* @return a list of unigue object instances
*/
- private ArrayList flattenHandlerList(ArrayList list, LinkedHashMap map) {
+ private ArrayList flattenHandlerList(List list, LinkedHashMap map) {
if (map == null) {
map = new LinkedHashMap();
@@ -3768,7 +3769,7 @@
*/
private void setupPhaseList(Phase phase, MetaDataEntry mdPhase) {
// get the list from the phase object
- ArrayList handlers = phase.getHandlers();
+ List handlers = phase.getHandlers();
if (handlers.isEmpty()) {
// done, make sure there is no list in the given meta data
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java Tue Feb 26 14:03:54 2008
@@ -16,6 +16,7 @@
package org.apache.axis2.description;
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
@@ -36,7 +37,6 @@
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -50,7 +50,7 @@
private PolicyInclude policyInclude = null;
- private HashMap children;
+ private Map children;
protected Map engagedModules;
@@ -67,7 +67,7 @@
public AxisDescription() {
parameterInclude = new ParameterIncludeImpl();
- children = new HashMap();
+ children = new ConcurrentHashMap();
}
public void addParameterObserver(ParameterObserver observer) {
@@ -486,7 +486,7 @@
* @throws AxisFault if there's a problem engaging
*/
public void engageModule(AxisModule axisModule, AxisDescription source) throws AxisFault {
- if (engagedModules == null) engagedModules = new HashMap();
+ if (engagedModules == null) engagedModules = new ConcurrentHashMap();
String moduleName = axisModule.getName();
for (Iterator iterator = engagedModules.values().iterator(); iterator.hasNext();) {
AxisModule tempAxisModule = ((AxisModule) iterator.next());
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java Tue Feb 26 14:03:54 2008
@@ -20,6 +20,7 @@
package org.apache.axis2.engine;
+import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.HandlerDescription;
@@ -30,8 +31,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
/**
* A Phase is an ordered collection of Handlers.
@@ -48,7 +49,7 @@
/**
* Field handlers
*/
- private ArrayList handlers;
+ private List handlers;
/**
* A handler has been marked as present in both the first phase and the last phase
@@ -83,7 +84,7 @@
* @param phaseName the name for this Phase
*/
public Phase(String phaseName) {
- handlers = new ArrayList();
+ handlers = new CopyOnWriteArrayList();
this.phaseName = phaseName;
}
@@ -113,7 +114,7 @@
* @param handlerDesc the HandlerDescription to add
* @throws PhaseException if there is a problem
*/
- public synchronized void addHandler(HandlerDescription handlerDesc) throws PhaseException {
+ public void addHandler(HandlerDescription handlerDesc) throws PhaseException {
Iterator handlers_itr = getHandlers().iterator();
while (handlers_itr.hasNext()) {
@@ -131,7 +132,7 @@
}
if (handlerDesc.getRules().isPhaseFirst() && handlerDesc.getRules().isPhaseLast()) {
- if (handlers.size() > 0) {
+ if (!handlers.isEmpty()) {
throw new PhaseException(this.getPhaseName()
+ " already contains Handlers, and "
+ handlerDesc.getName()
@@ -356,7 +357,7 @@
*
* @return Returns an ArrayList of Handlers
*/
- public ArrayList getHandlers() {
+ public List getHandlers() {
return handlers;
}
Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveATest.java Tue Feb 26 14:03:54 2008
@@ -61,6 +61,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import junit.framework.TestCase;
@@ -494,8 +495,8 @@
String name1 = p1.getName();
String name2 = p2.getName();
- ArrayList list1 = p1.getHandlers();
- ArrayList list2 = p2.getHandlers();
+ List list1 = p1.getHandlers();
+ List list2 = p2.getHandlers();
if ((list1 == null) && (list2 == null)) {
log.debug("MessageContextSaveATest: comparePhases: Phase1[" + name1 +
Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSelfManagedDataTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSelfManagedDataTest.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSelfManagedDataTest.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSelfManagedDataTest.java Tue Feb 26 14:03:54 2008
@@ -60,6 +60,7 @@
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
public class MessageContextSelfManagedDataTest extends TestCase {
protected static final Log log = LogFactory.getLog(MessageContextSelfManagedDataTest.class);
@@ -913,8 +914,8 @@
Phase p1 = (Phase) o1;
Phase p2 = (Phase) o2;
- ArrayList list1 = p1.getHandlers();
- ArrayList list2 = p2.getHandlers();
+ List list1 = p1.getHandlers();
+ List list2 = p2.getHandlers();
if ((list1 == null) && (list2 == null)) {
return true;
Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java Tue Feb 26 14:03:54 2008
@@ -27,6 +27,7 @@
import org.apache.axis2.phaseresolver.PhaseHolder;
import java.util.ArrayList;
+import java.util.List;
public class AddingHandlerToEachPhaseTest extends AbstractTestCase {
AxisConfiguration axisConfig;
@@ -60,9 +61,9 @@
for (int i = 0; i < inPhase.size(); i++) {
found = false;
Phase phase = (Phase) inPhase.get(i);
- ArrayList hnadles = phase.getHandlers();
- for (int j = 0; j < hnadles.size(); j++) {
- Handler handler = (Handler) hnadles.get(j);
+ List handlers = phase.getHandlers();
+ for (int j = 0; j < handlers.size(); j++) {
+ Handler handler = (Handler) handlers.get(j);
if (h1.equals(handler)) {
found = true;
}
@@ -99,8 +100,8 @@
ph.addHandler(hm);
for (int i = 0; i < inPhase.size(); i++) {
Phase phase = (Phase) inPhase.get(i);
- ArrayList hnadles = phase.getHandlers();
- Handler handler = (Handler) hnadles.get(0);
+ List handlers = phase.getHandlers();
+ Handler handler = (Handler) handlers.get(0);
if (!h1.equals(handler)) {
fail("Some thing has gone wrong hnadler does not exit as phase " +
"first handler the phase :"
@@ -133,8 +134,8 @@
ph.addHandler(hm);
for (int i = 0; i < inPhase.size(); i++) {
Phase phase = (Phase) inPhase.get(i);
- ArrayList hnadles = phase.getHandlers();
- Handler handler = (Handler) hnadles.get(0);
+ List handlers = phase.getHandlers();
+ Handler handler = (Handler) handlers.get(0);
assertNull(handler.getHandlerDesc().getRules().getAfter());
}
}
Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java?rev=631403&r1=631402&r2=631403&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java Tue Feb 26 14:03:54 2008
@@ -32,6 +32,7 @@
import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
import junit.framework.TestCase;
@@ -79,7 +80,7 @@
hm1.setRules(rule1);
ph.addHandler(hm1);
- ArrayList handlers = p1.getHandlers();
+ List handlers = p1.getHandlers();
Handler handler = (Handler) handlers.get(0);
if (handler != h2) {
fail("Computed Hnadler order is wrong ");
@@ -128,7 +129,7 @@
hm.setRules(rule);
ph.addHandler(hm);
- ArrayList handlers = p1.getHandlers();
+ List handlers = p1.getHandlers();
Handler handler = (Handler) handlers.get(0);
if (handler != h2) {
fail("Computed Handler order is wrong ");
@@ -200,7 +201,7 @@
hm4.setRules(rule4);
ph.addHandler(hm4);
- ArrayList handlers = p1.getHandlers();
+ List handlers = p1.getHandlers();
boolean foundH1 = false;
boolean foundH4 = false;
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org