You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/06/08 17:35:26 UTC

svn commit: r952697 - in /cayenne/main/trunk/framework: cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/ cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/spi/ cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuratio...

Author: aadamchik
Date: Tue Jun  8 15:35:26 2010
New Revision: 952697

URL: http://svn.apache.org/viewvc?rev=952697&view=rev
Log:
CAY-1421 CayenneRuntime shutdown functionality

* adding Injector shutdown functionality and hooking it up to CayenneFilter and ROP servlet

Modified:
    cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/Injector.java
    cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/spi/DefaultInjector.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/server/ROPHessianServlet.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/web/CayenneFilter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/event/DefaultEventManager.java

Modified: cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/Injector.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/Injector.java?rev=952697&r1=952696&r2=952697&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/Injector.java (original)
+++ cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/Injector.java Tue Jun  8 15:35:26 2010
@@ -52,4 +52,11 @@ public interface Injector {
      * initialize tested objects that are relying on field injecton.
      */
     void injectMembers(Object object);
+
+    /**
+     * A lifecycle method that let's the injector's services to clean up their state and
+     * release resources. This method would normally generate a scope end event for the
+     * injector's one and only singleton scope.
+     */
+    void shutdown();
 }

Modified: cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/spi/DefaultInjector.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/spi/DefaultInjector.java?rev=952697&r1=952696&r2=952697&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/spi/DefaultInjector.java (original)
+++ cayenne/main/trunk/framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/spi/DefaultInjector.java Tue Jun  8 15:35:26 2010
@@ -25,6 +25,7 @@ import org.apache.cayenne.ConfigurationE
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.di.Key;
 import org.apache.cayenne.di.Module;
+import org.apache.cayenne.di.OnScopeEnd;
 import org.apache.cayenne.di.Provider;
 import org.apache.cayenne.di.Scope;
 
@@ -137,6 +138,10 @@ public class DefaultInjector implements 
         provider1.get();
     }
 
+    public void shutdown() {
+        singletonScope.postScopeEvent(OnScopeEnd.class);
+    };
+
     SingletonScope getSingletonScope() {
         return singletonScope;
     }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/server/ROPHessianServlet.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/server/ROPHessianServlet.java?rev=952697&r1=952696&r2=952697&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/server/ROPHessianServlet.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/server/ROPHessianServlet.java Tue Jun  8 15:35:26 2010
@@ -22,9 +22,11 @@ import java.util.Collection;
 import java.util.Map;
 
 import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 
 import org.apache.cayenne.DataChannel;
+import org.apache.cayenne.configuration.CayenneRuntime;
 import org.apache.cayenne.configuration.server.CayenneServerModule;
 import org.apache.cayenne.configuration.server.CayenneServerRuntime;
 import org.apache.cayenne.configuration.web.RequestHandler;
@@ -59,17 +61,20 @@ import com.caucho.hessian.server.Hessian
  */
 public class ROPHessianServlet extends HessianServlet {
 
+    protected ServletContext servletContext;
+
     /**
      * Installs {@link HessianService} to respond to {@link RemoteService} requests.
      */
     @Override
     public void init(ServletConfig configuration) throws ServletException {
 
+        this.servletContext = configuration.getServletContext();
+
         WebConfiguration configAdapter = new WebConfiguration(configuration);
 
         String configurationLocation = configAdapter.getConfigurationLocation();
-        Map<String, String> eventBridgeParameters = configAdapter
-                .getOtherParameters();
+        Map<String, String> eventBridgeParameters = configAdapter.getOtherParameters();
 
         Collection<Module> modules = configAdapter
                 .createModules(
@@ -97,7 +102,18 @@ public class ROPHessianServlet extends H
         // TODO: andrus 04/14/2010: if CayenneFilter and ROPHessianServlet are used
         // together in the same webapp, maybe a good idea to ensure they are using the
         // same stack...Merging CayenneRuntime's modules might be tough though.
-        WebUtil.setCayenneRuntime(configuration.getServletContext(), runtime);
+
+        WebUtil.setCayenneRuntime(servletContext, runtime);
         super.init(configuration);
     }
+
+    @Override
+    public void destroy() {
+        super.destroy();
+
+        CayenneRuntime runtime = WebUtil.getCayenneRuntime(servletContext);
+        if (runtime != null) {
+            runtime.getInjector().shutdown();
+        }
+    }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/web/CayenneFilter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/web/CayenneFilter.java?rev=952697&r1=952696&r2=952697&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/web/CayenneFilter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/web/CayenneFilter.java Tue Jun  8 15:35:26 2010
@@ -76,7 +76,11 @@ public class CayenneFilter implements Fi
     }
 
     public void destroy() {
-        // noop for now...
+        CayenneRuntime runtime = WebUtil.getCayenneRuntime(servletContext);
+
+        if (runtime != null) {
+            runtime.getInjector().shutdown();
+        }
     }
 
     public void doFilter(

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/event/DefaultEventManager.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/event/DefaultEventManager.java?rev=952697&r1=952696&r2=952697&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/event/DefaultEventManager.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/event/DefaultEventManager.java Tue Jun  8 15:35:26 2010
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.WeakHashMap;
 
 import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.di.OnScopeEnd;
 import org.apache.cayenne.util.Invocation;
 
 /**
@@ -97,6 +98,7 @@ public class DefaultEventManager impleme
      * 
      * @since 3.0
      */
+    @OnScopeEnd
     public void shutdown() {
         this.stopped = true;