You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

ServiceMix Exec

ServiceMix Exec component is used to invoke commands (executables, shell commands, shell scripts, ...). The command can be static (defined in the component endpoint descriptor) or dynamic (provided in the incoming message, including arguments).

Availability

Note that this component is now only available as snapshot, not yet included in a ServiceMix release.

Installation

Simply drop the servicemix-exec installer zip in an hotdeploy directory monitored by ServiceMix.

How it works

ServiceMix Exec service engine acts as a provider. It supports all MEP.

When used with an InOnly MEP, the Exec component executes the command and set the exchange in DONE status.

When used with an InOut MEP, the Exec components executes the command and get the command output buffer. The command output is put in the out message and send back in the exchange.

Exec in message format

<message>
  <command>ls</command>
  <arguments>
    <argument>-l</argument>
    <argument>/tmp</argument>
  </arguments>
</message>

If the in message doesn't contain the command tag, Exec component uses the command attribute provided in the xbean.xml. If no command is provided in the in message and in the xbean.xml, the component throws an exception and the exchange fails.

You can support any message format by defining your own exec marshaler implementation. The endpoint supports a marshaler attribute where you can define your class that implements the ExecMarshalerSupport interface.

Exec out message format

When used with an InOut MEP, the Exec return the command execution output into the out message. The out message content looks like:

<result>
  <started>1241756756376</started>
  <finished>1241756756390</finished>
  <duration>14</duration>
  <exitcode>0</exitcode>
  <output><![CDATA[
total 6729
-rw------- 1 jb       jb   1693752 2009-04-09 09:07 f9G0lWzx.tar.part
-rw-r--r-- 1 jb       jb         8 2009-03-27 18:27 gnome-session-manager
srwxr-xr-x 1 jb       jb         0 2009-03-26 10:56 gnome-system-monitor.jb.3619273851
drwxr-xr-x 2 jb       jb      1024 2009-04-23 08:43 hsperfdata_jb
drwxr-xr-x 2 jboss    java    1024 2009-04-17 12:46 hsperfdata_jboss
drwxr-xr-x 2 weblogic java    1024 2009-04-17 09:40 hsperfdata_weblogic
-rw-r--r-- 1 jb       jb       870 2009-03-26 10:59 jbi12672.zip
-rw-r--r-- 1 jb       jb       870 2009-03-26 10:59 jbi12673.zip
]]></output>
  <error><![CDATA[
]]></error>
</result>

What does the tags contain

started  - contains the execution start time in millis (System.currentTimeMillis() is used)
finished - contains the time the process execution finished in millis (System.currentTimeMillis() is used)
duration - the duration in millis the execution took
exitcode - the return code of the process (0 means all fine; != 0 means an error code)
output   - the contents of the output stream of the process
error    - the contents of the error stream of the process

Some words on the output and error stream contents. 
It may happen that some information at the very beginning will get lost depending on how 
fast the stream listeners are set up and how fast the executed process will push information to it.

Endpoint

The Exec endpoint can be very simple, waiting for command contained in the in message:

<beans xmlns="http://servicemix.apache.org/exec/1.0"
       xmlns:test="http://test">
  <exec:endpoint service="test:MyService"
                 endpoint="MyExec"/>
</beans>

You can define a fallback command if the incoming doesn't provide a command:

<beans xmlns="http://servicemix.apache.org/exec/1.0"
       xmlns:test="http://test">
   <exec:endpoint service="test:MyService"
                  endpoint="MyExec"
                  command="date"/>
</beans>

Endpoint attributes

Name

Type

Description

Required

endpoint

String

JBI Endpoint name

no (will be auto-generated if not specified)

interfaceName

QName

Interface QName implemented by the JBI endpoint

no (will be auto-generated if not specified)

service

QName

JBI Service name

no (will be auto-generated if not specified)

command

String

Fallback command

Command that will be executed if the in message doesn't provide a command.

marshaler

ExecMarshalerSupport

Marshaler to use to parse the incoming message and construct the exec command.

no (DefaultExecMarshaler by default)

  • No labels