You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by dr...@apache.org on 2017/05/22 08:22:16 UTC
[3/4] brooklyn-server git commit: BROOKLYN-449: Effector method invoke don’t use Groovy
BROOKLYN-449: Effector method invoke don’t use Groovy
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/896a1739
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/896a1739
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/896a1739
Branch: refs/heads/master
Commit: 896a1739b833b6a57c30446ed79ba9eac046773f
Parents: 3984417
Author: Aled Sage <al...@gmail.com>
Authored: Wed May 17 18:34:06 2017 +0200
Committer: Aled Sage <al...@gmail.com>
Committed: Fri May 19 15:01:48 2017 +0100
----------------------------------------------------------------------
.../internal/AbstractManagementContext.java | 24 ++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/896a1739/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
index c009437..d43e192 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
@@ -21,8 +21,10 @@ package org.apache.brooklyn.core.mgmt.internal;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.apache.brooklyn.core.catalog.internal.CatalogUtils.newClassLoadingContextForCatalogItems;
+import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.net.URL;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -75,8 +77,9 @@ import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.core.config.ConfigBag;
import org.apache.brooklyn.util.core.task.BasicExecutionContext;
import org.apache.brooklyn.util.core.task.Tasks;
-import org.apache.brooklyn.util.groovy.GroovyJavaMethods;
+import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.javalang.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -276,11 +279,28 @@ public abstract class AbstractManagementContext implements ManagementContextInte
return runAtEntity(entity, eff, parameters);
}
+ @SuppressWarnings("unchecked")
protected <T> T invokeEffectorMethodLocal(Entity entity, Effector<T> eff, Map<String, ?> args) {
assert isManagedLocally(entity) : "cannot invoke effector method at "+this+" because it is not managed here";
totalEffectorInvocationCount.incrementAndGet();
Object[] transformedArgs = EffectorUtils.prepareArgsForEffector(eff, args);
- return GroovyJavaMethods.invokeMethodOnMetaClass(entity, eff.getName(), transformedArgs);
+
+ try {
+ Maybe<Object> result = Reflections.invokeMethodFromArgs(entity, eff.getName(), Arrays.asList(transformedArgs));
+ if (result.isPresent()) {
+ return (T) result.get();
+ } else {
+ throw new IllegalStateException("Unable to invoke entity effector method "+eff.getName()+" on "+entity+" - not found matching args");
+ }
+
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ // Note that if we do any "nicer" error, such as:
+ // throw Exceptions.propagate("Unable to invoke entity effector method "+eff.getName()+" on "+entity, e)
+ // then EffectorBasicTest.testInvokeEffectorErrorCollapsedNicely fails because its call to:
+ // Exceptions.collapseTextInContext
+ // does not unwrap this text.
+ throw Exceptions.propagate(e);
+ }
}
/**