axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n...@apache.org
Subject svn commit: r495106 [2/10] - in /webservices/axis2/trunk/java/modules: integration/ integration/test/org/apache/axis2/engine/ integration/test/org/apache/axis2/mtom/ kernel/src/org/apache/axis2/addressing/ kernel/src/org/apache/axis2/client/ kernel/src...
Date Thu, 11 Jan 2007 04:04:33 GMT
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?view=diff&rev=495106&r1=495105&r2=495106
==============================================================================
--- 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
Wed Jan 10 20:04:31 2007
@@ -56,8 +56,8 @@
     private final Map operationContextMap = new HashMap();
     private Hashtable serviceGroupContextMap = new Hashtable();
     private Hashtable applicationSessionServiceGroupContextTable = new Hashtable();
-    private transient AxisConfiguration axisConfiguration;
-    private transient ThreadFactory threadPool;
+    private AxisConfiguration axisConfiguration;
+    private ThreadFactory threadPool;
     //To keep TransportManager instance
     private ListenerManager listenerManager;
 
@@ -124,16 +124,30 @@
         if (serviceContext == null) {
             if (Constants.SCOPE_APPLICATION.equals(axisService.getScope())) {
                 String serviceGroupName = ((AxisServiceGroup) axisService.getParent()).getServiceGroupName();
-                serviceGroupContext = (ServiceGroupContext) applicationSessionServiceGroupContextTable.get(
-                        serviceGroupName);
+                serviceGroupContext = null;
+
+                synchronized (applicationSessionServiceGroupContextTable) {
+                    if (applicationSessionServiceGroupContextTable != null) {
+                        serviceGroupContext = (ServiceGroupContext) applicationSessionServiceGroupContextTable.get(
+                                serviceGroupName);
+                    }
+                }
+
                 if (serviceGroupContext == null) {
                     AxisServiceGroup axisServiceGroup = messageContext.getAxisServiceGroup();
                     if (axisServiceGroup == null) {
                         axisServiceGroup = (AxisServiceGroup) axisService.getParent();
                     }
                     serviceGroupContext = new ServiceGroupContext(messageContext.getConfigurationContext(),
-                            axisServiceGroup);
-                    applicationSessionServiceGroupContextTable.put(serviceGroupName, serviceGroupContext);
+                                                                  axisServiceGroup);
+
+                    synchronized (applicationSessionServiceGroupContextTable) {
+                        if (applicationSessionServiceGroupContextTable == null) {
+                            applicationSessionServiceGroupContextTable = new Hashtable();
+                        }
+                        applicationSessionServiceGroupContextTable.put(serviceGroupName,
serviceGroupContext);
+                    }
+
                 }
                 serviceContext = serviceGroupContext.getServiceContext(axisService);
 
@@ -209,28 +223,41 @@
      * @param mepContext
      */
     public void registerOperationContext(String messageID,
-                                                      OperationContext mepContext) {
+                                         OperationContext mepContext) {
         mepContext.setKey(messageID);
-        this.operationContextMap.put(messageID, mepContext);
+        synchronized (operationContextMap) {
+            this.operationContextMap.put(messageID, mepContext);
+        }
     }
 
     public void registerServiceGroupContext(ServiceGroupContext serviceGroupContext) {
         String id = serviceGroupContext.getId();
 
-        if (serviceGroupContextMap.get(id) == null) {
-            serviceGroupContextMap.put(id, serviceGroupContext);
-            serviceGroupContext.touch();
-            serviceGroupContext.setParent(this);
+        synchronized (serviceGroupContextMap) {
+            if (serviceGroupContextMap == null) {
+                serviceGroupContextMap = new Hashtable();
+            }
+
+            if ((serviceGroupContextMap.isEmpty()) || (serviceGroupContextMap.get(id) ==
null)) {
+                serviceGroupContextMap.put(id, serviceGroupContext);
+                serviceGroupContext.touch();
+                serviceGroupContext.setParent(this);
+            }
         }
 
         // this is the best time to clean up the SGCtxts since are not being used anymore
         cleanupServiceGroupContexts();
     }
 
-    public void addServiceGroupContextintoApplicatoionScopeTable(
-            ServiceGroupContext serviceGroupContext) {
-        applicationSessionServiceGroupContextTable.put(
-                serviceGroupContext.getDescription().getServiceGroupName(), serviceGroupContext);
+    public void addServiceGroupContextintoApplicatoionScopeTable(ServiceGroupContext serviceGroupContext)
{ 
+
+        synchronized (applicationSessionServiceGroupContextTable) {
+            if (applicationSessionServiceGroupContextTable == null) {
+                applicationSessionServiceGroupContextTable = new Hashtable();
+            }
+            applicationSessionServiceGroupContextTable.put(
+                    serviceGroupContext.getDescription().getServiceGroupName(), serviceGroupContext);
+        }
     }
 
     public AxisConfiguration getAxisConfiguration() {
@@ -243,13 +270,84 @@
      * @return Returns OperationContext <code>OperationContext<code>
      */
     public OperationContext getOperationContext(String id) {
-        return (OperationContext) this.operationContextMap.get(id);
+        OperationContext opCtx = null;
+        
+        synchronized (operationContextMap) {
+            if (operationContextMap == null) {
+                return null;
+            }
+            opCtx = (OperationContext) this.operationContextMap.get(id); 
+        }
+
+        return opCtx;
     }
 
     public Map getOperationContextMap() {
         return this.operationContextMap;
     }
 
+    public OperationContext findOperationContext(String operationName, String serviceName,
String serviceGroupName)
+    {
+        if (operationName == null)
+        {
+            return null;
+        }
+        
+        if (serviceName == null)
+        {
+            return null;
+        }
+
+        // group name is not necessarily a prereq
+        // but if the group name is non-null, then it has to match
+
+        synchronized (operationContextMap)
+        {
+            Iterator it = operationContextMap.keySet().iterator();
+
+            while (it.hasNext())
+            {
+                Object key = it.next();
+                OperationContext value = (OperationContext) operationContextMap.get(key);
+
+                String valueOperationName = null;
+                String valueServiceName = null;
+                String valueServiceGroupName = null;
+
+                if (value != null)
+                {
+                    valueOperationName = value.getOperationName();
+                    valueServiceName = value.getServiceName();
+                    valueServiceGroupName = value.getServiceGroupName();
+
+                    if ((valueOperationName != null) && (valueOperationName.equals(operationName)))
+                    {
+                        if ((valueServiceName != null) && (valueServiceName.equals(serviceName)))
+                        {
+                            if ((valueServiceGroupName != null) && (serviceGroupName
!= null)
+                                && (valueServiceGroupName.equals(serviceGroupName)))
+                            {
+                                // match
+                                return value;
+                            }
+
+                            // or, both need to be null
+                            if ((valueServiceGroupName == null) && (serviceGroupName
== null))
+                            {
+                                // match
+                                return value;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        // if we got here, we did not find an operation context 
+        // that fits the criteria
+        return null;
+    }
+
     /**
      * Allows users to resolve the path relative to the root diretory.
      *
@@ -265,27 +363,72 @@
     }
 
     public ServiceGroupContext getServiceGroupContext(String serviceGroupContextId,
-                                                                   MessageContext msgContext)
{
-        ServiceGroupContext serviceGroupContext;
-            serviceGroupContext = (ServiceGroupContext) serviceGroupContextMap.get(serviceGroupContextId);
-            if (serviceGroupContext != null) {
-                serviceGroupContext.touch();
+                                                      MessageContext msgContext) {
+
+        ServiceGroupContext serviceGroupContext = null;
+        
+        synchronized (serviceGroupContextMap) {
+            if (serviceGroupContextMap != null) {
+                serviceGroupContext = (ServiceGroupContext) serviceGroupContextMap.get(serviceGroupContextId);
+
+                if (serviceGroupContext != null) {
+                    serviceGroupContext.touch();
+                }
             }
+        }
+
         if (serviceGroupContext == null
-                && msgContext.getSessionContext() != null) {
+            && msgContext != null
+            && msgContext.getSessionContext() != null) {
             serviceGroupContext = msgContext.getSessionContext().getServiceGroupContext(
                     serviceGroupContextId);
         }
-        if (serviceGroupContext == null) {
+
+        if (serviceGroupContext == null && msgContext != null) {
             AxisService axisService = msgContext.getAxisService();
             if (axisService != null) {
                 AxisServiceGroup asg = (AxisServiceGroup) axisService.getParent();
                 if (asg != null) {
-                    serviceGroupContext = (ServiceGroupContext)
-                            applicationSessionServiceGroupContextTable.get(asg.getServiceGroupName());
+
+                    synchronized (applicationSessionServiceGroupContextTable) {
+                        if (applicationSessionServiceGroupContextTable != null) {
+                            serviceGroupContext = (ServiceGroupContext)
+                                    applicationSessionServiceGroupContextTable.get(asg.getServiceGroupName());
+                        }
+                    }
                 }
             }
+        }
+
+        return serviceGroupContext;
+    }
+
 
+    /**
+     * Returns a ServiceGroupContext object associated
+     * with the specified ID from the internal table. 
+     * 
+     * @param Id     The ID string associated with the ServiceGroupContext object
+     * @return The ServiceGroupContext object, or null if not found
+     */
+    public ServiceGroupContext getServiceGroupContext(String Id) {
+
+        if (Id == null)
+        {
+            // Hashtables require non-null key-value pairs
+            return null;
+        }
+
+        ServiceGroupContext serviceGroupContext = null;
+
+        synchronized (serviceGroupContextMap)
+        {
+            if (serviceGroupContextMap != null) {
+                serviceGroupContext = (ServiceGroupContext) serviceGroupContextMap.get(Id);
+                if (serviceGroupContext != null) {
+                    serviceGroupContext.touch();
+                }
+            }
         }
 
         return serviceGroupContext;
@@ -338,6 +481,10 @@
     }
 
     private void cleanupServiceGroupContexts() {
+        synchronized (serviceGroupContextMap) {
+            if (serviceGroupContextMap == null) {
+                return;
+            }
             long currentTime = new Date().getTime();
             Iterator sgCtxtMapKeyIter = serviceGroupContextMap.keySet().iterator();
             while (sgCtxtMapKeyIter.hasNext()) {
@@ -351,6 +498,7 @@
                 }
             }
         }
+    }
 
     public ListenerManager getListenerManager() {
         return listenerManager;
@@ -361,7 +509,13 @@
     }
 
     private void cleanupServiceContexts(ServiceGroupContext serviceGroupContext) {
+        if (serviceGroupContext == null) {
+            return;
+        }
         Iterator serviceContecxtes = serviceGroupContext.getServiceContexts();
+        if (serviceContecxtes == null) {
+            return;
+        }
         while (serviceContecxtes.hasNext()) {
             ServiceContext serviceContext = (ServiceContext) serviceContecxtes.next();
             try {
@@ -373,20 +527,19 @@
     }
 
     private void cleanupContexts() {
-        if (applicationSessionServiceGroupContextTable.size() > 0) {
-            Iterator applicationScopeSgs =
-                    applicationSessionServiceGroupContextTable.values().iterator();
+        if ((applicationSessionServiceGroupContextTable != null) &&
+            (applicationSessionServiceGroupContextTable.size() > 0)) {
+            Iterator applicationScopeSgs = applicationSessionServiceGroupContextTable.values().iterator();
             while (applicationScopeSgs.hasNext()) {
                 ServiceGroupContext serviceGroupContext =
                         (ServiceGroupContext) applicationScopeSgs.next();
                 cleanupServiceContexts(serviceGroupContext);
             }
         }
-        if (serviceGroupContextMap.size() > 0) {
+        if ((serviceGroupContextMap != null) && (serviceGroupContextMap.size() >
0)) {
             Iterator sopaSessionSgs = serviceGroupContextMap.values().iterator();
             while (sopaSessionSgs.hasNext()) {
-                ServiceGroupContext serviceGroupContext =
-                        (ServiceGroupContext) sopaSessionSgs.next();
+                ServiceGroupContext serviceGroupContext = (ServiceGroupContext) sopaSessionSgs.next();
                 cleanupServiceContexts(serviceGroupContext);
             }
         }



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


Mime
View raw message