You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by nt...@apache.org on 2007/03/08 01:30:23 UTC

svn commit: r515867 - in /webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description: DescriptionFactory.java DescriptionKey.java impl/DescriptionFactoryImpl.java impl/EndpointDescriptionImpl.java impl/ServiceDescriptionImpl.java

Author: nthaker
Date: Wed Mar  7 16:30:22 2007
New Revision: 515867

URL: http://svn.apache.org/viewvc?view=rev&rev=515867
Log:
Axis2-2299

Fix for caching ServiceDescription.

Added:
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java
Modified:
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionFactory.java
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java

Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionFactory.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionFactory.java?view=diff&rev=515867&r1=515866&r2=515867
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionFactory.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionFactory.java Wed Mar  7 16:30:22 2007
@@ -25,6 +25,7 @@
 import javax.xml.namespace.QName;
 
 import org.apache.axis2.description.AxisService;
+import org.apache.axis2.jaxws.ClientConfigurationFactory;
 import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
 import org.apache.axis2.jaxws.description.impl.DescriptionFactoryImpl;
 
@@ -175,5 +176,11 @@
         return DescriptionFactoryImpl.createServiceDescriptionFromServiceImpl(serviceImplClass, axisService);
     }
     
-
+    /**
+     * Creates Client ConfigurationFactory used to create AxisConfiguration.  
+     * @return A Client Configuration Factory's new instance. ClinetConfigurationFactory is Singleton.
+    */
+    public static ClientConfigurationFactory createClientConfigurationFactory(){
+        return DescriptionFactoryImpl.getClientConfigurationFactory();
+    }
 }

