You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:46:52 UTC

[sling-org-apache-sling-jcr-contentloader] 26/36: SLING-836 : Always create a new session for content loading / unloading. Try all bundles on startup even if one bundle fails.

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.jcr.contentloader-2.0.4-incubator
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-contentloader.git

commit ee4f054b75f399a40660dda16694b7cbe8da55db
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Wed Jan 21 08:47:15 2009 +0000

    SLING-836 : Always create a new session for content loading / unloading. Try all bundles on startup even if one bundle fails.
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/jcr/contentloader@736264 13f79535-47bb-0310-9956-ffa450edef68
---
 .../internal/ContentLoaderService.java             | 50 ++++++++++++++--------
 1 file changed, 31 insertions(+), 19 deletions(-)

diff --git a/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java b/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java
index 9781ce5..c454fe5 100644
--- a/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java
+++ b/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java
@@ -85,11 +85,6 @@ public class ContentLoaderService implements SynchronousBundleListener {
     private MimeTypeService mimeTypeService;
 
     /**
-     * Administrative sessions used to check item existence.
-     */
-    private Session adminSession;
-
-    /**
      * The initial content loader which is called to load initial content up
      * into the repository when the providing bundle is installed.
      */
@@ -126,13 +121,14 @@ public class ContentLoaderService implements SynchronousBundleListener {
         // This is synchronous - take care to not block the system !!
         //
 
+        Session session = null;
         switch (event.getType()) {
             case BundleEvent.STARTING:
                 // register content when the bundle content is available
                 // as node types are registered when the bundle is installed
                 // we can safely add the content at this point.
                 try {
-                    Session session = getAdminSession();
+                    session = getAdminSession();
                     final boolean isUpdate = this.updatedBundles.remove(event.getBundle().getSymbolicName());
                     initialContentLoader.registerBundle(session, event.getBundle(), isUpdate);
                 } catch (Throwable t) {
@@ -140,6 +136,10 @@ public class ContentLoaderService implements SynchronousBundleListener {
                         "bundleChanged: Problem loading initial content of bundle "
                             + event.getBundle().getSymbolicName() + " ("
                             + event.getBundle().getBundleId() + ")", t);
+                } finally {
+                    if ( session != null ) {
+                        session.logout();
+                    }
                 }
                 break;
             case BundleEvent.UPDATED:
@@ -149,13 +149,17 @@ public class ContentLoaderService implements SynchronousBundleListener {
                 break;
             case BundleEvent.UNINSTALLED:
                 try {
-                    Session session = getAdminSession();
+                    session = getAdminSession();
                     initialContentLoader.unregisterBundle(session, event.getBundle());
                 } catch (Throwable t) {
                     log.error(
                         "bundleChanged: Problem unloading initial content of bundle "
                             + event.getBundle().getSymbolicName() + " ("
                             + event.getBundle().getBundleId() + ")", t);
+                } finally {
+                    if ( session != null ) {
+                        session.logout();
+                    }
                 }
                 break;
         }
@@ -205,8 +209,9 @@ public class ContentLoaderService implements SynchronousBundleListener {
 
         componentContext.getBundleContext().addBundleListener(this);
 
+        Session session = null;
         try {
-            final Session session = getAdminSession();
+            session = this.getAdminSession();
             this.createRepositoryPath(session, ContentLoaderService.BUNDLE_CONTENT_NODE);
             log.debug(
                     "Activated - attempting to load content from all "
@@ -218,7 +223,18 @@ public class ContentLoaderService implements SynchronousBundleListener {
                 if ((bundle.getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED)) == 0) {
                     // load content for bundles which are neither INSTALLED nor
                     // UNINSTALLED
-                    initialContentLoader.registerBundle(session, bundle, false);
+                    try {
+                        initialContentLoader.registerBundle(session, bundle, false);
+                    } catch (Throwable t) {
+                        log.error(
+                            "Problem loading initial content of bundle "
+                                + bundle.getSymbolicName() + " ("
+                                + bundle.getBundleId() + ")", t);
+                    } finally {
+                        if ( session.hasPendingChanges() ) {
+                            session.refresh(false);
+                        }
+                    }
                 } else {
                     ignored++;
                 }
@@ -233,6 +249,10 @@ public class ContentLoaderService implements SynchronousBundleListener {
         } catch (Throwable t) {
             log.error("activate: Problem while loading initial content and"
                 + " registering mappings for existing bundles", t);
+        } finally {
+            if ( session != null ) {
+                session.logout();
+            }
         }
     }
 
@@ -244,11 +264,6 @@ public class ContentLoaderService implements SynchronousBundleListener {
             this.initialContentLoader.dispose();
             this.initialContentLoader = null;
         }
-
-        if ( adminSession != null ) {
-            this.adminSession.logout();
-            this.adminSession = null;
-        }
     }
 
     // ---------- internal helper ----------------------------------------------
@@ -261,12 +276,9 @@ public class ContentLoaderService implements SynchronousBundleListener {
     /**
      * Returns an administrative session to the default workspace.
      */
-    private synchronized Session getAdminSession()
+    private Session getAdminSession()
     throws RepositoryException {
-        if ( adminSession == null ) {
-            adminSession = getRepository().loginAdministrative(null);
-        }
-        return adminSession;
+        return getRepository().loginAdministrative(null);
     }
 
     /**

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.