You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/03/05 12:41:48 UTC

svn commit: r633825 - in /incubator/sling/trunk/jcr/jackrabbit-server: pom.xml src/main/java/org/apache/sling/jcr/jackrabbit/server/SlingServerRepository.java

Author: fmeschbe
Date: Wed Mar  5 03:41:28 2008
New Revision: 633825

URL: http://svn.apache.org/viewvc?rev=633825&view=rev
Log:
SLING-132 Adapt to cleaner repository acquisition and cleanup API

Modified:
    incubator/sling/trunk/jcr/jackrabbit-server/pom.xml
    incubator/sling/trunk/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/SlingServerRepository.java

Modified: incubator/sling/trunk/jcr/jackrabbit-server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/jackrabbit-server/pom.xml?rev=633825&r1=633824&r2=633825&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/jackrabbit-server/pom.xml (original)
+++ incubator/sling/trunk/jcr/jackrabbit-server/pom.xml Wed Mar  5 03:41:28 2008
@@ -55,6 +55,8 @@
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-scr-plugin</artifactId>
+                <!-- Require fix for FELIX-507 -->
+                <version>1.0.4-SNAPSHOT</version>
             </plugin>
             <plugin>
                 <groupId>org.apache.felix</groupId>
@@ -140,7 +142,6 @@
                         </Private-Package>
                         <Import-Package>
                             org.apache.sling.jcr.api,
-                            org.apache.sling.jcr.base.util,
 
                             javax.jcr.*,
 
@@ -180,11 +181,12 @@
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.base</artifactId>
             <version>2.0.0-incubator-SNAPSHOT</version>
-            <scope>provided</scope>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>jackrabbit-jcr-rmi</artifactId>
+            <version>1.5-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>

Modified: incubator/sling/trunk/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/SlingServerRepository.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/SlingServerRepository.java?rev=633825&r1=633824&r2=633825&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/SlingServerRepository.java (original)
+++ incubator/sling/trunk/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/SlingServerRepository.java Wed Mar  5 03:41:28 2008
@@ -33,41 +33,23 @@
 import org.apache.jackrabbit.core.config.RepositoryConfig;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.jcr.base.AbstractSlingRepository;
-import org.apache.sling.jcr.base.util.RepositoryAccessor;
 import org.osgi.framework.Bundle;