Added: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java?view=auto&rev=515867
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java (added)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java Wed Mar  7 16:30:22 2007
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Copyright 2006 International Business Machines Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.axis2.jaxws.description;
+
+import java.net.URL;
+import javax.xml.namespace.QName;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.jaxws.ExceptionFactory;
+
+public class DescriptionKey {
+
+    private QName serviceName = null;
+
+    private URL wsdlUrl = null;
+
+    private Class serviceClass = null;
+
+    private ConfigurationContext configContext = null;
+
+    public DescriptionKey(QName serviceName, URL wsdlUrl, Class serviceClass,
+            ConfigurationContext configContext) {
+        super();
+        this.serviceName = serviceName;
+        this.wsdlUrl = wsdlUrl;
+        this.serviceClass = serviceClass;
+        this.configContext = configContext;
+
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+
+        if (!(o instanceof DescriptionKey)) {
+            return false;
+        }
+
+        DescriptionKey description = (DescriptionKey) o;
+
+        if (serviceName == null) {
+            throw ExceptionFactory
+                    .makeWebServiceException(org.apache.axis2.i18n.Messages
+                            .getMessage("DescriptionRegistryErr0"));
+        }
+
+        return description.serviceName.equals(this.serviceName)
+                && description.wsdlUrl !=null ? description.wsdlUrl.equals(this.wsdlUrl): this.wsdlUrl == null
+                && description.serviceClass == this.serviceClass
+                && description.configContext == this.configContext;
+    }
+
+    @Override
+    public int hashCode() {
+
+        int hash = 1;
+        hash = 31 * hash + ((serviceName == null) ? 0 : serviceName.hashCode());
+        hash = hash + ((wsdlUrl == null) ? 0 : wsdlUrl.hashCode());
+        hash = hash + ((serviceClass == null) ? 0 : serviceClass.hashCode());
+        hash = hash + ((configContext == null) ? 0 : configContext.hashCode());
+        return hash;
+
+    }
+
+    public ConfigurationContext getConfigContext() {
+        return configContext;
+    }
+
+    public void setConfigContext(ConfigurationContext configContext) {
+        this.configContext = configContext;
+    }
+
+    public QName getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(QName serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public URL getWsdlUrl() {
+        return wsdlUrl;
+    }
+
+    public void setWsdlUrl(URL wsdlUrl) {
+        this.wsdlUrl = wsdlUrl;
+    }
+
+    public Class getServiceClass() {
+        return serviceClass;
+    }
+
+    public void setServiceClass(Class serviceClass) {
+        this.serviceClass = serviceClass;
+    }
+
+    public String printKey() {
+
+        String sName = (serviceName != null) ? serviceName.toString() : "";
+        String sWsdlURL = (wsdlUrl != null) ? wsdlUrl.toString() : "";
+        String sClass = (serviceClass != null) ? serviceClass.toString() : "";
+        String sConfig = (configContext != null) ? configContext.toString()
+                : "";
+        String key = sName + sWsdlURL + sClass + sConfig;
+        return key;
+    }
+}

Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java?view=diff&rev=515867&r1=515866&r2=515867
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java Wed Mar  7 16:30:22 2007
@@ -25,14 +25,19 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.namespace.QName;
 
+import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.description.AxisService;
+import org.apache.axis2.jaxws.ClientConfigurationFactory;
 import org.apache.axis2.jaxws.ExceptionFactory;
 import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.description.DescriptionKey;
 import org.apache.axis2.jaxws.description.EndpointDescription;
 import org.apache.axis2.jaxws.description.ServiceDescription;
 import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
@@ -50,6 +55,8 @@
  */
 public class DescriptionFactoryImpl {
     private static final Log log = LogFactory.getLog(DescriptionFactoryImpl.class);
+    private static ClientConfigurationFactory clientConfigFactory = ClientConfigurationFactory.newInstance();
+    private static Map<DescriptionKey, ServiceDescription> cache = new Hashtable<DescriptionKey, ServiceDescription>();
 
     /**
      * A DescrptionFactory can not be instantiated; all methods are static.
@@ -62,12 +69,42 @@
      */
     public static ServiceDescription createServiceDescription(URL wsdlURL,
             QName serviceQName, Class serviceClass) {
-        ServiceDescription serviceDesc = new ServiceDescriptionImpl(wsdlURL, serviceQName, serviceClass);
-        
-        if (log.isDebugEnabled()) {
-            log.debug("ServiceDescription created with WSDL URL: " + wsdlURL + "; QName: " + serviceQName + "; Class: " + serviceClass);
-            log.debug(serviceDesc.toString());
+        ConfigurationContext configContext = DescriptionFactory.createClientConfigurationFactory().getClientConfigurationContext();
+        DescriptionKey key = new DescriptionKey(serviceQName, wsdlURL, serviceClass, configContext);
+        if(log.isDebugEnabled()){
+            log.debug("Cache Map = "+ cache.toString());
+            if(key !=null)
+                log.debug("Description Key = " + key.printKey());
+            
+        }
+        ServiceDescription serviceDesc = cache.get(key);
+        if(log.isDebugEnabled()){
+            log.debug("Check to see if ServiceDescription is found in cache");
         }
+        if(serviceDesc !=null){
+            if(log.isDebugEnabled()){
+                log.debug("ServiceDescription found in the cache");
+                log.debug(serviceDesc.toString());
+            }
+        }
+        if(serviceDesc == null){
+            if(log.isDebugEnabled()){
+                log.debug("ServiceDescription not found in the cache");
+                log.debug(" creating new ServiceDescriptionImpl");
+            }
+            
+            serviceDesc = new ServiceDescriptionImpl(wsdlURL, serviceQName, serviceClass);
+            if (log.isDebugEnabled()) {
+                log.debug("ServiceDescription created with WSDL URL: " + wsdlURL + "; QName: " + serviceQName + "; Class: " + serviceClass);
+                log.debug(serviceDesc.toString());
+            }
+            if(log.isDebugEnabled()){
+                log.debug("Caching new ServiceDescription in the cache");
+                
+            }
+            cache.put(key, serviceDesc);
+        }
+        
         return serviceDesc;
     }
 
@@ -179,6 +216,14 @@
             log.debug("EndpointDescription updated: " + endpointDesc);
         }
         return endpointDesc;
+    }
+    
+    public static ClientConfigurationFactory getClientConfigurationFactory() {
+        
+        if (clientConfigFactory == null ) {
+            clientConfigFactory = ClientConfigurationFactory.newInstance();
+        }
+        return clientConfigFactory;
     }
 
     /**

Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java?view=diff&rev=515867&r1=515866&r2=515867
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java Wed Mar  7 16:30:22 2007
@@ -52,6 +52,7 @@
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder;
 import org.apache.axis2.description.WSDL11ToAxisServiceBuilder;
+import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.java.security.AccessController;
 import org.apache.axis2.jaxws.ExceptionFactory;
 import org.apache.axis2.jaxws.description.EndpointDescription;
@@ -854,6 +855,10 @@
             if(serviceClient == null) {
                 ConfigurationContext configCtx = getServiceDescription().getAxisConfigContext();
                 AxisService axisSvc = getAxisService();
+                AxisConfiguration axisCfg = configCtx.getAxisConfiguration();
+                if(axisCfg.getService(axisSvc.getName()) != null) {
+                    axisSvc.setName(axisSvc.getName() + this.hashCode());
+                } 
                 serviceClient = new ServiceClient(configCtx, axisSvc);
             }
         } catch (AxisFault e) {

Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java?view=diff&rev=515867&r1=515866&r2=515867
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java Wed Mar  7 16:30:22 2007
@@ -520,7 +520,7 @@
     ClientConfigurationFactory getClientConfigurationFactory() {
         
         if (clientConfigFactory == null ) {
-            clientConfigFactory = ClientConfigurationFactory.newInstance();
+            clientConfigFactory = DescriptionFactory.createClientConfigurationFactory();
         }
         return clientConfigFactory;
     }



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