Scripting based Delegates with SpringBoot, Camunda-Run, and Source Code / Bean Runtime Refresh!

Hello All!

New community plugin is now available.

A plugin that provides the ability to create Java Delegates with Scripting: works with SpringBoot and Camunda-Run (Yes you can even drop it into a Camunda-Run distro and it will auto-launch!)

This plugin provides the ability to create scripting (groovy for now) based Java Delegates that support Spring Dependency Injection/Autowire, runtime refreshes and runtime breakpoint debugging.

So you can now write script without having to use the Modeler’s less than ideal scripting experience. You get all of the benefits of compiled classes and Spring dependency injection, code completion, type checking, etc.

:rocket: And you can even refresh your delegate’s source code at runtime! No more re-deploying BPMNs to make a minor fix or having to recompile and restart a Camunda server!

Check it out and please provide feedback!

See the docker-compose for a quick setup: Camunda-Scripting-Delegates-Process-Engine-Plugin/docker-compose-from-release.yml at main · StephenOTT/Camunda-Scripting-Delegates-Process-Engine-Plugin · GitHub

cc @Niall @BerndRuecker

4 Likes

That is a such a fantastic features!
Thanks so much for publishing this @StephenOTT

Hi @StephenOTT,

this is a really cool extension! :+1: :rocket:

I really like the auto-refresh of the delegate’s source code. This improves the development experience fundamentally. A W E S O M E!

I noticed that you created CAM-13327. I think you already figured out how to register a Process Engine plugin in Camunda Run distro, right? I still think that we should add an official example for this. Do you like to contribute an example to our official Examples Repository?

Best,
Tassilo

1 Like

@tasso94 well the “way to do it is sort of hacky”. The current way is you have to reuse camunda-run package path. Yes we can add this as docs, but a better fix here would be for Camunda-run to have a config to define additional component classes.

Hi @StephenOTT,

let’s outline this a bit:

  1. We would add a new config property, e.g. camunda.bpm.run.component-classes, which is a list, and each element is the package name plus class name
  2. I can add a JAR with a @Component annotated class to my user lib folder, e.g., org.foo.bar.MyComponent
  3. The component class is picked-up by Camunda Run when defined as follows:
    camunda.bpm.run.component-classes:
      - org.foo.bar.MyComponent
    

Does this capture your feature request?

Thanks,
Tassilo

There are likely parallel features missing:

  1. Ability to define Process Engine Plugins through Yaml (Some features you want to activate in Camunda-Run are not related to SpringBoot and are just normal Process Engine Plugins.
  2. Ability to define ComponentScanning through Yaml (some features you want to activate in Camunda-Run would be based on SpringBoot Annotations (Component/Service/Bean)

Your outline covers #2.

Hi @StephenOTT,

I’ve created two feature requests:

I think these feature requests could also be combined into one. Camunda Run is based on our Spring Boot Starter which already has a feature that allows registering Process Engine Plugins by defining beans. The same could be leveraged in combination with the ability to allow component scanning for custom classes in Run. WDYT?

Best,
Tassilo

1 Like

Sure. There are multiple possible development solutions to the problem. So can wait to see what the dev wants to implement.

Additional Functionality released today:

  1. Many new examples for script possibilities:

    1. Process Engine Plugins
    2. Event Listeners for the “Camunda Spring Event Bridge”
    3. More complex variables examples
    4. etc
  2. Yaml configuration options

  3. REST API Endpoint Scripting!

Rest API usage: GitHub - StephenOTT/Camunda-Scripting-Delegates-Process-Engine-Plugin