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 sc...@apache.org on 2007/09/06 23:01:21 UTC

svn commit: r573377 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context: ConfigurationContext.java OperationContext.java

Author: scheu
Date: Thu Sep  6 14:01:21 2007
New Revision: 573377

URL: http://svn.apache.org/viewvc?rev=573377&view=rev
Log:
AXIS2-3180
Contributor: Bill Nagy
When a persisted OperationContext is "activated", it should only be registered on 
the ConfigurationContext if a response is expected.  Otherwise the OperationContext
will never be freed and could lead to out-of-memory problems.

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/OperationContext.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java?rev=573377&r1=573376&r2=573377&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java Thu Sep  6 14:01:21 2007
@@ -37,6 +37,8 @@
 import org.apache.axis2.util.JavaUtils;
 import org.apache.axis2.util.threadpool.ThreadFactory;
 import org.apache.axis2.util.threadpool.ThreadPool;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import java.io.File;
 import java.net.URL;
@@ -63,6 +65,7 @@
  */
 public class ConfigurationContext extends AbstractContext {
 
+    private static final Log log = LogFactory.getLog(ConfigurationContext.class);
     /**
      * Map containing <code>MessageID</code> to
      * <code>OperationContext</code> mapping.
@@ -277,23 +280,49 @@
      * If the given message id already has a registered operation context,
      * no change is made and the methid resturns false.
      *
-     * @param messageID  the message-id to register
-     * @param mepContext the OperationContext for the specified message-id
-     * @return true if we added a new context, false if the messageID was already there and we did
-     *         nothing
+     * @param messageID
+     * @param mepContext
      */
-    public boolean registerOperationContext(String messageID,
+    public boolean registerOperationContext(String messageID, 
                                             OperationContext mepContext) {
-        mepContext.setKey(messageID);  // TODO: Doing this here seems dangerous....
+        return registerOperationContext(messageID, mepContext, false);
+    }
+    
+    /**
+     * Registers a OperationContext with a given message ID.
+     * If the given message id already has a registered operation context,
+     * no change is made unless the override flag is set. 
+     *
+     * @param messageID
+     * @param mepContext
+     * @param override
+     */
+    public boolean registerOperationContext(String messageID, 
+                                            OperationContext mepContext, 
+                                            boolean override) {
+        boolean alreadyInMap;
+        mepContext.setKey(messageID);
         synchronized (operationContextMap) {
-            if (!operationContextMap.containsKey(messageID)) {
+            alreadyInMap = operationContextMap.containsKey(messageID);
+            if (!alreadyInMap || override) {
                 this.operationContextMap.put(messageID, mepContext);
-                return true;
+            }
+
+            if (log.isDebugEnabled())
+            {
+                log.debug("registerOperationContext ("+override+"): "+
+                          mepContext+" with key: "+messageID);
+                HashMap msgContextMap = mepContext.getMessageContexts();
+                Iterator msgContextIterator = msgContextMap.values().iterator();
+                while (msgContextIterator.hasNext())
+                {
+                    MessageContext msgContext = (MessageContext)msgContextIterator.next();
+                    log.debug("msgContext: "+msgContext+" action: "+msgContext.getWSAAction());
+                }
             }
         }
-        return false;
+        return (!alreadyInMap || override);
     }
-
     /**
      * Unregisters the operation context associated with the given messageID
      *

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/OperationContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/OperationContext.java?rev=573377&r1=573376&r2=573377&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/OperationContext.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/OperationContext.java Thu Sep  6 14:01:21 2007
@@ -27,6 +27,8 @@
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.util.MetaDataEntry;
 import org.apache.axis2.util.ObjectStateUtils;
+import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004_Constants;
+import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2006Constants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -759,14 +761,23 @@
         }
 
         if (key != null) {
-            // make sure this OperationContext object is registered in the
-            // list maintained by the ConfigurationContext object
-            boolean registrationSuceeded = activeCC.registerOperationContext(key, this);
-            if (!registrationSuceeded) {
-                // trace point
-                log.trace(logCorrelationIDString + ":activate():  OperationContext key [" + key +
-                        "] already exists in ConfigurationContext map.  This OperationContext [" +
-                        this.toString() + "] was not added to the table.");
+            // We only want to (re)register this if it's an outbound message
+            String mepString = getAxisOperation().getMessageExchangePattern();
+            if (mepString.equals(WSDL20_2006Constants.MEP_URI_OUT_ONLY)
+                || mepString.equals(WSDL20_2004_Constants.MEP_URI_OUT_ONLY)
+                || ((mepString.equals(WSDL20_2006Constants.MEP_URI_OUT_IN)
+                    || mepString.equals(WSDL20_2004_Constants.MEP_URI_OUT_IN))
+                    && !isComplete)) {
+                    
+                // make sure this OperationContext object is registered in the 
+                // list maintained by the ConfigurationContext object
+                boolean registrationSuceeded = activeCC.registerOperationContext(key, this, true);
+                if (!registrationSuceeded) {
+                    // trace point
+                    log.trace(logCorrelationIDString + ":activate():  OperationContext key [" + key
+                              + "] already exists in ConfigurationContext map.  This OperationContext ["
+                              + this.toString() + "] was not added to the table.");
+                }
             }
         }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org