Author: cziegeler
Date: Fri Apr  8 05:56:58 2005
New Revision: 160553

URL: http://svn.apache.org/viewcvs?view=rev&rev=160553
Log:
Cleanup

Modified:
    cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java

Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java?view=diff&r1=160552&r2=160553
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java Fri Apr  8 
05:56:58 2005
@@ -82,7 +82,7 @@
     protected final Settings settings;
 
     /** The parent service manager TODO This will be made protected*/
-    public final ServiceManager parentManager;
+    public ServiceManager parentManager;
 
     /** TODO This will be made protected */
     public Logger log;
@@ -243,11 +243,11 @@
         // set class loader
         this.appContext.put(Constants.CONTEXT_CLASS_LOADER, 
this.env.getInitClassLoader());
 
-        // create parent service manager
-        final ServiceManager parent = this.getParentServiceManager();
+        // create the Core object
+        final Core core = this.createCore();
 
-        // create a service manager
-        this.parentManager = new RootServiceManager(parent, this.createCore());
+        // create parent service manager
+        this.parentManager = this.getParentServiceManager(core);
     }
 
     public Core getCore() {
@@ -272,7 +272,7 @@
      *
      * @return the parent service manager, or <code>null</code>.
      */
-    protected ServiceManager getParentServiceManager() {
+    protected ServiceManager getParentServiceManager(Core core) {
         String parentServiceManagerClass = 
this.settings.getParentServiceManagerClassName();
         String parentServiceManagerInitParam = null;
         if (parentServiceManagerClass != null) {
@@ -298,8 +298,8 @@
                     this.log.error("Could not initialize parent component 
manager.", e);
                 }
             }
-        }
-        return parentServiceManager;
+        }        
+        return new RootServiceManager(parentServiceManager, core);
     }
 
     /**
@@ -625,10 +625,12 @@
             ContainerUtil.enableLogging(c, getCocoonLogger());
             // TODO: c.setLoggerManager(this.loggerManager);
             ContainerUtil.contextualize(c, this.appContext);
-            final ServiceManager parent = this.getParentServiceManager();
-            if (parent != null) {
-                ContainerUtil.service(c, parent);
-            }
+
+            // create the Core object
+            final Core core = this.createCore();
+            this.parentManager = this.getParentServiceManager(core);
+            ContainerUtil.service(c, this.parentManager);
+
             ContainerUtil.initialize(c);
             this.creationTime = System.currentTimeMillis();
 
@@ -685,6 +687,8 @@
             ContainerUtil.dispose(this.cocoon);
             this.cocoon = null;
         }
+        ContainerUtil.dispose(this.parentManager);
+        this.parentManager = null;
     }
 
     protected Logger getCocoonLogger() {
@@ -763,6 +767,26 @@
      */
     protected void updateEnvironment() throws Exception {
         // can be overridden
+    }
+
+    /**
+     * Dispose Cocoon when servlet is destroyed
+     */
+    public void destroy() {
+        if (this.settings.isInitClassloader()) {
+            try {
+                
Thread.currentThread().setContextClassLoader(this.env.getInitClassLoader());
+            } catch (Exception e) {
+                // ignore this
+            }
+        }
+
+        if (this.cocoon != null) {
+            if (this.log.isDebugEnabled()) {
+                this.log.debug("Servlet destroyed - disposing Cocoon");
+            }
+            this.disposeCocoon();
+        }
     }
 
 }


Reply via email to