You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by lh...@apache.org on 2009/05/08 06:36:11 UTC

svn commit: r772839 - in /servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec: ExecEndpoint.java marshaler/DefaultExecMarshaler.java marshaler/ExecMarshalerSupport.java utils/ExecUtils.java utils/ExecutionData.java

Author: lhein
Date: Fri May  8 04:36:11 2009
New Revision: 772839

URL: http://svn.apache.org/viewvc?rev=772839&view=rev
Log:
did some tweaks for SMXCOMP-491

Added:
    servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecutionData.java   (with props)
Modified:
    servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java
    servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java
    servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java
    servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecUtils.java

Modified: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java?rev=772839&r1=772838&r2=772839&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java (original)
+++ servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/ExecEndpoint.java Fri May  8 04:36:11 2009
@@ -26,6 +26,7 @@
 import org.apache.servicemix.exec.marshaler.DefaultExecMarshaler;
 import org.apache.servicemix.exec.marshaler.ExecMarshalerSupport;
 import org.apache.servicemix.exec.utils.ExecUtils;
+import org.apache.servicemix.exec.utils.ExecutionData;
 import org.apache.servicemix.jbi.jaxp.StringSource;
 
 /**
@@ -124,10 +125,6 @@
 			done(exchange);
 			return;
 		} else {
-			// prepare the buffers
-			StringBuffer output = new StringBuffer();
-			StringBuffer error = new StringBuffer();
-
 			String exec = null;
 
 			// try to extract the command from the in message content
@@ -153,11 +150,10 @@
 			}
 
 			// execute the command
-			int exitValue = ExecUtils.execute(exec, output, error);
+			ExecutionData resultData = ExecUtils.execute(exec);
 
 			// prepare the output
-			String result = marshaler.formatExecutionResult(exitValue, output
-					.toString(), error.toString());
+			String result = marshaler.formatExecutionResult(resultData);
 
 			if (exchange instanceof InOut) {
 				// pushes the execution output in out message

Modified: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java?rev=772839&r1=772838&r2=772839&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java (original)
+++ servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/DefaultExecMarshaler.java Fri May  8 04:36:11 2009
@@ -19,6 +19,7 @@
 import javax.jbi.messaging.NormalizedMessage;
 import javax.xml.transform.TransformerException;
 
+import org.apache.servicemix.exec.utils.ExecutionData;
 import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
@@ -36,8 +37,11 @@
     public static final String TAG_EXITCODE = "exitcode";
     public static final String TAG_OUTPUT = "output";
     public static final String TAG_ERROR = "error";
+    public static final String TAG_START_TIME = "started";
+    public static final String TAG_END_TIME = "finished";
+    public static final String TAG_DURATION = "duration";
     
-    public static final String RESULT_FORMAT = "<%s><%s>%d</%s><%s><![CDATA[%s]]></%s><%s><![CDATA[%s]]></%s></%s>";
+    public static final String RESULT_FORMAT = "<%s><%s>%d</%s><%s>%d</%s><%s>%d</%s><%s>%d</%s><%s><![CDATA[%s]]></%s><%s><![CDATA[%s]]></%s></%s>";
     
     /*
      * (non-Javadoc)
@@ -74,25 +78,32 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.servicemix.exec.marshaler.ExecMarshalerSupport#formatExecutionResult(int, java.lang.String, java.lang.String)
+     * @see org.apache.servicemix.exec.marshaler.ExecMarshalerSupport#formatExecutionResult(org.apache.servicemix.exec.utils.ExecutionData)
      */
-    public String formatExecutionResult(int exitValue, String output,
-    		String error) {
-    	
+    public String formatExecutionResult(ExecutionData executionData) {
     	String result = String.format(RESULT_FORMAT, 
-    					TAG_RESULT,
-    					TAG_EXITCODE,
-    					exitValue,
-    					TAG_EXITCODE,
-    					TAG_OUTPUT,
-    					output != null ? output : "",
-						TAG_OUTPUT,
-						TAG_ERROR,
-    					error != null ? error : "",
-						TAG_ERROR,
-						TAG_RESULT
-    					);
-    	
+				TAG_RESULT,
+				TAG_START_TIME,
+				executionData.getStartTime(),
+				TAG_START_TIME,
+				TAG_END_TIME,
+				executionData.getEndTime(),
+				TAG_END_TIME,
+				TAG_DURATION,
+				executionData.getExecutionDuration(),
+				TAG_DURATION,
+				TAG_EXITCODE,
+				executionData.getExitCode(),
+				TAG_EXITCODE,
+				TAG_OUTPUT,
+				executionData.getOutputData() != null ? executionData.getOutputData().toString() : "",
+				TAG_OUTPUT,
+				TAG_ERROR,
+				executionData.getErrorData() != null ? executionData.getErrorData().toString() : "",
+				TAG_ERROR,
+				TAG_RESULT
+				);
+
     	return result;
     }
 }

Modified: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java?rev=772839&r1=772838&r2=772839&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java (original)
+++ servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/marshaler/ExecMarshalerSupport.java Fri May  8 04:36:11 2009
@@ -19,6 +19,8 @@
 import javax.jbi.messaging.NormalizedMessage;
 import javax.xml.transform.TransformerException;
 
+import org.apache.servicemix.exec.utils.ExecutionData;
+
 /**
  * This interface describes the behavior of an exec marshaler.
  * 
@@ -43,10 +45,8 @@
      * Formats the execution command output to be embedded in the exchange out message.
      * </p>
      * 
-     * @param exitValue	the process exit value
-     * @param output the command execution output.
-     * @param error the command execution error output.
+     * @param executionData	an object containing all needed information about execution
      * @return the command execution output formatted to be embedded in the exchange out message.
      */
