Camunda Team Blog

How to use BPMN 2.0 ScriptTask with Groovy in JBoss

Written by Bernd Rücker on , under Execution category.
Note: this blogpost only applies to camunda BPM version  < 7.1.0. Starting from camunda BPM 7.2.0 we ship Groovy as part of the pre-packaged distribution.

Recently at a customer we added a ScriptTask to a process and wanted to run a Groovy script. Pretty easy with camunda BPM - but in the JBoss environment you have to know how to correctly put Groovy on the classpath - as we correctly use the JSR 223 stuff to recognize existing Scripting Languages.


To help others and to remind myself I quickly wanted to blog how to do this.

1.) Add groovy module to your JBoss

Download latest groovy-all.jar and copy it to JBOSS_HOME/modules/groovy/main/groovy-all.jar.

Create JBOSS_HOME/modules/groovy/main/module.xml with the following content:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="groovy">
    <resources>
        <resource-root path="groovy-all.jar"/>
    </resources>
       
    <dependencies>
        <module name="javax.api"/>
        <module name="org.apache.commons.logging"/>
    </dependencies>
</module>

2.) Add dependency to groovy in the camunda engine module

Edit file  JBOSS_HOME/modules/org/camunda/bpm/camunda-engine/main/module.xml. Add one line in the dependencies:

  <module name="groovy" services="import" export="true" />

Important is the services="import" which tells JBoss to recognize the META-INF/services directory in groovy - which is does not by default. This is the small thing with normally takes some hours to solve - hope this helps somebody out there. You can find the according JBoss documentation online. The whole module.xml now looks more or less like this: 

<module xmlns="urn:jboss:module:1.0" name="org.camunda.bpm.camunda-engine">
  <resources>
    <resource-root path="camunda-engine-7.0.0-Final.jar" />
  </resources>

  <dependencies>
    <module name="javax.api" />
    <module name="javax.transaction.api"/>
    <module name="javax.enterprise.api" />
    <module name="javax.inject.api" />
    <module name="javax.ejb.api" />
    <module name="javax.xml.bind.api" /> 
    <module name="javax.servlet.api" />
    
    <module name="org.jboss.vfs" />
    <module name="org.mybatis.mybatis" />
    <module name="com.fasterxml.uuid.java-uuid-generator"/>
    <module name="org.joda.time" slot="2.1" />        
    
    <module name="groovy" services="import" export="true" />    
  </dependencies>
</module>

3.) Have fun with the ScriptTask!