[rhq] modules/plugins
lkrejci
lkrejci at fedoraproject.org
Tue Aug 7 14:50:51 UTC 2012
modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java | 77 ++++++----
modules/plugins/jboss-as-5/src/test/java/org/rhq/plugins/jbossas5/itest/ApplicationServerComponentTest.java | 28 +++
2 files changed, 80 insertions(+), 25 deletions(-)
New commits:
commit 153be59c5228bfe4e63657da405d30b5bdb6b423
Author: Lukas Krejci <lkrejci at redhat.com>
Date: Tue Aug 7 15:54:18 2012 +0200
[BZ 846269] - AS5's shutdown operation doesn't require availability to be up.
diff --git a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java
index 5ac0413..60fa42d 100644
--- a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java
+++ b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java
@@ -54,6 +54,29 @@ import org.rhq.core.system.SystemInfo;
* @author Jay Shaughnessy
*/
public class ApplicationServerOperationsDelegate {
+
+ private static class ExecutionFailedException extends Exception {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("unused")
+ public ExecutionFailedException() {
+ }
+
+ public ExecutionFailedException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ExecutionFailedException(String message) {
+ super(message);
+ }
+
+ @SuppressWarnings("unused")
+ public ExecutionFailedException(Throwable cause) {
+ super(cause);
+ }
+ }
+
/**
* max amount of time to wait for server to show as unavailable after
* executing stop - in milliseconds
@@ -303,28 +326,30 @@ public class ApplicationServerOperationsDelegate {
* @return The result of the shutdown operation - is successful
*/
private OperationResult shutDown() {
- AvailabilityType avail = this.serverComponent.getAvailability();
- if (avail == AvailabilityType.DOWN) {
- OperationResult result = new OperationResult();
- result.setErrorMessage("The server is already shut down.");
- return result;
- }
-
Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
ApplicationServerShutdownMethod shutdownMethod = Enum.valueOf(ApplicationServerShutdownMethod.class,
pluginConfig.getSimple(ApplicationServerPluginConfigurationProperties.SHUTDOWN_METHOD_CONFIG_PROP)
.getStringValue());
- String resultMessage = ApplicationServerShutdownMethod.JMX.equals(shutdownMethod) ? shutdownViaJmx()
- : shutdownViaScript();
-
- avail = waitForServerToShutdown();
+ String errorMessage = null;
+ String resultMessage = null;
+ try {
+ resultMessage = ApplicationServerShutdownMethod.JMX.equals(shutdownMethod) ? shutdownViaJmx()
+ : shutdownViaScript();
+ } catch (ExecutionFailedException e) {
+ errorMessage = e.getMessage();
+ }
+
+ AvailabilityType avail = waitForServerToShutdown();
OperationResult result;
if (avail == AvailabilityType.UP) {
result = new OperationResult();
result.setErrorMessage("The server failed to shut down.");
} else {
- return new OperationResult(resultMessage);
+ result = new OperationResult();
+ result.setSimpleResult(resultMessage);
+ result.setErrorMessage(errorMessage);
}
+
return result;
}
@@ -333,7 +358,7 @@ public class ApplicationServerOperationsDelegate {
*
* @return success message if no errors are encountered
*/
- private String shutdownViaScript() {
+ private String shutdownViaScript() throws ExecutionFailedException {
File shutdownScriptFile = getShutdownScriptPath();
validateScriptFile(shutdownScriptFile,
ApplicationServerPluginConfigurationProperties.SHUTDOWN_SCRIPT_CONFIG_PROP);
@@ -378,8 +403,8 @@ public class ApplicationServerOperationsDelegate {
logExecutionResults(results);
if (results.getError() != null) {
- throw new RuntimeException("Error executing shutdown script while stopping AS instance. Exit code ["
- + results.getExitCode() + "]", results.getError());
+ throw new ExecutionFailedException("Error executing shutdown script while stopping AS instance. Exit code ["
+ + results.getExitCode() + "]: " + results.getError().getMessage(), results.getError());
}
return "The server has been shut down.";
@@ -397,7 +422,7 @@ public class ApplicationServerOperationsDelegate {
*
* @return success message if no errors are encountered
*/
- private String shutdownViaJmx() {
+ private String shutdownViaJmx() throws ExecutionFailedException {
Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
String mbeanName = pluginConfig.getSimple(
ApplicationServerPluginConfigurationProperties.SHUTDOWN_MBEAN_CONFIG_PROP).getStringValue();
@@ -406,7 +431,7 @@ public class ApplicationServerOperationsDelegate {
EmsConnection connection = this.serverComponent.getEmsConnection();
if (connection == null) {
- throw new RuntimeException("Can not connect to the server");
+ throw new ExecutionFailedException("Can not connect to the server");
}
EmsBean bean = connection.getBean(mbeanName);
EmsOperation operation = bean.getOperation(operationName);
@@ -422,14 +447,18 @@ public class ApplicationServerOperationsDelegate {
* method, we'd need a clever way for the user to specify parameters
* anyway.
*/
- List<EmsParameter> params = operation.getParameters();
- int count = params.size();
- if (count == 0)
- operation.invoke(new Object[0]);
- else { // overloaded operation
- operation.invoke(new Object[] { 0 }); // return code of 0
+ try {
+ List<EmsParameter> params = operation.getParameters();
+ int count = params.size();
+ if (count == 0)
+ operation.invoke(new Object[0]);
+ else { // overloaded operation
+ operation.invoke(new Object[] { 0 }); // return code of 0
+ }
+ } catch (RuntimeException e) {
+ throw new ExecutionFailedException("Shutting down the server using JMX failed: " + e.getMessage(), e);
}
-
+
return "The server has been shut down.";
}
diff --git a/modules/plugins/jboss-as-5/src/test/java/org/rhq/plugins/jbossas5/itest/ApplicationServerComponentTest.java b/modules/plugins/jboss-as-5/src/test/java/org/rhq/plugins/jbossas5/itest/ApplicationServerComponentTest.java
index 2bc7f47..6d60b85 100644
--- a/modules/plugins/jboss-as-5/src/test/java/org/rhq/plugins/jbossas5/itest/ApplicationServerComponentTest.java
+++ b/modules/plugins/jboss-as-5/src/test/java/org/rhq/plugins/jbossas5/itest/ApplicationServerComponentTest.java
@@ -24,6 +24,8 @@ package org.rhq.plugins.jbossas5.itest;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
import java.io.File;
import java.util.Arrays;
@@ -50,6 +52,7 @@ import org.rhq.core.pc.inventory.InventoryManager;
import org.rhq.core.pc.inventory.ResourceContainer;
import org.rhq.core.pluginapi.configuration.ListPropertySimpleWrapper;
import org.rhq.core.pluginapi.configuration.MapPropertySimpleWrapper;
+import org.rhq.core.pluginapi.operation.OperationResult;
import org.rhq.core.pluginapi.util.FileUtils;
import org.rhq.core.pluginapi.util.StartScriptConfiguration;
import org.rhq.core.system.ProcessInfo;
@@ -197,9 +200,32 @@ public class ApplicationServerComponentTest extends AbstractJBossAS5PluginTest {
avail = getAvailability(getServerResource());
assertEquals(avail, AvailabilityType.DOWN);
+ //change the plugin config to shutdown via JMX
+ Configuration pluginConfig = getServerResource().getPluginConfiguration();
+ pluginConfig.getSimple("shutdownMethod").setValue("JMX");
+ restartServerResourceComponent();
+
+ //invoke the shutdown operation again and assert that it actually ran and generated some error message.
+ OperationResult operationResult = invokeOperation(getServerResource(), SHUTDOWN_OPERATION_NAME, null);
+ avail = getAvailability(getServerResource());
+ assertEquals(avail, AvailabilityType.DOWN);
+ assertNotNull(operationResult.getErrorMessage());
+
+ //ok, now try the same with the script shutdown method
+ pluginConfig = getServerResource().getPluginConfiguration();
+ pluginConfig.getSimple("shutdownMethod").setValue("SCRIPT");
+ restartServerResourceComponent();
+
+ //invoke the shutdown operation again and assert that it actually ran
+ operationResult = invokeOperation(getServerResource(), SHUTDOWN_OPERATION_NAME, null);
+ avail = getAvailability(getServerResource());
+ assertEquals(avail, AvailabilityType.DOWN);
+ assertNull(operationResult.getErrorMessage());
+ assertEquals(operationResult.getSimpleResult(), "The server has been shut down.");
+
// Before restarting it, add some stuff to the 'startScriptEnv' and 'startScriptArgs' props so we can verify
// they are used correctly by the Start op.
- Configuration pluginConfig = getServerResource().getPluginConfiguration();
+ pluginConfig = getServerResource().getPluginConfiguration();
StartScriptConfiguration startScriptConfig = new StartScriptConfiguration(pluginConfig);
// Add a var to the start script env.
More information about the rhq-commits
mailing list