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 de...@apache.org on 2006/10/11 23:23:57 UTC

svn commit: r462952 - in /webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2: ./ deployment/ description/ engine/

Author: deepal
Date: Wed Oct 11 14:23:56 2006
New Revision: 462952

URL: http://svn.apache.org/viewvc?view=rev&rev=462952
Log:
adding servicelifecycle into branch

Added:
    webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ServiceLifeCycle.java
Removed:
    webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/Service.java
Modified:
    webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/Constants.java
    webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
    webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java
    webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/description/AxisService.java
    webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/DependencyManager.java
    webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ListenerManager.java

Modified: webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/Constants.java?view=diff&rev=462952&r1=462951&r2=462952
==============================================================================
--- webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/Constants.java Wed Oct 11 14:23:56 2006
@@ -211,8 +211,6 @@
     public static final String COOKIE_STRING = "Cookie";
     public static final String SESSION_COOKIE = "axis_session";
 
-    public static final String LOAD_ON_STARTUP = "load-on-startup";
-
     /**
      * Addressing Constants
      */

Modified: webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java?view=diff&rev=462952&r1=462951&r2=462952
==============================================================================
--- webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java (original)
+++ webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java Wed Oct 11 14:23:56 2006
@@ -31,8 +31,8 @@
 import org.apache.axis2.deployment.util.Utils;
 import org.apache.axis2.description.*;
 import org.apache.axis2.engine.AxisConfiguration;
-import org.apache.axis2.engine.DependencyManager;
 import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.engine.ServiceLifeCycle;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
@@ -428,12 +428,9 @@
         Iterator services = serviceGroup.getServices();
         while (services.hasNext()) {
             AxisService axisService = (AxisService) services.next();
-            Parameter load_on_startup = axisService.getParameter(Constants.LOAD_ON_STARTUP);
-            if (load_on_startup != null) {
-                String value = (String) load_on_startup.getValue();
-                if ("true".equals(value.trim())) {
-                    DependencyManager.startService(axisService, configContext);
-                }
+            ServiceLifeCycle serviceLifeCycle = axisService.getServiceLifeCycle();
+            if (serviceLifeCycle != null) {
+                serviceLifeCycle.startUp(configContext, axisService);
             }
         }
 

Modified: webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java?view=diff&rev=462952&r1=462951&r2=462952
==============================================================================
--- webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java (original)
+++ webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java Wed Oct 11 14:23:56 2006
@@ -25,7 +25,7 @@
 import org.apache.axis2.description.*;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.MessageReceiver;
-//import org.apache.axis2.engine.ServiceLifeCycle;
+import org.apache.axis2.engine.ServiceLifeCycle;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.util.Loader;
 import org.apache.axis2.wsdl.WSDLConstants;
@@ -119,7 +119,7 @@
                 }
             }
             //Processing service lifecycle attribute
-  /*          OMAttribute serviceLifeCycleClass = service_element.
+            OMAttribute serviceLifeCycleClass = service_element.
                     getAttribute(new QName(TAG_CLASS_NAME));
             if (serviceLifeCycleClass != null) {
                 String className = serviceLifeCycleClass.getAttributeValue();
@@ -133,7 +133,7 @@
                         throw new DeploymentException(e.getMessage(), e);
                     }
                 }
-            }*/
+            }
             //Setting schema namespece if any
             OMElement schemaElement = service_element.getFirstChildWithName(new QName(SCHEMA));
             if (schemaElement != null) {

Modified: webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/description/AxisService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/description/AxisService.java?view=diff&rev=462952&r1=462951&r2=462952
==============================================================================
--- webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/description/AxisService.java (original)
+++ webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/description/AxisService.java Wed Oct 11 14:23:56 2006
@@ -27,6 +27,7 @@
 import org.apache.axis2.deployment.util.Utils;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.engine.ServiceLifeCycle;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.modules.Module;
 import org.apache.axis2.phaseresolver.PhaseResolver;
@@ -124,6 +125,11 @@
     private boolean enableAllTransports = true;
     private List exposedTransports = new ArrayList();
 
+//To keep reference to ServiceLifeCycle instance , if the user has
+    // specified in services.xml
+    private ServiceLifeCycle serviceLifeCycle;
+
+
     /**
      * Keeps track whether the schema locations are adjusted
      */
@@ -1550,5 +1556,13 @@
             }
         }
         return false;
+    }
+
+    public ServiceLifeCycle getServiceLifeCycle() {
+        return serviceLifeCycle;
+    }
+
+    public void setServiceLifeCycle(ServiceLifeCycle serviceLifeCycle) {
+        this.serviceLifeCycle = serviceLifeCycle;
     }
 }

