You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/04/13 18:00:03 UTC

svn commit: r933694 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi: BindableRepository.java BindableRepositoryFactory.java

Author: jukka
Date: Tue Apr 13 16:00:03 2010
New Revision: 933694

URL: http://svn.apache.org/viewvc?rev=933694&view=rev
Log:
JCR-1778: BindableRepositoryFactory doesn't handle repository shutdown

Fix based on the patch by René Link

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepository.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepositoryFactory.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepository.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepository.java?rev=933694&r1=933693&r2=933694&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepository.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepository.java Tue Apr 13 16:00:03 2010
@@ -255,6 +255,7 @@ public class BindableRepository extends 
      * Delegated to the underlying repository instance.
      */
     public void shutdown() {
+        BindableRepositoryFactory.removeReference(reference);
         repository.shutdown();
         try {
             Runtime.getRuntime().removeShutdownHook(hook);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepositoryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepositoryFactory.java?rev=933694&r1=933693&r2=933694&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepositoryFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/BindableRepositoryFactory.java Tue Apr 13 16:00:03 2010
@@ -16,15 +16,16 @@
  */
 package org.apache.jackrabbit.core.jndi;
 
-import org.apache.commons.collections.map.ReferenceMap;
+import java.util.Hashtable;
+import java.util.Map;
 
 import javax.jcr.RepositoryException;
 import javax.naming.Context;
 import javax.naming.Name;
 import javax.naming.Reference;
 import javax.naming.spi.ObjectFactory;
-import java.util.Hashtable;
-import java.util.Map;
+
+import org.apache.commons.collections.map.ReferenceMap;
 
 /**
  * <code>BindableRepositoryFactory</code> is an object factory that when given
@@ -42,7 +43,7 @@ public class BindableRepositoryFactory i
     /**
      * {@inheritDoc}
      */
-    public synchronized Object getObjectInstance(
+    public Object getObjectInstance(
             Object obj, Name name, Context nameCtx, Hashtable environment)
             throws RepositoryException {
         synchronized (cache) {
@@ -55,4 +56,17 @@ public class BindableRepositoryFactory i
         }
     }
 
+
+    /**
+     * Invalidates the given reference in this factory's cache. Called by
+     * {@link BindableRepository#shutdown()} to remove the old reference.
+     *
+     * @param reference repository reference
+     */
+    static void removeReference(Reference reference) {
+        synchronized (cache) {
+            cache.remove(reference);
+        }
+    }
+
 }