You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2010/04/08 20:56:17 UTC

svn commit: r932063 - in /portals/jetspeed-2/portal/trunk: components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/ components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/ components/jetspeed-page-manager/src/main/java/org/ap...

Author: rwatler
Date: Thu Apr  8 18:56:16 2010
New Revision: 932063

URL: http://svn.apache.org/viewvc?rev=932063&view=rev
Log:
JS2-1183: shutdown PageManagerNodeReapingThread during Spring bean lifecycle

Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring.xml
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/database-page-manager.xml
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-database-page-manager.xml
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-permissions-database-page-manager.xml
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/JETSPEED-INF/spring/test-spring.xml
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/assembly/page-manager.xml
    portals/jetspeed-2/portal/trunk/etc/import/assembly/import-page-manager.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/importer-page-manager.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/page-manager.xml

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring.xml Thu Apr  8 18:56:16 2010
@@ -155,7 +155,7 @@ limitations under the License.
   <!-- PageManager -->
   <bean id="org.apache.jetspeed.page.PageManager" 
        name="pageManager"
-       class="org.apache.jetspeed.page.psml.CastorXmlPageManager">         
+       class="org.apache.jetspeed.page.psml.CastorXmlPageManager" init-method="init" destroy-method="destroy">         
        <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg>
        <constructor-arg index="1"><ref bean="DocumentHandlerFactory"/></constructor-arg>
        <constructor-arg index="2"><ref bean="FolderHandler"/></constructor-arg>

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java Thu Apr  8 18:56:16 2010
@@ -115,39 +115,73 @@ public abstract class AbstractPageManage
     private List listeners = new LinkedList();
 
     private long nodeReapingInterval = DEFAULT_NODE_REAPING_INTERVAL;
+    
+    private volatile Thread nodeReapingThread;
 
     public AbstractPageManager(IdGenerator generator, boolean permissionsEnabled, boolean constraintsEnabled)
     {
         this.generator = generator;
         this.permissionsEnabled = permissionsEnabled;
         this.constraintsEnabled = constraintsEnabled;
+    }
+    
+    /**
+     * Initialize PageManager component.
+     */
+    public void init()
+    {
         // start node reaping deamon thread
-        if (this.nodeReapingInterval > 0)
+        if ((nodeReapingInterval > 0) && (nodeReapingThread == null))
         {
-            Thread nodeReapingThread = new Thread(new Runnable()
+            nodeReapingThread = new Thread(new Runnable()
             {
                 public void run()
                 {
-                    while (true)
+                    // run while running and reaping thread match
+                    Thread runningThread = Thread.currentThread();
+                    synchronized (runningThread)
                     {
-                        try
-                        {
-                            // wait for reap interval and invoke reaping
-                            // notification on page manager event listeners
-                            Thread.sleep(nodeReapingInterval);
-                            notifyReapNodes();
-                        }
-                        catch (InterruptedException ie)
+                        while (nodeReapingThread == runningThread)
                         {
+                            try
+                            {
+                                // wait for reap interval or interrupt and invoke
+                                // reaping notification on page manager event listeners
+                                runningThread.wait(nodeReapingInterval);
+                                if (nodeReapingThread == runningThread)
+                                {
+                                    notifyReapNodes();
+                                }
+                            }
+                            catch (InterruptedException ie)
+                            {
+                            }
                         }
-                    }                        
-                }
+                    }
+                }   
             }, "PageManagerNodeReapingThread");
             nodeReapingThread.setDaemon(true);
             nodeReapingThread.start();
         }
     }
     
