You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mi...@apache.org on 2008/10/18 02:19:05 UTC

svn commit: r705807 - /ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java

Author: midon
Date: Fri Oct 17 17:19:05 2008
New Revision: 705807

URL: http://svn.apache.org/viewvc?rev=705807&view=rev
Log:
ODE-382: fix drafted, to be tested

Modified:
    ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java

Modified: ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java?rev=705807&r1=705806&r2=705807&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java (original)
+++ ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java Fri Oct 17 17:19:05 2008
@@ -28,6 +28,9 @@
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.deployment.ServiceBuilder;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.OutInAxisOperation;
+import org.apache.axis2.description.OutOnlyAxisOperation;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
@@ -83,8 +86,11 @@
 
     private static final int EXPIRE_SERVICE_CLIENT = 30000;
 
-    private static ThreadLocal<WatchDog<Map, OptionsObserver>> _cachedOptions = new ThreadLocal<WatchDog<Map, OptionsObserver>>();
-    private static ThreadLocal<WatchDog<Long, ServiceFileObserver>> _cachedClients = new ThreadLocal<WatchDog<Long, ServiceFileObserver>>();
+    private static ThreadLocal<ServiceClient> _cachedClients = new ThreadLocal<ServiceClient>();
+    private WatchDog<Map, OptionsObserver> _axisOptionsWatchDog;
+    private WatchDog<Long, ServiceFileObserver> _axisServiceWatchDog;
+    private ConfigurationContext _configContext;
+
 
     private ExecutorService _executorService;
     private Definition _definition;
@@ -109,6 +115,11 @@
         _server = server;
         _pconf = pconf;
 
+        File fileToWatch = new File(_pconf.getBaseURI().resolve(_serviceName.getLocalPart() + ".axis2"));
+        _axisServiceWatchDog = WatchDog.watchFile(fileToWatch, new ServiceFileObserver(fileToWatch));
+        _axisOptionsWatchDog = new WatchDog<Map, OptionsObserver>(new EndpointPropertiesMutable(), new OptionsObserver());
+        _configContext = new ConfigurationContext(_axisConfig);
+
         // initial endpoint reference
         Element eprElmt = ODEService.genEPRfromWSDL(_definition, serviceName, portName);
         if (eprElmt == null)
@@ -206,32 +217,24 @@
     }
 
     private ServiceClient getServiceClient() throws AxisFault {
-        WatchDog<Long, ServiceFileObserver> serviceClientWatchDog = _cachedClients.get();
-        if (serviceClientWatchDog == null) {
-            File fileToWatch = new File(_pconf.getBaseURI().resolve(_serviceName.getLocalPart() + ".axis2"));
-            serviceClientWatchDog = WatchDog.watchFile(fileToWatch, new ServiceFileObserver(fileToWatch));
-            serviceClientWatchDog.setDelay(EXPIRE_SERVICE_CLIENT);
-            _cachedClients.set(serviceClientWatchDog);
-        }
         try {
             // call manually the check procedure
             // we dont want a dedicated thread for that
-            serviceClientWatchDog.check();
+            _axisServiceWatchDog.check();
+            _axisOptionsWatchDog.check();
         } catch (RuntimeException e) {
             throw AxisFault.makeFault(e.getCause() != null ? e.getCause() : e);
         }
 
-        WatchDog<Map, OptionsObserver> optionsWatchDog = _cachedOptions.get();
-        if (optionsWatchDog == null) {
-            optionsWatchDog = new WatchDog<Map, OptionsObserver>(new EndpointPropertiesMutable(), new OptionsObserver());
-            _cachedOptions.set(optionsWatchDog);
-        }
-        optionsWatchDog.check();
-
         // apply the options to the service client
-        ServiceClient serviceClient = serviceClientWatchDog.getObserver().client;
-        serviceClient.setOptions(optionsWatchDog.getObserver().options);
-        prepareSecurityPolicy(optionsWatchDog.getObserver().options, serviceClient);
+        ServiceClient serviceClient = _cachedClients.get();
+        if (serviceClient == null) {
+            _cachedClients.set(new ServiceClient(_configContext, null));
+        }
+        serviceClient.setAxisService(_axisServiceWatchDog.getObserver().service);
+        serviceClient.setOptions(_axisOptionsWatchDog.getObserver().options);
+        prepareSecurityPolicy(_axisOptionsWatchDog.getObserver().options, serviceClient);
+
         return serviceClient;
     }
 
@@ -416,7 +419,7 @@
      * this service-specific config file.
      */
     private class ServiceFileObserver extends WatchDog.DefaultObserver {
-        ServiceClient client;
+        AxisService service;
         File file;
 
         private ServiceFileObserver(File file) {
@@ -424,15 +427,16 @@
         }
 
         public boolean isInitialized() {
-            return client != null;
+            return service != null;
         }
 
         public void init() {
-            try {
-                client = new ServiceClient(new ConfigurationContext(_axisConfig), null);
-            } catch (AxisFault axisFault) {
-                throw new RuntimeException(axisFault);
-            }
+            service = new AxisService(_serviceName.toString());
+            OutOnlyAxisOperation outOnlyOperation = new OutOnlyAxisOperation(ServiceClient.ANON_OUT_ONLY_OP);
+            service.addOperation(outOnlyOperation);
+
+            OutInAxisOperation outInOperation = new OutInAxisOperation(ServiceClient.ANON_OUT_IN_OP);
+            service.addOperation(outInOperation);
         }
 
         public void onUpdate() {
@@ -444,7 +448,7 @@
                 InputStream ais = file.toURI().toURL().openStream();
                 if (ais != null) {
                     if (__log.isDebugEnabled()) __log.debug("Configuring service " + _serviceName + " using: " + file);
-                    ServiceBuilder builder = new ServiceBuilder(ais, new ConfigurationContext(client.getAxisConfiguration()), client.getAxisService());
+                    ServiceBuilder builder = new ServiceBuilder(ais, _configContext, service);
                     builder.populateService(builder.buildOM());
                 }
             } catch (Exception e) {