Home > Back-end >  Camunda embedded with H2: Cockpit Login fails
Camunda embedded with H2: Cockpit Login fails

Time:03-09

I'm currently wokring on a product with the following conditions:

  • Spring-Boot (2.6) with Camunda embedded (7.16)
  • Connection to Camunda configured to use H2 (2.1.210) embedded with the following is configured in application.yml:
app:
  datasource-camunda:
    jdbcUrl: jdbc:h2:./h2/test;MODE=LEGACY
camunda:
  bpm:
    database:
      schema-update: true
    auto-deployment-enabled: true

and as Java-Configuration:

@Bean("camundaBpmDataSource")
@ConfigurationProperties
public DataSource camundaDataSource() {
  return DataSourceBuilder.create().build();
}

@Bean
public PlatformTransactionManager camundaBpmTransactionManager(DataSource datasource) {
  return new DataSourceTransactionManager(datasource)
}

The camunda engine is not configured explicitly since I used the appropriate starter and let Spring auto configured it. As a result the resulting setup should look very similar to the embedded camunda h2 configuration showed here: https://docs.camunda.org/get-started/spring/embedded-process-engine/

The application runs good with this setup. No problems with the application at all, but I faced an issue while logging in to the camunda cockpit. Login succeeds but then I see an error in the login mask saying:

Login Failed

An exception occured in the persistence layer. Please check the server logs for a detailed message and the entire exception stack trace



Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Unbekannter Datentyp: "?2"

Unknown data type: "?2"; SQL statement:

SELECT

    CASE

 

     

       

        WHEN

          

           

          EXISTS

          

            (SELECT

                    A.RESOURCE_ID_

             FROM

                    ACT_RU_AUTHORIZATION A

             WHERE

                    A.TYPE_ = 1

             AND

                    A.USER_ID_ = ?

             AND

                    BITAND(A.PERMS_,?) = ?

             AND

                    A.RESOURCE_TYPE_ = ?

             AND

                    A.RESOURCE_ID_ =  ? )

        THEN 1

      

 

     

       

 

     

      WHEN

        EXISTS

          (SELECT

                  ID_

           FROM

                  ACT_RU_AUTHORIZATION A

           WHERE

                  A.TYPE_ = 1

           AND

                  A.USER_ID_ = ?

           AND

                  BITAND(A.PERMS_,?) = ?

           AND

                  A.RESOURCE_TYPE_ = ?

           AND

                  A.RESOURCE_ID_ = '*')

        THEN 1

 

     

       

 

      ELSE

          (

          SELECT

            CASE

              

 

               

                 

                  WHEN

                    

                     

                    EXISTS

                    

                      (SELECT

                              A.RESOURCE_ID_

                       FROM

                              ACT_RU_AUTHORIZATION A

                       WHERE

                              A.TYPE_ = 1

                       AND

                              A.GROUP_ID_ IN  (  ? )

                       AND

                              BITAND(A.PERMS_,?) = ?

                       AND

                              A.RESOURCE_TYPE_ = ?

                       AND

                              A.RESOURCE_ID_ =  ? )

                  THEN 1

                

 

               

                 

 

               

                WHEN

                  EXISTS

                    (SELECT

                            ID_

                     FROM

                            ACT_RU_AUTHORIZATION A

                     WHERE

                            A.TYPE_ = 1

                     AND

                            A.GROUP_ID_ IN  (  ? )

                     AND

                            BITAND(A.PERMS_,?) = ?

                     AND

                            A.RESOURCE_TYPE_ = ?

                     AND

                            A.RESOURCE_ID_ = '*')

                  THEN 1

 

               

                 

 

                ELSE (

                      SELECT

                        CASE

              

                          

                           

                            WHEN

                              

                               

                              EXISTS

                              

                                (SELECT

                                        A.RESOURCE_ID_

                                 FROM

                                        ACT_RU_AUTHORIZATION A

                                 WHERE

                                        A.TYPE_ = 0

                                 AND

                                        A.USER_ID_ = '*'

                                 AND

                                        BITAND(A.PERMS_,?) = ?

                                 AND

                                        A.RESOURCE_TYPE_ = ?

                                 AND

                                        A.RESOURCE_ID_ =  ? )

                            THEN 1

                          

 

                         

                           

 

                         

                          WHEN

                            EXISTS

                              (SELECT

                                      ID_

                               FROM

                                      ACT_RU_AUTHORIZATION A

                               WHERE

                                      A.TYPE_ = 0

                               AND

                                      A.USER_ID_ = '*'

                               AND

                                      BITAND(A.PERMS_,?) = ?

                               AND

                                      A.RESOURCE_TYPE_ = ?

                               AND

                                      A.RESOURCE_ID_ = '*')

                            THEN 1

 

                          

                           

 

                         

                          ELSE

                          

                           

                            null

                          

 

              

                        END

                )

              

            END

      )

    END [50004-210]

            at org.h2.message.DbException.getJdbcSQLException(DbException.java:573) ~[h2-2.1.210.jar:2.1.210]

            at org.h2.message.DbException.getJdbcSQLException(DbException.java:496) ~[h2-2.1.210.jar:2.1.210]

            at org.h2.message.DbException.get(DbException.java:227) ~[h2-2.1.210.jar:2.1.210]

I already took a look into the database and saw all tables where created sucesfully, so does anybody faced a similar issue?

CodePudding user response:

Remove the "MODE=LEGACY" from the url. Here is a working example:

https://github.com/rob2universe/vanilla-camunda-template/blob/4625376bf3a5eed9cd1f2853cdf07fe5eca46685/src/main/resources/application.yaml#L17

Also ensure you use a supported H2 version. That is 1.4.x fro 7.16.x: https://docs.camunda.org/manual/7.16/introduction/supported-environments/

The BOM will inclcude H2 1.4.200.

  • Related