You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2008/03/18 16:22:08 UTC

svn commit: r638413 - /incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java

Author: bdelacretaz
Date: Tue Mar 18 08:22:02 2008
New Revision: 638413

URL: http://svn.apache.org/viewvc?rev=638413&view=rev
Log:
SLING-337 - do not provide a Repository service if admin access does not work

Modified:
    incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java

Modified: incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java?rev=638413&r1=638412&r2=638413&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java (original)
+++ incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java Tue Mar 18 08:22:02 2008
@@ -463,6 +463,27 @@
         // fall back to unavailable
         return false;
     }
+    
+    /** Ping our current repository and check that admin login (required by Sling) works. */ 
+    protected boolean pingAndCheck() {
+        if(repository == null) {
+            throw new IllegalStateException("Repository is null");
+        }
+        
+        boolean result = false;
+        
+        if(pingRepository(repository)) {
+            try {
+                final Session s = loginAdministrative(getDefaultWorkspace());
+                s.logout();
+                result = true;
+            } catch(RepositoryException re) {
+                log.log(LogService.LOG_INFO, "pingAndCheck; loginAdministrative failed", re);
+            }
+        }
+        
+        return result;
+    }
 
     /**
      * Unregisters the service represented by the
@@ -761,20 +782,27 @@
                     "startRepository: got a Repository, calling pingRepository()");
                 if (pingRepository(newRepo)) {
                     repository = newRepo;
-
-                    log(LogService.LOG_DEBUG,
-                        "startRepository: pingRepository() successful, calling setupRepository()");
-                    setupRepository(newRepo);
-
-                    log(LogService.LOG_DEBUG,
-                        "startRepository: calling registerService()");
-                    repositoryService = registerService();
-
-                    log(LogService.LOG_DEBUG,
-                        "registerService() successful, registration="
-                            + repositoryService);
-
-                    return true;
+                    
+                    if(!pingAndCheck()) {
+                        repository = null;
+                        log(LogService.LOG_DEBUG, "pingRepository() successful but pingAndCheck() fails, will try again");
+                        return false;
+                        
+                    } else {
+                        log(LogService.LOG_DEBUG,
+                            "startRepository: pingRepository() and pingAndCheck() successful, calling setupRepository()");
+                        setupRepository(newRepo);
+    
+                        log(LogService.LOG_DEBUG,
+                            "startRepository: calling registerService()");
+                        repositoryService = registerService();
+    
+                        log(LogService.LOG_DEBUG,
+                            "registerService() successful, registration="
+                                + repositoryService);
+    
+                        return true;
+                    }
                 }
 
                 // otherwise let go of the repository and fail startup
@@ -863,7 +891,7 @@
                             pollTime = pollTimeActive;
                         }
 
-                    } else if (!pingRepository(repo)) {
+                    } else if (!pingAndCheck()) {
 
                         log(LogService.LOG_INFO,
                             "run: Repository not accessible any more, unregistering service");