+    /**
+     * Destroy PageManager component.
+     */
+    public void destroy()
+    {
+        // stop node reaping deamon thread
+        Thread destroyReapingThread = nodeReapingThread;
+        if (destroyReapingThread != null)
+        {
+            nodeReapingThread = null;
+            synchronized (destroyReapingThread)
+            {
+                destroyReapingThread.notifyAll();
+            }
+        }
+    }
+    
     public AbstractPageManager(IdGenerator generator, boolean permissionsEnabled, boolean constraintsEnabled, Map modelClasses)
     {
         this(generator, permissionsEnabled, constraintsEnabled);     

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java Thu Apr  8 18:56:16 2010
@@ -181,6 +181,26 @@ public class DatabasePageManager extends
     }
 
     /**
+     * Initialize PageManager component.
+     */
+    public void init() throws Exception
+    {
+        // initialize persistence broker support
+        super.init();
+        // initialize PageManager delegate
+        delegator.init();
+    }
+    
+    /**
+     * Destroy PageManager component.
+     */
+    public void destroy()
+    {
+        // destroy PageManager delegate
+        delegator.destroy();
+    }
+    
+    /**
      * getPageManagerProxy
      *
      * @return proxied page manager interface used to

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/PageManagerTestShared.java Thu Apr  8 18:56:16 2010
@@ -163,7 +163,9 @@ public interface PageManagerTestShared
             handlerFactory.registerDocumentHandler(pageSecurityHandler);
             FolderHandler folderHandler = new FileSystemFolderHandler(idGen, baseDir+"target/testdata/" + pagesDirName, handlerFactory, cache);
 
-            return new CastorXmlPageManager(idGen, handlerFactory, folderHandler, cache, permissionsEnabled, constraintsEnabled);
+            CastorXmlPageManager pageManager = new CastorXmlPageManager(idGen, handlerFactory, folderHandler, cache, permissionsEnabled, constraintsEnabled);
+            pageManager.init();
+            return pageManager;
         }
         
         /**
@@ -177,6 +179,8 @@ public interface PageManagerTestShared
             pageManager.reset();
             // shutdown page manager and handlers
             pageManager.shutdown();
+            // destroy page manager
+            pageManager.destroy();
         }
 
         /**

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/database-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/database-page-manager.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/database-page-manager.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/database-page-manager.xml Thu Apr  8 18:56:16 2010
@@ -22,7 +22,7 @@ limitations under the License.
     <import resource="database-page-manager-base.xml"/>
 
     <!-- Page Manager -->
-    <bean id="pageManagerImpl" init-method="init" class="org.apache.jetspeed.page.impl.DatabasePageManager">
+    <bean id="pageManagerImpl" class="org.apache.jetspeed.page.impl.DatabasePageManager" init-method="init" destroy-method="destroy">
         <!-- OJB configuration file resource path -->
         <constructor-arg index="0"><value>JETSPEED-INF/ojb/page-manager-repository.xml</value></constructor-arg>
         <!-- fragment id generator -->

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-database-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-database-page-manager.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-database-page-manager.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-database-page-manager.xml Thu Apr  8 18:56:16 2010
@@ -22,7 +22,7 @@ limitations under the License.
     <import resource="database-page-manager-base.xml"/>
 
     <!-- Page Manager -->
-    <bean id="pageManagerImpl" init-method="init" class="org.apache.jetspeed.page.impl.DatabasePageManager">
+    <bean id="pageManagerImpl" class="org.apache.jetspeed.page.impl.DatabasePageManager" init-method="init" destroy-method="destroy">
         <!-- OJB configuration file resource path -->
         <constructor-arg index="0"><value>JETSPEED-INF/ojb/page-manager-repository.xml</value></constructor-arg>       
         <!-- fragment id generator -->

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-permissions-database-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-permissions-database-page-manager.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-permissions-database-page-manager.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/resources/secure-permissions-database-page-manager.xml Thu Apr  8 18:56:16 2010
@@ -22,7 +22,7 @@ limitations under the License.
     <import resource="database-page-manager-base.xml"/>
 
     <!-- Page Manager -->
-    <bean name="pageManagerImpl" init-method="init" class="org.apache.jetspeed.page.impl.DatabasePageManager">
+    <bean name="pageManagerImpl" class="org.apache.jetspeed.page.impl.DatabasePageManager" init-method="init" destroy-method="destroy">
         <!-- OJB configuration file resource path -->
         <constructor-arg index="0"><value>JETSPEED-INF/ojb/page-manager-repository.xml</value></constructor-arg>
         <!-- fragment id generator -->

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/JETSPEED-INF/spring/test-spring.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/JETSPEED-INF/spring/test-spring.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/JETSPEED-INF/spring/test-spring.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/JETSPEED-INF/spring/test-spring.xml Thu Apr  8 18:56:16 2010
@@ -155,7 +155,7 @@ limitations under the License.
   <!-- PageManager -->
   <bean id="org.apache.jetspeed.page.PageManager" 
        name="pageManager"
-       class="org.apache.jetspeed.page.psml.CastorXmlPageManager">         
+       class="org.apache.jetspeed.page.psml.CastorXmlPageManager" init-method="init" destroy-method="destroy">         
        <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg>
        <constructor-arg index="1"><ref bean="DocumentHandlerFactory"/></constructor-arg>
        <constructor-arg index="2"><ref bean="FolderHandler"/></constructor-arg>

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/assembly/page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/assembly/page-manager.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/assembly/page-manager.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/assembly/page-manager.xml Thu Apr  8 18:56:16 2010
@@ -129,7 +129,7 @@ limitations under the License.
     
   <bean id="org.apache.jetspeed.page.PageManager" 
        name="pageManager"
-       class="org.apache.jetspeed.page.psml.CastorXmlPageManager">         
+       class="org.apache.jetspeed.page.psml.CastorXmlPageManager" init-method="init" destroy-method="destroy">         
        <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg>
        <constructor-arg index="1"><ref bean="DocumentHandlerFactory"/></constructor-arg>
        <constructor-arg index="2"><ref bean="FolderHandler"/></constructor-arg>

Modified: portals/jetspeed-2/portal/trunk/etc/import/assembly/import-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/etc/import/assembly/import-page-manager.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/etc/import/assembly/import-page-manager.xml (original)
+++ portals/jetspeed-2/portal/trunk/etc/import/assembly/import-page-manager.xml Thu Apr  8 18:56:16 2010
@@ -21,8 +21,7 @@ limitations under the License.
     
   <bean id="org.apache.jetspeed.page.PageManagerImpl" 
         name="pageManagerImpl"
-        init-method="init"
-        class="org.apache.jetspeed.page.impl.DatabasePageManager">
+        class="org.apache.jetspeed.page.impl.DatabasePageManager" init-method="init" destroy-method="destroy">
       <!-- OJB configuration file resource path -->
       <constructor-arg index="0"><value>JETSPEED-INF/ojb/page-manager-repository.xml</value></constructor-arg>       
       <!-- fragment id generator -->
@@ -193,7 +192,7 @@ limitations under the License.
     
   <bean id="org.apache.jetspeed.page.CastorPageManager" 
        name="castorPageManager"
-       class="org.apache.jetspeed.page.psml.CastorXmlPageManager">         
+       class="org.apache.jetspeed.page.psml.CastorXmlPageManager" init-method="init" destroy-method="destroy">         
        <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg>
        <constructor-arg index="1"><ref bean="DocumentHandlerFactory"/></constructor-arg>
        <constructor-arg index="2"><ref bean="FolderHandler"/></constructor-arg>

Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/importer-page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/importer-page-manager.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/importer-page-manager.xml (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/importer-page-manager.xml Thu Apr  8 18:56:16 2010
@@ -221,7 +221,7 @@
   </bean>
 
   <bean id="org.apache.jetspeed.page.CastorPageManager" name="importerCastorPageManager"
-    class="org.apache.jetspeed.page.psml.CastorXmlPageManager">
+    class="org.apache.jetspeed.page.psml.CastorXmlPageManager" init-method="init" destroy-method="destroy">
     <meta key="j2:cat" value="default" />
     <constructor-arg index="0">
       <ref bean="ImportIdGenerator" />

Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/page-manager.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/page-manager.xml?rev=932063&r1=932062&r2=932063&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/page-manager.xml (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/page-manager.xml Thu Apr  8 18:56:16 2010
@@ -198,7 +198,7 @@
     </constructor-arg>
   </bean>
 
-  <bean name="xmlPageManager" class="org.apache.jetspeed.page.psml.CastorXmlPageManager">
+  <bean name="xmlPageManager" class="org.apache.jetspeed.page.psml.CastorXmlPageManager" init-method="init" destroy-method="destroy">
     <meta key="j2:cat" value="xmlPageManager or pageSerializer" />
     <constructor-arg index="0">
       <ref bean="IdGenerator" />
@@ -226,7 +226,7 @@
 
   <!-- Database PageManager -->
 
-  <bean id="dbPageManagerImpl" class="org.apache.jetspeed.page.impl.DatabasePageManager" init-method="init">
+  <bean id="dbPageManagerImpl" class="org.apache.jetspeed.page.impl.DatabasePageManager" init-method="init" destroy-method="destroy">
     <meta key="j2:cat" value="dbPageManager or pageSerializer" />
     <!-- OJB configuration file resource path -->
     <constructor-arg index="0">



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org