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");