-import org.osgi.service.component.ComponentContext;
 import org.osgi.service.log.LogService;
 
 /**
- * The <code>RepositorySPIImpl</code> TODO
+ * The <code>SlingServerRepository</code> TODO
  *
  * @scr.component label="%repository.name" description="%repository.description"
  *          factory="org.apache.sling.jcr.jackrabbit.server.SlingServerRepositoryFactory"
  *
  * @scr.property name="service.vendor" value="The Apache Software Foundation"
  * @scr.property name="service.description"
- *      value="Factory for embeded Jackrabbit Repository Instances"
- *
- * @scr.service
- *
- * @scr.property value="" name="defaultWorkspace"
- * @scr.property value="anonymous" name="anonymous.name"
- * @scr.property value="anonymous" name="anonymous.password"
- * @scr.property value="admin" name="admin.name"
- * @scr.property value="admin" name="admin.password"
- * @scr.property value="-1" type="Integer" name="pool.maxActive"
- * @scr.property value="10" type="Integer" name="pool.maxIdle"
- * @scr.property value="1" type="Integer" name="pool.maxActiveWait"
+ *      value="Factory for embedded Jackrabbit Repository Instances"
  */
 public class SlingServerRepository extends AbstractSlingRepository
         implements Repository, SlingRepository {
 
     /**
-     * @scr.property value="true" type="Boolean"
-     */
-    public static final String PROPERTY_REPOSITORY_AUTOSTART = "autostart";
-
-    /**
      * The name of the configuration property defining the URL to the
      * repository configuration file (value is
      * "config").
@@ -97,112 +79,46 @@
      */
     public static final String REPOSITORY_REGISTRATION_NAME = "name";
 
-    /**
-     * @scr.reference
-     */
-    private LogService log;
-
-    private Repository delegatee;
-
-    //---------- AbstractSlingRepository methods ------------------------------
-
-    protected Repository getDelegatee() throws RepositoryException {
-        if (this.delegatee == null) {
-            try {
-                this.delegatee = this.getRepository();
-            } catch (IOException ioe) {
-                throw new RepositoryException(ioe.getMessage(), ioe);
-            }
-        }
-
-        return this.delegatee;
-    }
-
-    protected LogService getLog() {
-        return this.log;
-    }
-
-    //---------- SCR integration ----------------------------------------------
-
-    // activate this service
-    protected void activate(ComponentContext componentContext) throws Exception {
-        // set up the base class (session pooling etc)
-        super.activate(componentContext);
-
-        // setup the repository from descriptor
-        Object autoStart = componentContext.getProperties().get(PROPERTY_REPOSITORY_AUTOSTART);
-        if (autoStart instanceof Boolean && ((Boolean) autoStart).booleanValue()) {
-            // have the exception thrown go up the chain ...
-            this.getDelegatee();
-        }
-    }
-
-    // deactivate this service
-    protected void deactivate(ComponentContext componentContext) {
-        if (this.delegatee != null) {
-            try {
-                if(this.delegatee instanceof RepositoryImpl) {
-                    ((RepositoryImpl)this.delegatee).shutdown();
-                } else {
-                    log.log(LogService.LOG_WARNING, "Repository is not a RepositoryImpl, cannot shut it down");
-                }
-            } catch (Throwable t) {
-                this.log(LogService.LOG_ERROR, "Unexpected problem shutting down repository", t);
-            }
+    //---------- Repository Management ----------------------------------------
+    
+    @Override
+    protected Repository acquireRepository() {
+        Repository repository = super.acquireRepository();
+        if (repository != null) {
+            return repository;
         }
-
-        // deactivate the base class (session pooling etc.)
-        super.deactivate(componentContext);
-    }
-
-    //---------- Repository Publication ---------------------------------------
-
-    private Repository getRepository() throws RepositoryException, IOException, RepositoryAccessor.RepositoryUrlException {
+        
         @SuppressWarnings("unchecked")
         Dictionary<String, Object> environment = this.getComponentContext().getProperties();
-
-        // if the environment provides a repository override URL, other settings are ignored
-        final String overrideUrl = (String) environment.get(RepositoryAccessor.REPOSITORY_URL_OVERRIDE_PROPERTY);
-
-        if (overrideUrl != null && overrideUrl.length() > 0) {
-            log.log(LogService.LOG_INFO,
-                    "Will not use embedded repository due to property " + RepositoryAccessor.REPOSITORY_URL_OVERRIDE_PROPERTY
-                    + "=" + overrideUrl
-                    + ", acquiring repository using that URL"
-                    );
-            return getRepositoryFromUrl(overrideUrl);
-
-        }
-        log.log(LogService.LOG_INFO,
-                "Repository URL override property (" +  RepositoryAccessor.REPOSITORY_URL_OVERRIDE_PROPERTY
-                + ") not set, using embedded repository");
-        return getEmbeddedRepository(environment);
-    }
-
-    private Repository getRepositoryFromUrl(String repositoryUrl) throws RepositoryAccessor.RepositoryUrlException {
-        return new RepositoryAccessor().getRepositoryFromURL(repositoryUrl);
-    }
-
-    private Repository getEmbeddedRepository(Dictionary<String, Object> environment)
-    throws RepositoryException, IOException {
-
         String configURLObj = (String) environment.get(REPOSITORY_CONFIG_URL);
         String home = (String) environment.get(REPOSITORY_HOME_DIR);
 
         InputStream ins = null;
+        try {
 
-        // check whether the URL is a file path
-        File configFile = new File(configURLObj);
-        if (configFile.canRead()) {
-            ins = new FileInputStream(configFile);
-        } else {
-            URL configURL = new URL(configURLObj);
-            ins = configURL.openStream();
-        }
+            // check whether the URL is a file path
+            File configFile = new File(configURLObj);
+            if (configFile.canRead()) {
+                ins = new FileInputStream(configFile);
+            } else {
+                URL configURL = new URL(configURLObj);
+                ins = configURL.openStream();
+            }
 
-        try {
             RepositoryConfig crc = RepositoryConfig.create(ins, home);
             return RepositoryImpl.create(crc);
+            
+        } catch (IOException ioe) {
+            
+            log(LogService.LOG_ERROR,
+                "acquireRepository: IO problem starting repository from "
+                    + configURLObj + " in " + home, ioe);
+            
+        } catch (RepositoryException re) {
+            
+            log(LogService.LOG_ERROR,
+                "acquireRepository: Repository problem starting repository from "
+                    + configURLObj + " in " + home, re);
         } finally {
             if (ins != null) {
                 try {
@@ -212,9 +128,31 @@
                 }
             }
         }
-    }
-
+        
+        // got no repository ....
+        return null;
+    }
+    
+    @Override
+    protected void disposeRepository(Repository repository) {
+        super.disposeRepository(repository);
 
+        if (repository instanceof RepositoryImpl) {
+            
+            try {
+                ((RepositoryImpl) repository).shutdown();
+            } catch (Throwable t) {
+                log(LogService.LOG_ERROR,
+                    "deactivate: Unexpected problem shutting down repository",
+                    t);
+            }
+            
+        } else {
+            log(LogService.LOG_INFO,
+                "Repository is not a RepositoryImpl, nothing to do");
+        }
+    }
+    
     //---------- Helper -------------------------------------------------------
 
     public static void copyFile(Bundle bundle, String entryPath, File destFile) throws FileNotFoundException, IOException {