Search code examples
camunda

Camunda:InvalidRequestException: Process engine with name camundaProcessEngine does not exist


I have created Maven Camunda Java Project and inside ServletProcessApplication extended class namely, MultiTenantProcessApplicationEngine I created one method createProcessEngine() to register processEngine through java API with MSSQL Database. I'm following the community asked a question link https://forum.camunda.org/t/multi-tenancy-programmatically-create-tenant/2876

My

DbName:camunda2db,
dbusername:camunda2
dbpassword:camunda2

Except for the following code not at all, I did any configuration:

package com.camundatest;
    import org.apache.log4j.Logger;
    import org.camunda.bpm.application.ProcessApplication;
    import org.camunda.bpm.application.impl.ServletProcessApplication;
    import org.camunda.bpm.container.RuntimeContainerDelegate;
    import org.camunda.bpm.engine.ProcessEngine;
    import org.camunda.bpm.engine.ProcessEngineConfiguration;

    @ProcessApplication
    public class MultiTenantProcessApplicationEngine extends ServletProcessApplication{

          private final static Logger LOGGER = Logger.getLogger(MultiTenantProcessApplicationEngine.class);
          private void createProcessEngine(){
              LOGGER.info("\n\n**********Creating ProcessEngine *********");
              ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration()
                      .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
                      .setJdbcDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver")
                      .setJdbcUrl("jdbc:sqlserver://localhost:1433;databaseName=camunda2db")
                      .setJdbcUsername("camunda2")
                      .setJdbcPassword("camunda2")
                      .setJobExecutorActivate(true)
                      .setProcessEngineName("camundaProcessEngine")
                      .setHistory(ProcessEngineConfiguration.HISTORY_FULL)
                      .buildProcessEngine();

              RuntimeContainerDelegate runtimeContainerDelegate = RuntimeContainerDelegate.INSTANCE.get();

              runtimeContainerDelegate.registerProcessEngine(processEngine);
              LOGGER.info("\n\n Process Engine: "+processEngine);
          }

          public static void main(String[] args) {
              MultiTenantProcessApplicationEngine appProcessEngine = new MultiTenantProcessApplicationEngine();
              appProcessEngine.createProcessEngine();
        }
    }

It's working fine in Java Application, but when I log in to camunda with the URL:http://localhost:8080/camunda/app/admin/camundaProcessEngine/#/login

throwing Exception: InvalidRequestException: Process engine with name camundaProcessEngine does not exist

24-Mar-2018 17:39:33.463 WARNING [http-nio-8080-exec-4] org.camunda.bpm.engine.rest.exception.RestExceptionHandler.toResponse org.camunda.bpm.engine.rest.exception.InvalidRequestException: Process engine with name camundaProcessEngine does not exist
    at org.camunda.bpm.webapp.impl.security.auth.UserAuthenticationResource.doLogin(UserAuthenticationResource.java:87)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:167)
    at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257)
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222)
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211)
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:542)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.camunda.bpm.engine.rest.filter.CacheControlFilter.doFilter(CacheControlFilter.java:41)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.camunda.bpm.engine.rest.filter.EmptyBodyFilter.doFilter(EmptyBodyFilter.java:97)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilterSecure(SecurityFilter.java:67)
    at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilter(SecurityFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:58)
    at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:56)
    at org.camunda.bpm.webapp.impl.security.SecurityActions.runWithAuthentications(SecurityActions.java:40)
    at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:56)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:409)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

I don't know where I committing a mistake.Please help, any configuration need and link related to Programmatically create and register ProcessEngine in camunda.


Solution

  • Your class MultiTenantProcessApplicationEngine contains a main method, which is called if executed via java directly, but if you deploy this class annotated with @ProcessApplication the main method is never called. It simply deploys and register your application class.

    If you use tomcat, jboss, wildfly or other application server a shared engine should be used. You can read about the different engine bootstrapping here.

    With your approach you will create an embedded engine.

    If you want to read about the different runtime container integrations read this documentation.

    To configure/create a shared engine in jboss/wildfly for example, you have to add a subsystem to the standalone.xml.

    This could look like this:

    <subsystem xmlns="urn:org.camunda.bpm.jboss:1.1">
        <process-engines>
            <process-engine name="engineName" default="true">
                <datasource>java:jboss/datasources/ProcessEngine</datasource>
                <history-level>full</history-level>
                <properties>
                    <property name="jobExecutorAcquisitionName">default</property>
                    <property name="isAutoSchemaUpdate">true</property>
                    <property name="authorizationEnabled">true</property>
                </properties>
            </process-engine>
        </process-engines>
        <job-executor>
            <core-threads>3</core-threads>
            <max-threads>5</max-threads>
            <queue-length>10</queue-length>
            <job-acquisitions>
                <job-acquisition name="default">
                    <properties>
                        <property name="lockTimeInMillis">300000</property>
                        <property name="waitTimeInMillis">5000</property>
                        <property name="maxJobsPerAcquisition">3</property>
                    </properties>
                </job-acquisition>
            </job-acquisitions>
        </job-executor>
    </subsystem>
    

    You can read more about the configuration steps here.