You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/08/03 15:44:29 UTC

[4/9] isis git commit: ISIS-1690: if a service's @PostConstruct throws an exception, continue to initialize remainder, and THEN throw the exception to caller

ISIS-1690: if a service's @PostConstruct throws an exception, continue to initialize remainder, and THEN throw the exception to caller


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/650c285e
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/650c285e
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/650c285e

Branch: refs/heads/master
Commit: 650c285e7b87ecc8c34d6b40829307b95ad391b6
Parents: 5dbbb2b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Aug 3 14:37:24 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Aug 3 14:37:24 2017 +0100

----------------------------------------------------------------------
 .../specloader/ServiceInitializer.java          | 26 ++++++++++++++++----
 1 file changed, 21 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/650c285e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
index e528806..b1f1d42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
@@ -112,6 +112,7 @@ public class ServiceInitializer {
             LOG.info("calling @PostConstruct on all domain services");
         }
 
+        Exception firstExceptionIfAny = null;
         for (final Map.Entry<Object, Method> entry : postConstructMethodsByService.entrySet()) {
             final Object service = entry.getKey();
             final Method method = entry.getValue();
@@ -124,12 +125,25 @@ public class ServiceInitializer {
             final int numParams = method.getParameterTypes().length;
             
             // unlike shutdown, we don't swallow exceptions; would rather fail early
-            if(numParams == 0) {
-                MethodExtensions.invoke(method, service);
-            } else {
-                MethodExtensions.invoke(method, service, new Object[] { props });
+            try {
+                if(numParams == 0) {
+                    MethodExtensions.invoke(method, service);
+                } else {
+                    MethodExtensions.invoke(method, service, new Object[] { props });
+                }
+            } catch(Exception ex) {
+                LOG.error(String.format(
+                            "@PostConstruct on %s#%s: failed",
+                            service.getClass().getName(), method.getName()),
+                        ex);
+                if(firstExceptionIfAny == null) {
+                    firstExceptionIfAny = ex;
+                }
             }
         }
+        if(firstExceptionIfAny != null) {
+            throw new RuntimeException(firstExceptionIfAny);
+        }
     }
 
     //endregion
@@ -152,7 +166,9 @@ public class ServiceInitializer {
                 MethodExtensions.invoke(method, service);
             } catch(Exception ex) {
                 // do nothing
-                LOG.warn("... @PreDestroy method threw exception - continuing anyway", ex);
+                LOG.warn(String.format(
+                        "@PreDestroy on %s#%s: failed, continuing anyway",
+                        service.getClass().getName(), method.getName()));
             }
         }
     }