Error invoking service task in clustered environment

Hi All,

I’m looking for help around an unusual error that I’m encountering in our process runtime environment. Our Deployment architecture is as follows.
All the service task implementations and listener classes pertaining to a process are configured in the process application, deployed along with the same .war file as the process and in the same container. For eg: All service task implementations and listener methods pertaining to process B in the image below are all deployed in the package B.war in the container B.

However, we quiet often see a runtime error in the cockpit for a service task B in process B stating “unknown property used in expression ${classB.methodB(arg B)} cause: Cannot resolve identifier classB at deployment B.war//org.camunda.bpm.engine.impl.el.juelexpression.getValue(juelexpression.java:63)”

Why would the process engine look for a delegate class pertaining to process B in a process App (app A) deployed in a different container( container A) whereas it is available in the same container where it is deployed in (i.e container B)?

@Kiran_Balakrishna, From your architecture each container has different process applications and its own delegates. Since you are using shared database, jobs are persisted in camunda tables so the job executor will pickup and try to execute the created jobs at runtime.

The problem is your architecture is heterogeneous cluster model. In order to solve this issue you need to set the jobExecutorDeploymentAware=true to the process applications, so that respective jobs will be executed in their respective process applications itself.

To prevent the job acquisition on node 1 from picking jobs that belong to node 2, the process engine can be configured as deployment aware , by the setting following property in the process engine configuration:

<process-engine name="default">
  ...
  <properties>
    <property name="jobExecutorDeploymentAware">true</property>
    ...
  </properties>
</process-engine>

References:

1 Like

Hi @aravindhrs,
Thanks for the response.
I have a couple of quick add-on queries.

  1. I was assuming jobExecutorDeploymentAware is set to true by default, if we do not set it explicitly, isn’t it?
  2. I also read somewhere in the forum that if I want to enable inter-process communication across clusters/containers ( i.e The implementation of Task A in container A is present in a process app deployed in Container B), then I have to set jobExecutorDeploymentAware to true , otherwise I have to explicitly set it to false to limit my process to look for all service task implementations within my deployment and container. Is this statement true/false?