Integrating Camunda Engine with a non-Java application

Dear All,

I´m new here and hope to get some help with the following:

I´m looking into ways of integrating the Camunda Engine (community edition) with a Symfony application. I´ve chosen the option of integrating the remote engine distribution (Camunda Platform Run) via the REST API. Then, I´ve tried invoking a groovy-script performing an SQL query within a Script Task, but keep getting multiple errors (below are just the first couple of lines):

Unable to compile script: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:\r\nGeneral error during instruction selection: java.lang.NoClassDefFoundError: groovyjarjaropenbeans/Transient\r\n\r\njava.lang.RuntimeException: java.lang.NoClassDefFoundError: groovyjarjaropenbeans/Transient\r\n\tat…

I have understood that one way of deploying a process is saving the BPMN-file in the “Resources”-folder and then sending a REST call which does the job. So currently there is no WAR-file containing a BPMN-file as described in the documentation, but merely a BPMN-file. Hence my questions:

  1. What could be the reason to the mentioned errors? Are those related to the deployment, the fact we are integrating with a non-Java application, or both?
  2. What would be a preferred way of implementing a database query in our case?
  3. In general, with the integration method and deployment process descibed above, is it at all possible to invoke some Java-code or a groovy script as part of a modeled process?

Thank you so much!

Hey @Pisces90,

When do you get this error? How do you deploy your current process model and where do you want to use the Script?

In general the best way of using Camunda Run is using Service Tasks and deploy them as external tasks.

You can also use the REST API to deploy your model. The Camunda Modeler provides an interface to deploy your models from the modeler via REST to a running workflow engine.

I hope that helps
Cheers
Nele

1 Like

Hey Nele,

thank you for your response!

I deploy the model using the REST API.

I have also learnt because I integrate the engine with a non-Java application, the preferred way would be to build a PHP client utilizing the OpenAPI documentation and after that using an External Task in the model. So far I have managed to install the OpenAPI Generator and create a sample client as described in the documentation(GitHub - OpenAPITools/openapi-generator: OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)). However, I´m a bit at a loss as far as adaptation for my purposes, so maybe you could answer the following questions:

-when using the External Task in the model, is it enough to specify the topic for the Client to know which function needs to be executed? How do I ensure the topic is identified correctly by Client?

I´m sorry for many questions, I´m new to the topic and a bit lost.

Thank you very much!

Regards

Hey @Pisces90,

First of all I am not a PHP expert. I know that this languages exist but I never used it… I found an example for for an external task worker in PHP in the community. Maybe that gives you some additional insights. Using the OpenAPI is a good starting point too.

Your questions:

Do I create a yaml-file first and then run the specified commands then to create the PHP client ?
I am not familiar with the OpenAPI Generator. Best would be if you try to ask in the OpenAPI Generator community how to best use it

Where would the actual function for database query reside then? Do I need to program it manually?
The client helps you to connect via the REST API and communicates with the workflow Engine. You would need to implement the business logic for the task in your application code.
You can also use REST calls to query for information from the Camunda DB. Depending on what you want to query you might not need to use an external task. Maybe you just need to use the REST API itself. What information do you need exactly?

Should the long polling be implemented using the REST API?
For the external task it can make sense to implement long polling. If you just need a simple REST call to get information there is no need for long polling

when using the External Task in the model, is it enough to specify the topic for the Client to know which function needs to be executed? How do I ensure the topic is identified correctly by Client?
Normally a client subscribes to a certain topic. Within the subscription you have to ensure that the topic name matches with the topic from your process model.

I hope this helps
Cheers
Nele

1 Like

Hi Nele,

thank you! it helps me greatly.

1 Like