add custom logging in case the commands fail
This commit is contained in:
@@ -15,7 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.shell.core;
|
package org.springframework.shell.core;
|
||||||
|
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.springframework.shell.event.ParseResult;
|
import org.springframework.shell.event.ParseResult;
|
||||||
|
import org.springframework.shell.support.logging.HandlerUtils;
|
||||||
import org.springframework.shell.support.util.Assert;
|
import org.springframework.shell.support.util.Assert;
|
||||||
import org.springframework.shell.support.util.ReflectionUtils;
|
import org.springframework.shell.support.util.ReflectionUtils;
|
||||||
|
|
||||||
@@ -29,12 +32,14 @@ import org.springframework.shell.support.util.ReflectionUtils;
|
|||||||
*/
|
*/
|
||||||
public class SimpleExecutionStrategy implements ExecutionStrategy {
|
public class SimpleExecutionStrategy implements ExecutionStrategy {
|
||||||
|
|
||||||
|
private static final Logger logger = HandlerUtils.getLogger(SimpleExecutionStrategy.class);
|
||||||
|
|
||||||
private final Class<?> mutex = SimpleExecutionStrategy.class;
|
private final Class<?> mutex = SimpleExecutionStrategy.class;
|
||||||
|
|
||||||
public Object execute(ParseResult parseResult) throws RuntimeException {
|
public Object execute(ParseResult parseResult) throws RuntimeException {
|
||||||
Assert.notNull(parseResult, "Parse result required");
|
Assert.notNull(parseResult, "Parse result required");
|
||||||
synchronized (mutex) {
|
synchronized (mutex) {
|
||||||
Assert.isTrue(isReadyForCommands(), "ProcessManagerHostedExecutionStrategy not yet ready for commands");
|
Assert.isTrue(isReadyForCommands(), "SimpleExecutionStrategy not yet ready for commands");
|
||||||
Object target = parseResult.getInstance();
|
Object target = parseResult.getInstance();
|
||||||
if (target instanceof ExecutionProcessor) {
|
if (target instanceof ExecutionProcessor) {
|
||||||
ExecutionProcessor processor = ((ExecutionProcessor) target);
|
ExecutionProcessor processor = ((ExecutionProcessor) target);
|
||||||
@@ -45,13 +50,7 @@ public class SimpleExecutionStrategy implements ExecutionStrategy {
|
|||||||
return result;
|
return result;
|
||||||
} catch (Throwable th) {
|
} catch (Throwable th) {
|
||||||
processor.afterThrowingInvocation(parseResult, th);
|
processor.afterThrowingInvocation(parseResult, th);
|
||||||
if (th instanceof Error) {
|
return handleThrowable(th);
|
||||||
throw ((Error) th);
|
|
||||||
}
|
|
||||||
if (th instanceof RuntimeException) {
|
|
||||||
throw ((RuntimeException) th);
|
|
||||||
}
|
|
||||||
throw new RuntimeException(th);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -61,7 +60,22 @@ public class SimpleExecutionStrategy implements ExecutionStrategy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Object invoke(ParseResult parseResult) {
|
private Object invoke(ParseResult parseResult) {
|
||||||
return ReflectionUtils.invokeMethod(parseResult.getMethod(), parseResult.getInstance(), parseResult.getArguments());
|
try {
|
||||||
|
return ReflectionUtils.invokeMethod(parseResult.getMethod(), parseResult.getInstance(), parseResult.getArguments());
|
||||||
|
} catch (Throwable th) {
|
||||||
|
logger.severe("Command failed " + th);
|
||||||
|
return handleThrowable(th);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object handleThrowable(Throwable th) {
|
||||||
|
if (th instanceof Error) {
|
||||||
|
throw ((Error) th);
|
||||||
|
}
|
||||||
|
if (th instanceof RuntimeException) {
|
||||||
|
throw ((RuntimeException) th);
|
||||||
|
}
|
||||||
|
throw new RuntimeException(th);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isReadyForCommands() {
|
public boolean isReadyForCommands() {
|
||||||
|
|||||||
Reference in New Issue
Block a user