Cannot register service with MBEANS container

We are seeing an error during engine startup.

Cannot register service org.camunda.bpm.platform.job-executor.process-application:type=workflow-processes with MBeans Container, service with same name already registered.

The full log is

camunda_error.txt (6.8 KB)

We are trying to use the global event listeners as documentated in
Process Application Event Listeners | docs.camunda.org so our process application class looks as follows

@ProcessApplication
public class ProcessLauncherSpring extends ServletProcessApplication implements InitializingBean {

         @Override
          public TaskListener getTaskListener() { ...}

         @Override
	 public ExecutionListener getExecutionListener() { ...}

}

I have included some other files as well.
processes.xml (473 Bytes)

applicationContext.xml (1.5 KB)

Hi @davekant,

I think you should decide to either configure ProcessApplication using annotations, or through processes.xml

Cheers,
Askar.

Do you mean that if i use @ProcessApplication approach that i should remove the processes.xml file?

@davekant yes,

Cheers,
Askar

Sorry, doesn’t make sense and seems to contradict the documentation.
https://docs.camunda.org/manual/7.5/user-guide/process-applications/the-processes-xml-deployment-descriptor/

I think the problem is that you have

  • a servlet process application
  • and declare it in your application context

That way you end up with two instances of the application that are both attempted to be deployed.

Either remove it from applicationContext.xml or inherit from SpringServletProcessApplication, see https://docs.camunda.org/manual/7.6/user-guide/process-applications/the-process-application-class/#the-springprocessapplication.

Cheers,
Thorben

1 Like

Thanks, that really helps me understand why two instances were created and stepping over each other. Now, lets try extending SpringProcessApplication

I’m generally confused about whether or not @ProcessApplication annotation is required?

public class ProcessLauncherSpring extends SpringProcessApplication {

         @Override
          public TaskListener getTaskListener() { ...}

         @Override
	 public ExecutionListener getExecutionListener() { ...}
}

<bean id="myProcessLauncher" class="com.ProcessLauncherSpring" />

Using the above approach i did get a clean deployment with no errors reported in the log file.
camunda_log.txt (2.3 KB)

However, tasklist will not start a process and waits with “Loading …”

  • Does the browser console show an error (accesible via F12)?
  • Did you recently update Camunda or access different Camunda versions with your browser? Then clearing the browser cache might help.

As for the @ProcessApplication annotation: It is required if you want to set any of its attributes (custom name or path to processes.xml). When using a ServletProcessApplication, it is also required to trigger deployment. With a SpringProcessApplication this is afaik not required because it implements org.springframework.context.ApplicationListener and deployment is triggered via Spring lifecycle callbacks.

I think I know what the problem is: Instead of extending SpringProcessApplication, extend SpringServletProcessApplication. That is required for Camunda to pick up your web application’s servlet context so that it can resolve the path to your forms. I ninja-edited my second last post and should have made that more clear :slight_smile:

Thorben,
Thank you, that’s working now.

 public class ProcessLauncherSpring extends SpringServletProcessApplication implements InitializingBean {

         @Override
      	 public TaskListener getTaskListener() {...}

      	 @Override
    	 public ExecutionListener getExecutionListener() {..}

         @Override
    	 public void afterPropertiesSet() throws Exception {
      		// call method from SpringProcessApplication to invoke the deployment
      		super.afterPropertiesSet();
         }
}

Hi @thorben,
I wonder if you could point me into right direction…
I’m trying to extend from SpringServletProcessApplication also following the example below.

The only difference is I have custom user task forms.
After deployment, my forms are not loading due to Form failure: The context path is either empty or not defined.
Question is how or where can I specify the contextPath?

Thanks in advance

I am facing the same problem. However, the proposed solution didn’t work for me.
My setup: shared engine on tomcat (prepackaged Tomcat). I am deploying Spring-Camunda-War.

I want to register a process engine plugin in processes.xml. When I do so, I get the above mentioned error. If I remove the @ProcessApplication annotation, the process application is not registered any more and for example no prcess models get deployed.
Is there anything else I have to do to make it work?