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()));
}
}
}