-    public String formatExecutionResult(int exitValue, String output, String error);
+    public String formatExecutionResult(ExecutionData executionData);
 }

Modified: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecUtils.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecUtils.java?rev=772839&r1=772838&r2=772839&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecUtils.java (original)
+++ servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecUtils.java Fri May  8 04:36:11 2009
@@ -41,17 +41,14 @@
 	 * 
 	 * @param command
 	 *            the system command to execute.
-	 * @param outputBuffer
-	 *            the buffer for storing the command output
-	 * @param errorBuffer
-	 *            the buffer for storing the command error output
-	 * @return the command return value
+	 * 
+	 * @return an execution data object containing all information
 	 * @throws ExecException
 	 */
-	public static int execute(String command, StringBuffer outputBuffer,
-			StringBuffer errorBuffer) throws ExecException {
-		int exitValue = -1;
+	public static ExecutionData execute(String command) throws ExecException {
 
+		ExecutionData result = new ExecutionData();
+		
 		LOG.info("Execute command " + command);
 		String[] shellCommand = null;
 		LOG.debug("Define the shell.");
@@ -99,39 +96,40 @@
 			}
 		}
 		try {
-			// check and create buffers if needed
-			if (errorBuffer == null) {
-				errorBuffer = new StringBuffer();
-			}
-			if (outputBuffer == null) {
-				outputBuffer = new StringBuffer();
-			}
+			// remember the start time
+			result.setStartTime(System.currentTimeMillis());
 			
 			// launch the system command
 			Process process = Runtime.getRuntime().exec(shellCommand);
 			
 			// get and start the error stream gobbler
 			StreamGobbler errorGobbler = new StreamGobbler(process
-					.getErrorStream(), errorBuffer);
+					.getErrorStream(), result.getErrorData());
 			errorGobbler.start();
 
 			// get and start the output stream gobbler
 			StreamGobbler outputGobbler = new StreamGobbler(process
-					.getInputStream(), outputBuffer);
+					.getInputStream(), result.getOutputData());
 			outputGobbler.start();
 			
 			// wait the end of the process
-			exitValue = process.waitFor();
+			int exitValue = process.waitFor();
+			
+			// remember the end time
+			result.setEndTime(System.currentTimeMillis());
+			
+			// store the exit code
+			result.setExitCode(exitValue);
 			
 			if (exitValue != 0) {
 				// an error occured
 				LOG.error("Command " + command
 						+ " execution failed with return code " + exitValue
-						+ " : " + errorBuffer.toString());
+						+ " : " + result.getErrorData().toString());
 			} else {
 				// command was successful
 				LOG.debug("Command " + command + " execution completed: "
-						+ outputBuffer.toString());
+						+ result.getOutputData().toString());
 			}
 		} catch (Exception exception) {
 			LOG.error("Command " + command + " execution failed.", exception);
@@ -139,8 +137,8 @@
 					"Command " + command + " execution failed.", exception);
 		}
 
-		// return the exit value of the process (defaults to -1)
-		return exitValue;
+		// return the result object
+		return result;
 	}
 }
 

Added: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecutionData.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecutionData.java?rev=772839&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecutionData.java (added)
+++ servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecutionData.java Fri May  8 04:36:11 2009
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.exec.utils;
+
+/**
+ * helper object storing several important data for use after execution
+ * 
+ * @author lhein
+ */
+public class ExecutionData {
+	private StringBuffer outputData;
+	private StringBuffer errorData;
+	
+	private int exitCode;
+	
+	private long startTime;
+	private long endTime;
+	private long executionDuration;
+	
+	/**
+	 * constructs an execution data object
+	 */
+	public ExecutionData() {
+		this.outputData = new StringBuffer();
+		this.errorData = new StringBuffer();
+		this.exitCode = -1;
+	}
+
+	/**
+	 * @return the outputData
+	 */
+	public StringBuffer getOutputData() {
+		return this.outputData;
+	}
+
+	/**
+	 * @param outputData the outputData to set
+	 */
+	public void setOutputData(StringBuffer outputData) {
+		this.outputData = outputData;
+	}
+
+	/**
+	 * @return the errorData
+	 */
+	public StringBuffer getErrorData() {
+		return this.errorData;
+	}
+
+	/**
+	 * @param errorData the errorData to set
+	 */
+	public void setErrorData(StringBuffer errorData) {
+		this.errorData = errorData;
+	}
+
+	/**
+	 * @return the exitCode
+	 */
+	public int getExitCode() {
+		return this.exitCode;
+	}
+
+	/**
+	 * @param exitCode the exitCode to set
+	 */
+	public void setExitCode(int exitCode) {
+		this.exitCode = exitCode;
+	}
+
+	/**
+	 * @return the startTime
+	 */
+	public long getStartTime() {
+		return this.startTime;
+	}
+
+	/**
+	 * @param startTime the startTime to set
+	 */
+	public void setStartTime(long startTime) {
+		this.startTime = startTime;
+	}
+
+	/**
+	 * @return the endTime
+	 */
+	public long getEndTime() {
+		return this.endTime;
+	}
+
+	/**
+	 * @param endTime the endTime to set
+	 */
+	public void setEndTime(long endTime) {
+		this.endTime = endTime;
+		// calculate the execution duration
+		if (this.startTime > 0 && this.endTime >= this.startTime) {
+			this.executionDuration = this.endTime - this.startTime;
+		}
+	}
+
+	/**
+	 * @return the executionDuration
+	 */
+	public long getExecutionDuration() {
+		return this.executionDuration;
+	}
+}

Propchange: servicemix/components/engines/servicemix-exec/trunk/src/main/java/org/apache/servicemix/exec/utils/ExecutionData.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain