Author: fmeschbe
Date: Thu Nov 29 13:20:17 2012
New Revision: 1415157

URL: http://svn.apache.org/viewvc?rev=1415157&view=rev
Log:
SLING-2676 Catch exceptions from TenantCustomizer and log

Modified:
    
sling/trunk/contrib/extensions/tenant/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java

Modified: 
sling/trunk/contrib/extensions/tenant/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tenant/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java?rev=1415157&r1=1415156&r2=1415157&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/tenant/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java
 (original)
+++ 
sling/trunk/contrib/extensions/tenant/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java
 Thu Nov 29 13:20:17 2012
@@ -64,6 +64,8 @@ import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.InvalidSyntaxException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * JCR Tenant Provider implementation.
@@ -83,6 +85,10 @@ import org.osgi.framework.InvalidSyntaxE
         cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
         policy = ReferencePolicy.DYNAMIC)
 public class TenantProviderImpl implements TenantProvider {
+
+    /** default log */
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
     /**
      * Root path for tenant
      */
@@ -232,33 +238,38 @@ public class TenantProviderImpl implemen
 
                 if (child != null) {
                     throw new PersistenceException("Tenant already exists with 
Id " + tenantId);
-                } else {
-                    // create the tenant
-                    Node rootNode = tenantRootRes.adaptTo(Node.class);
-                    Node tenantNode = rootNode.addNode(tenantId);
-                    tenantNode.setProperty(Tenant.PROP_NAME, name);
-                    tenantNode.setProperty(Tenant.PROP_DESCRIPTION, 
description);
-
-                    Resource resource = 
adminResolver.getResource(tenantNode.getPath());
-                    Tenant tenant = new TenantImpl(resource);
-                    PersistableValueMap tenantProps = 
resource.adaptTo(PersistableValueMap.class);
-                    // call tenant setup handler
-                    for (TenantCustomizer ts : getTenantHandlers()) {
+                }
+
+                // create the tenant
+                Node rootNode = tenantRootRes.adaptTo(Node.class);
+                Node tenantNode = rootNode.addNode(tenantId);
+                tenantNode.setProperty(Tenant.PROP_NAME, name);
+                tenantNode.setProperty(Tenant.PROP_DESCRIPTION, description);
+
+                Resource resource = 
adminResolver.getResource(tenantNode.getPath());
+                Tenant tenant = new TenantImpl(resource);
+                PersistableValueMap tenantProps = 
resource.adaptTo(PersistableValueMap.class);
+                // call tenant setup handler
+                for (TenantCustomizer ts : getTenantHandlers()) {
+                    try {
                         Map<String, Object> props = ts.setup(tenant, 
adminResolver);
                         if (props != null) {
                             tenantProps.putAll(props);
                         }
+                    } catch (Exception e) {
+                        log.info("addTenant: Unexpected problem calling 
TenantCustomizer " + ts, e);
                     }
-                    // save the properties
-                    tenantProps.save();
-
-                    // save the session
-                    adminSession.save();
-                    // refersh tenant instance, as it copies property from
-                    // resource
-                    tenant = new TenantImpl(resource);
-                    return tenant;
                 }
+                // save the properties
+                tenantProps.save();
+
+                // save the session
+                adminSession.save();
+                // refersh tenant instance, as it copies property from
+                // resource
+                tenant = new TenantImpl(resource);
+                return tenant;
+
             } catch (RepositoryException e) {
                 throw new PersistenceException("Unexpected RepositoryException 
while adding tenant", e);
             } finally {
@@ -295,7 +306,11 @@ public class TenantProviderImpl implemen
                     Tenant tenant = new TenantImpl(tenantRes);
                     // call tenant setup handler
                     for (TenantCustomizer ts : getTenantHandlers()) {
-                        ts.remove(tenant, adminResolver);
+                        try {
+                            ts.remove(tenant, adminResolver);
+                        } catch (Exception e) {
+                            log.info("removeTenant: Unexpected problem calling 
TenantCustomizer " + ts, e);
+                        }
                     }
 
                     tenantNode.remove();


Reply via email to