Modified: webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/DependencyManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/DependencyManager.java?view=diff&rev=462952&r1=462951&r2=462952
==============================================================================
--- webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/DependencyManager.java (original)
+++ webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/DependencyManager.java Wed Oct 11 14:23:56 2006
@@ -19,8 +19,6 @@
 
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
-import org.apache.axis2.util.Loader;
-import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.context.ServiceContext;
 import org.apache.axis2.context.ServiceGroupContext;
@@ -28,6 +26,7 @@
 import org.apache.axis2.description.AxisServiceGroup;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.util.Loader;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -50,26 +49,19 @@
                                                       OperationContext opCtx)
             throws AxisFault {
         try {
+            Class classToLoad = obj.getClass();
 
-            // if this service is implementing the o.a.a.Service interface, then use that fact to invoke the
-            // proper method.
-            if (obj instanceof Service) {
-                ((org.apache.axis2.engine.Service) obj).setOperationContext(opCtx);
-            } else {
-                Class classToLoad = obj.getClass();
-
-                // We can not call classToLoad.getDeclaredMethed() , since there
-                //  can be insatnce where mutiple services extends using one class
-                // just for init and other reflection methods
-                Method[] methods = classToLoad.getMethods();
-
-                for (int i = 0; i < methods.length; i++) {
-                    if (MESSAGE_CONTEXT_INJECTION_METHOD.equals(methods[i].getName())
-                            && (methods[i].getParameterTypes().length == 1)
-                            && (methods[i].getParameterTypes()[0] == OperationContext.class)) {
-                        methods[i].invoke(obj, new Object[]{opCtx});
-                        break;
-                    }
+            // We can not call classToLoad.getDeclaredMethed() , since there
+            //  can be insatnce where mutiple services extends using one class
+            // just for init and other reflection methods
+            Method[] methods = classToLoad.getMethods();
+
+            for (int i = 0; i < methods.length; i++) {
+                if (MESSAGE_CONTEXT_INJECTION_METHOD.equals(methods[i].getName())
+                        && (methods[i].getParameterTypes().length == 1)
+                        && (methods[i].getParameterTypes()[0] == OperationContext.class)) {
+                    methods[i].invoke(obj, new Object[]{opCtx});
+                    break;
                 }
             }
         } catch (SecurityException e) {
@@ -90,23 +82,18 @@
     public static void initServiceClass(Object obj,
                                         ServiceContext serviceContext) throws AxisFault {
         try {
-            if (obj instanceof org.apache.axis2.engine.Service) {
-                Service service = (org.apache.axis2.engine.Service) obj;
-                service.init(serviceContext);
-            } else {
-                Class classToLoad = obj.getClass();
-                // We can not call classToLoad.getDeclaredMethed() , since there
-                //  can be insatnce where mutiple services extends using one class
-                // just for init and other reflection methods
-                Method[] methods = classToLoad.getMethods();
-
-                for (int i = 0; i < methods.length; i++) {
-                    if (SERVICE_INIT_METHOD.equals(methods[i].getName())
-                            && (methods[i].getParameterTypes().length == 1)
-                            && (methods[i].getParameterTypes()[0] == ServiceContext.class)) {
-                        methods[i].invoke(obj, new Object[]{serviceContext});
-                        break;
-                    }
+            Class classToLoad = obj.getClass();
+            // We can not call classToLoad.getDeclaredMethed() , since there
+            //  can be insatnce where mutiple services extends using one class
+            // just for init and other reflection methods
+            Method[] methods = classToLoad.getMethods();
+
+            for (int i = 0; i < methods.length; i++) {
+                if (SERVICE_INIT_METHOD.equals(methods[i].getName())
+                        && (methods[i].getParameterTypes().length == 1)
+                        && (methods[i].getParameterTypes()[0] == ServiceContext.class)) {
+                    methods[i].invoke(obj, new Object[]{serviceContext});
+                    break;
                 }
             }
         } catch (SecurityException e) {
@@ -159,59 +146,25 @@
     /**
      * To startup service when user puts load-on-startup parameter
      */
-    public static void startService(AxisService axisService,
-                                    ConfigurationContext configCtx) {
-        ClassLoader classLoader = axisService.getClassLoader();
-        Parameter implInfoParam = axisService.getParameter(Constants.SERVICE_CLASS);
-        if (implInfoParam != null) {
-            try {
-                Class implClass = Loader.loadClass(
-                        classLoader,
-                        ((String) implInfoParam.getValue()).trim());
-                Object serviceImpl = implClass.newInstance();
-                if (serviceImpl instanceof Service) {
-                    org.apache.axis2.engine.Service service = (Service) serviceImpl;
-                    service.startUp(configCtx, axisService);
-                } else {
-                    Method[] methods = serviceImpl.getClass().getMethods();
-                    for (int i = 0; i < methods.length; i++) {
-                        if (SERVICE_START_METHOD.equals(methods[i].getName())
-                                && (methods[i].getParameterTypes().length == 2)
-                                && (methods[i].getParameterTypes()[0] == ConfigurationContext.class)
-                                && (methods[i].getParameterTypes()[1] == AxisService.class)) {
-                            methods[i].invoke(serviceImpl, new Object[]{configCtx, axisService});
-                            break;
-                        }
-                    }
-                }
-            } catch (Exception e) {
-                log.info("Exception trying to call " + SERVICE_START_METHOD, e);
-                new AxisFault(e);
-            }
-        }
-    }
+
 
     public static void destroyServiceObject(ServiceContext serviceContext) throws AxisFault {
         try {
             Object obj = serviceContext.getProperty(ServiceContext.SERVICE_OBJECT);
             if (obj != null) {
                 Class classToLoad = obj.getClass();
-                if (obj instanceof Service) {
-                    org.apache.axis2.engine.Service service = (Service) obj;
-                    service.destroy(serviceContext);
-                } else {
-                    // We can not call classToLoad.getDeclaredMethed() , since there
-                    //  can be insatnce where mutiple services extends using one class
-                    // just for init and other reflection methods
-                    Method[] methods = classToLoad.getMethods();
-
-                    for (int i = 0; i < methods.length; i++) {
-                        if (SERVICE_DESTROY_METHOD.equals(methods[i].getName())
-                                && (methods[i].getParameterTypes().length == 1)
-                                && (methods[i].getParameterTypes()[0] == ServiceContext.class)) {
-                            methods[i].invoke(obj, new Object[]{serviceContext});
-                            break;
-                        }
+
+                // We can not call classToLoad.getDeclaredMethed() , since there
+                //  can be insatnce where mutiple services extends using one class
+                // just for init and other reflection methods
+                Method[] methods = classToLoad.getMethods();
+
+                for (int i = 0; i < methods.length; i++) {
+                    if (SERVICE_DESTROY_METHOD.equals(methods[i].getName())
+                            && (methods[i].getParameterTypes().length == 1)
+                            && (methods[i].getParameterTypes()[0] == ServiceContext.class)) {
+                        methods[i].invoke(obj, new Object[]{serviceContext});
+                        break;
                     }
                 }
             }

Modified: webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ListenerManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ListenerManager.java?view=diff&rev=462952&r1=462951&r2=462952
==============================================================================
--- webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ListenerManager.java (original)
+++ webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ListenerManager.java Wed Oct 11 14:23:56 2006
@@ -175,6 +175,7 @@
             }
         }
         configctx.cleanupContexts();
+        shutDownServices(configctx);
         stopped = true;
     }
 
@@ -203,4 +204,16 @@
     public boolean isStopped() {
         return stopped;
     }
+
+    private void shutDownServices(ConfigurationContext configCtx) {
+        Iterator services = configCtx.getAxisConfiguration().getServices().values().iterator();
+        while (services.hasNext()) {
+            AxisService axisService = (AxisService) services.next();
+            ServiceLifeCycle serviceLifeCycle = axisService.getServiceLifeCycle();
+            if (serviceLifeCycle != null) {
+                serviceLifeCycle.shutDown(configCtx, axisService);
+            }
+        }
+    }
+
 }

Added: webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ServiceLifeCycle.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ServiceLifeCycle.java?view=auto&rev=462952
==============================================================================
--- webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ServiceLifeCycle.java (added)
+++ webservices/axis2/branches/java/1_1/modules/kernel/src/org/apache/axis2/engine/ServiceLifeCycle.java Wed Oct 11 14:23:56 2006
@@ -0,0 +1,43 @@
+package org.apache.axis2.engine;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.description.AxisService;
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* 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.
+*
+*
+*/
+
+/**
+ * When you want to initialize database connections , starting threads and etc..
+ * at the time you deploy  service (similar to loadonstartup).
+ * You need to implement this interface and add additional (optional) attribute
+ * into services.xml <service name=”Foo”  class=”Service life cycle impl class”>
+ */
+
+public interface ServiceLifeCycle {
+
+    /**
+     * this will be called during the deployement time of the service. irrespective
+     * of the service scope this method will be called
+     */
+    public void startUp(ConfigurationContext configctx, AxisService service);
+
+    /**
+     * this will be called during the system shut down time. irrespective
+     * of the service scope this method will be called
+     */
+    public void shutDown(ConfigurationContext configctx, AxisService service);
+}
\ No newline at end of file



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