-
Type:
Bug Report
-
Resolution: Unresolved
-
Priority:
L3 - Default
-
None
-
Affects Version/s: None
-
Component/s: None
-
Environment:Camunda BPM 7.12.5-ee
OpenJDK 11
spring-boot 2.2.5
Steps to reproduce
- Setup a Camunda Spring Boot Starter project
- Place a license file camunda-license.txt in the project so that Camunda automatically inserts the license into the DB when the application starts
- Build the project
- Start the application twice at the same time
- Concurrent deployment of the applications on 2 servers
Expected behavior
- Both instances of the applications start successfully.
- The license key is persisted.
Observed behavior
- One application instance fails with SqlIntegrityConstraintViolationException:
[SM002] [ERROR] [2020-06-16 06:35:00,451] [] [] [org.camunda.bpm.engine.context] [] [] [] [] [] ENGINE-16004 Exception while closing command context: ENGINE-03083 Unexpected exception while executing database operations with message ' ### Error flushing statements. Cause: java.sql.SQLException: null; SQL [[jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null sql=insert into PROZESSE.ACT_GE_PROPERTY ( NAME_, VALUE_, REV_ ) values ( 'camunda-license-key-id', 'bd405993-af8a-11ea-94c1-005056a140dc', 1 ) com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null State: null Errorcode: -4229 Nachfolgend die Messages aller auslösenden Exceptions, und zwar sowohl 'Caused Exceptions als auch 'next Exceptions' bei SQLExceptions. Dies dient zur übersichtlichen Darstellung der Exception-Hierarchie und zur schnelleren Information bei verschachtelten SQLExceptions. -------------------------- Start der gesammelten Exception-Messages ------------------ Next Exception: com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: Error for batch element #1: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;PROZESSE.ACT_GE_PROPERTY, DRIVER=4.23.42 State: 23505 Errorcode: -803 -------------------------- Ende der gesammelten Exception-Messages ------------------- ]; [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null ### Cause: java.sql.SQLException: null; SQL [[jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null sql=insert into PROZESSE.ACT_GE_PROPERTY ( NAME_, VALUE_, REV_ ) values ( 'camunda-license-key-id', 'bd405993-af8a-11ea-94c1-005056a140dc', 1 ) com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null State: null Errorcode: -4229 Nachfolgend die Messages aller auslösenden Exceptions, und zwar sowohl 'Caused Exceptions als auch 'next Exceptions' bei SQLExceptions. Dies dient zur übersichtlichen Darstellung der Exception-Hierarchie und zur schnelleren Information bei verschachtelten SQLExceptions. -------------------------- Start der gesammelten Exception-Messages ------------------ Next Exception: com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: Error for batch element #1: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;PROZESSE.ACT_GE_PROPERTY, DRIVER=4.23.42 State: 23505 Errorcode: -803 -------------------------- Ende der gesammelten Exception-Messages ------------------- ]; [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null'. Flush summary: [ INSERT PropertyEntity[camunda-license-key-id] INSERT ResourceEntity[bd405993-af8a-11ea-94c1-005056a140dc] ] org.camunda.bpm.engine.ProcessEngineException: ENGINE-03083 Unexpected exception while executing database operations with message ' ### Error flushing statements. Cause: java.sql.SQLException: null; SQL [[jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null sql=insert into PROZESSE.ACT_GE_PROPERTY ( NAME_, VALUE_, REV_ ) values ( 'camunda-license-key-id', 'bd405993-af8a-11ea-94c1-005056a140dc', 1 ) com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null State: null Errorcode: -4229 Nachfolgend die Messages aller auslösenden Exceptions, und zwar sowohl 'Caused Exceptions als auch 'next Exceptions' bei SQLExceptions. Dies dient zur übersichtlichen Darstellung der Exception-Hierarchie und zur schnelleren Information bei verschachtelten SQLExceptions. -------------------------- Start der gesammelten Exception-Messages ------------------ Next Exception: com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: Error for batch element #1: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;PROZESSE.ACT_GE_PROPERTY, DRIVER=4.23.42 State: 23505 Errorcode: -803 -------------------------- Ende der gesammelten Exception-Messages ------------------- ]; [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null ### Cause: java.sql.SQLException: null; SQL [[jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null sql=insert into PROZESSE.ACT_GE_PROPERTY ( NAME_, VALUE_, REV_ ) values ( 'camunda-license-key-id', 'bd405993-af8a-11ea-94c1-005056a140dc', 1 ) com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null State: null Errorcode: -4229 Nachfolgend die Messages aller auslösenden Exceptions, und zwar sowohl 'Caused Exceptions als auch 'next Exceptions' bei SQLExceptions. Dies dient zur übersichtlichen Darstellung der Exception-Hierarchie und zur schnelleren Information bei verschachtelten SQLExceptions. -------------------------- Start der gesammelten Exception-Messages ------------------ Next Exception: com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: Error for batch element #1: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;PROZESSE.ACT_GE_PROPERTY, DRIVER=4.23.42 State: 23505 Errorcode: -803 -------------------------- Ende der gesammelten Exception-Messages ------------------- ]; [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.23.42] Batchfehler. Der Batch wurde übergeben, jedoch ist mindestens eine Ausnahmebedingung bei einem Einzelelement im Batch aufgetreten. Verwenden Sie getNextException(), um die Ausnahmebedingungen für bestimmte Elemente im Batch abzurufen. ERRORCODE=-4229, SQLSTATE=null'. Flush summary: [ INSERT PropertyEntity[camunda-license-key-id] INSERT ResourceEntity[bd405993-af8a-11ea-94c1-005056a140dc] ] at org.camunda.bpm.engine.impl.db.EnginePersistenceLogger.flushDbOperationsException(EnginePersistenceLogger.java:693) at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.flushDbOperations(DbEntityManager.java:341) at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.flushDbOperationManager(DbEntityManager.java:322) at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.flush(DbEntityManager.java:294) at org.camunda.bpm.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:263) at org.camunda.bpm.engine.impl.interceptor.CommandContext.close(CommandContext.java:186) at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:119) at org.camunda.bpm.engine.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:46) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) at org.camunda.bpm.engine.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:44) at org.camunda.bpm.engine.impl.interceptor.ProcessApplicationContextInterceptor.execute(ProcessApplicationContextInterceptor.java:70) at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33) at org.camunda.bpm.spring.boot.starter.configuration.impl.custom.EnterLicenseKeyConfiguration.postProcessEngineBuild(EnterLicenseKeyConfiguration.java:71) at org.camunda.bpm.engine.impl.cfg.CompositeProcessEnginePlugin.postProcessEngineBuild(CompositeProcessEnginePlugin.java:107) at org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl.invokePostProcessEngineBuild(ProcessEngineConfigurationImpl.java:1080) at org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:816) at org.camunda.bpm.engine.spring.SpringTransactionsProcessEngineConfiguration.buildProcessEngine(SpringTransactionsProcessEngineConfiguration.java:63) ...
Hint:
- The class EnterLicenseKeyConfiguration does not synchronize when inserting the license key