You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2005/04/11 18:19:12 UTC

svn commit: r160920 - cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/servlet/CocoonServlet.java

Author: sylvain
Date: Mon Apr 11 09:19:10 2005
New Revision: 160920

URL: http://svn.apache.org/viewcvs?view=rev&rev=160920
Log:
Fix order of dispose and create when reloading Cocoon (there were some exceptions in Quartz and EHCacheStore)

Modified:
    cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/servlet/CocoonServlet.java

Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/servlet/CocoonServlet.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/servlet/CocoonServlet.java?view=diff&r1=160919&r2=160920
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/servlet/CocoonServlet.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/servlet/CocoonServlet.java Mon Apr 11 09:19:10 2005
@@ -1056,7 +1056,12 @@
         }
 
         // Get the cocoon engine instance
-        getCocoon(request.getPathInfo(), request.getParameter(Constants.RELOAD_PARAM));
+        
+        if (reloadCocoon(request.getPathInfo(), request.getParameter(Constants.RELOAD_PARAM))) {
+            disposeCocoon();
+            initLogger();
+            createCocoon();
+        }
 
         // Check if cocoon was initialized
         if (this.cocoon == null) {
@@ -1371,6 +1376,12 @@
      */
     private synchronized void createCocoon()
     throws ServletException {
+        
+        // Recheck that we need to create the cocoon object. It can have been created by
+        // a concurrent invocation to this method.
+        if (this.cocoon != null) {
+            return;
+        }
 
         /* HACK for reducing class loader problems.                                     */
         /* example: xalan extensions fail if someone adds xalan jars in tomcat3.2.1/lib */
@@ -1405,7 +1416,6 @@
             ContainerUtil.initialize(c);
             this.creationTime = System.currentTimeMillis();
 
-            disposeCocoon();
             this.cocoon = c;
         } catch (Exception e) {
             if (getLogger().isErrorEnabled()) {
@@ -1493,7 +1503,7 @@
      * Gets the current cocoon object.  Reload cocoon if configuration
      * changed or we are reloading.
      */
-    private void getCocoon(final String pathInfo, final String reloadParam)
+    private boolean reloadCocoon(final String pathInfo, final String reloadParam)
     throws ServletException {
         if (this.allowReload) {
             boolean reload = false;
@@ -1516,11 +1526,10 @@
                 }
                 reload = true;
             }
-
-            if (reload) {
-                initLogger();
-                createCocoon();
-            }
+            
+            return reload;
+        } else {
+            return false;
         }
     }