Author: cziegeler
Date: Mon Mar  3 13:18:23 2014
New Revision: 1573558

URL: http://svn.apache.org/r1573558
Log:
SLING-3427 : Incorrect handling of NamespaceMapper bindings within 
SlingServerRepositoryManager. Apply slightly modified patch from Stefan 
Scheidewig

Modified:
    
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java
    
sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java

Modified: 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java?rev=1573558&r1=1573557&r2=1573558&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java
 (original)
+++ 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepositoryManager.java
 Mon Mar  3 13:18:23 2014
@@ -57,7 +57,6 @@ import org.apache.sling.serviceusermappi
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
@@ -137,10 +136,11 @@ public class SlingServerRepositoryManage
 
     private Map<String, ServiceRegistration> statisticsServices = new 
ConcurrentHashMap<String, ServiceRegistration>();
 
-    private Map<ServiceReference, NamespaceMapper> namespaceMapperRefs = new 
TreeMap<ServiceReference, NamespaceMapper>();
+    private Map<Long, NamespaceMapper> namespaceMapperRefs = new TreeMap<Long, 
NamespaceMapper>();
 
     // ---------- Repository Management 
----------------------------------------
 
+    @Override
     protected Repository acquireRepository() {
 
         @SuppressWarnings("unchecked")
@@ -263,6 +263,7 @@ public class SlingServerRepositoryManage
      * @since bundle version 2.2.0 replacing the previously overwriting of the
      *        now final {@code AbstractSlingRepository.registerService} method.
      */
+    @Override
     protected String[] getServiceRegistrationInterfaces() {
         return new String[] {
             SlingRepository.class.getName(), Repository.class.getName(), 
RepositoryManager.class.getName()
@@ -289,6 +290,7 @@ public class SlingServerRepositoryManage
         return this.serviceUserMapper;
     }
 
+    @Override
     protected void disposeRepository(Repository repository) {
         unregisterStatistics(repository);
 
@@ -358,21 +360,20 @@ public class SlingServerRepositoryManage
     }
 
     @SuppressWarnings("unused")
-    private void bindNamespaceMapper(final ServiceReference ref) {
+    private void bindNamespaceMapper(final NamespaceMapper namespaceMapper, 
final Map<String, Object> props) {
         synchronized (this.namespaceMapperRefs) {
-            this.namespaceMapperRefs.put(ref,
-                (NamespaceMapper) 
this.getComponentContext().locateService("namespaceMapper", ref));
+            
this.namespaceMapperRefs.put((Long)props.get(Constants.SERVICE_ID), 
namespaceMapper);
             this.namespaceMappers = this.namespaceMapperRefs.values().toArray(
-                new NamespaceMapper[this.namespaceMapperRefs.values().size()]);
+                    new NamespaceMapper[this.namespaceMapperRefs.size()]);
         }
     }
 
     @SuppressWarnings("unused")
-    private void unbindNamespaceMapper(final ServiceReference ref) {
+    private void unbindNamespaceMapper(final NamespaceMapper namespaceMapper, 
final Map<String, Object> props) {
         synchronized (this.namespaceMapperRefs) {
-            this.namespaceMapperRefs.remove(ref);
+            this.namespaceMapperRefs.remove(props.get(Constants.SERVICE_ID));
             this.namespaceMappers = this.namespaceMapperRefs.values().toArray(
-                new NamespaceMapper[this.namespaceMapperRefs.values().size()]);
+                    new NamespaceMapper[this.namespaceMapperRefs.size()]);
         }
     }
 

Modified: 
sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java?rev=1573558&r1=1573557&r2=1573558&view=diff
==============================================================================
--- 
sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java
 (original)
+++ 
sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java
 Mon Mar  3 13:18:23 2014
@@ -39,7 +39,7 @@ import org.apache.sling.jcr.api.Namespac
 public class TestNamespaceMapper implements NamespaceMapper {
 
     public void defineNamespacePrefixes(Session session) throws 
RepositoryException {
-        session.setNamespacePrefix("test2", 
"test2=http://sling.apache.org/test/two";);
+        session.setNamespacePrefix("test2", 
"http://sling.apache.org/test/two";);
     }
 
 }



Reply via email to