camunda / camunda-bpm-platform

Flexible framework for workflow and decision automation with BPMN and DMN. Integration with Quarkus, Spring, Spring Boot, CDI.
https://camunda.com/
Apache License 2.0
4.1k stars 1.55k forks source link

Support Groovy 4.0 #3679

Closed yanavasileva closed 1 month ago

yanavasileva commented 1 year ago

Acceptance Criteria (Required on creation)

Hints

Links

Breakdown

### Optional follow ups
- [ ] https://github.com/camunda/camunda-bpm-platform/issues/3680
- [ ] https://github.com/camunda/camunda-bpm-platform/issues/3681
### Pull Requests
- [ ] https://github.com/camunda/camunda-bpm-platform/pull/4458
- [ ] https://github.com/camunda/camunda-bpm-platform-ee/pull/956
- [ ] https://github.com/camunda/camunda-docs-manual/pull/1667

Dev2QA handover

yanavasileva commented 1 year ago

Assigning to decider (@ThorbenLindhauer) for scheduling.

ThorbenLindhauer commented 1 year ago

We'll consider this in future product planning rounds, not scheduling immediately.

ThorbenLindhauer commented 1 year ago

@yanavasileva should we add a point about informing and educating the support team? That could include discussing with them how to support customers that are struggling to migrate their scripts.

yanavasileva commented 1 year ago

@ThorbenLindhauer, we should do that. I added Support point to the breakdown to cover that aspect as part of the ticket.

venetrius commented 3 months ago

Devtest

Tested locally with Tomcat build.

Run task that called a script that only works if `groovy-datetime` & `groovy-dateutils` are present in distro: ``` import java.text.SimpleDateFormat import java.util.Calendar import java.util.TimeZone // Only works if DateUtils is present def sdf = new SimpleDateFormat("yyyyMMdd HHmmss SSS") def calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")) calendar.time = sdf.parse("20180115 153256 001") // Works if DateTime is present import java.time.Duration def duration = Duration.ofSeconds(10) def longer = duration + 5 def shorter = duration - 5 assert longer.seconds == 15 assert shorter.seconds == 5 assert (++longer).seconds == 16 assert (--shorter).seconds == 4 ```

Verified that all distro build contains groovy-datetime & groovy-dateutils locally

CE ``` jar tf ./distro/wildfly/modules/target/modules/org/apache/groovy/groovy-datetime/main/groovy-datetime-4.0.21.jar META-INF/ META-INF/MANIFEST.MF META-INF/groovy-release-info.properties META-INF/groovy/ META-INF/groovy/org.codehaus.groovy.runtime.ExtensionModule org/ org/apache/ org/apache/groovy/ org/apache/groovy/datetime/ org/apache/groovy/datetime/extensions/ org/apache/groovy/datetime/extensions/DateTimeExtensions$1.class org/apache/groovy/datetime/extensions/DateTimeExtensions.class org/apache/groovy/datetime/extensions/DateTimeStaticExtensions.class META-INF/INDEX.LIST jar tf distro/run/distro/target/camunda-bpm-run-7.22.0-SNAPSHOT.zip | grep groovy configuration/userlib/groovy-jsr223-4.0.21.jar configuration/userlib/groovy-4.0.21.jar configuration/userlib/groovy-json-4.0.21.jar configuration/userlib/groovy-xml-4.0.21.jar configuration/userlib/groovy-templates-4.0.21.jar configuration/userlib/groovy-dateutil-4.0.21.jar configuration/userlib/groovy-datetime-4.0.21.jar camunda-bpm-platform % jar tf distro/wildfly/distro/target/camunda-bpm-wildfly-7.22.0-SNAPSHOT.zip | grep groovy modules/org/apache/groovy/ modules/org/apache/groovy/groovy-datetime/ modules/org/apache/groovy/groovy-datetime/main/ modules/org/apache/groovy/groovy-templates/ modules/org/apache/groovy/groovy-templates/main/ modules/org/apache/groovy/groovy-dateutil/ modules/org/apache/groovy/groovy-dateutil/main/ modules/org/apache/groovy/groovy/ modules/org/apache/groovy/groovy/main/ modules/org/apache/groovy/groovy-jsr223/ modules/org/apache/groovy/groovy-jsr223/main/ modules/org/apache/groovy/groovy-xml/ modules/org/apache/groovy/groovy-xml/main/ modules/org/apache/groovy/groovy-all/ modules/org/apache/groovy/groovy-all/main/ modules/org/apache/groovy/groovy-json/ modules/org/apache/groovy/groovy-json/main/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-datetime/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-datetime/main/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-templates/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-templates/main/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-dateutil/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-dateutil/main/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy/main/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-jsr223/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-jsr223/main/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-xml/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-xml/main/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-json/ server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-json/main/ modules/org/apache/groovy/groovy-datetime/main/groovy-datetime-4.0.21.jar modules/org/apache/groovy/groovy-templates/main/groovy-templates-4.0.21.jar modules/org/apache/groovy/groovy-dateutil/main/groovy-dateutil-4.0.21.jar modules/org/apache/groovy/groovy/main/groovy-4.0.21.jar modules/org/apache/groovy/groovy-jsr223/main/groovy-jsr223-4.0.21.jar modules/org/apache/groovy/groovy-xml/main/groovy-xml-4.0.21.jar modules/org/apache/groovy/groovy-all/main/groovy-4.0.21.jar modules/org/apache/groovy/groovy-all/main/groovy-xml-4.0.21.jar modules/org/apache/groovy/groovy-all/main/groovy-datetime-4.0.21.jar modules/org/apache/groovy/groovy-all/main/groovy-dateutil-4.0.21.jar modules/org/apache/groovy/groovy-all/main/groovy-templates-4.0.21.jar modules/org/apache/groovy/groovy-all/main/groovy-json-4.0.21.jar modules/org/apache/groovy/groovy-all/main/module.xml modules/org/apache/groovy/groovy-all/main/groovy-jsr223-4.0.21.jar modules/org/apache/groovy/groovy-json/main/groovy-json-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-datetime/main/groovy-datetime-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-templates/main/groovy-templates-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-dateutil/main/groovy-dateutil-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy/main/groovy-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-jsr223/main/groovy-jsr223-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-xml/main/groovy-xml-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-xml-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-datetime-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-dateutil-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-templates-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-json-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/module.xml server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-jsr223-4.0.21.jar server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-json/main/groovy-json-4.0.21.jar lib/groovy-4.0.21.jar lib/groovy-jsr223-4.0.21.jar lib/groovy-json-4.0.21.jar lib/groovy-xml-4.0.21.jar lib/groovy-templates-4.0.21.jar lib/groovy-dateutil-4.0.21.jar lib/groovy-datetime-4.0.21.jar jar tf distro/wildfly26/modules/target/camunda-wildfly26-modules.jar | grep groovy org/apache/groovy/ org/apache/groovy/groovy-datetime/ org/apache/groovy/groovy-datetime/main/ org/apache/groovy/groovy-templates/ org/apache/groovy/groovy-templates/main/ org/apache/groovy/groovy-dateutil/ org/apache/groovy/groovy-dateutil/main/ org/apache/groovy/groovy/ org/apache/groovy/groovy/main/ org/apache/groovy/groovy-jsr223/ org/apache/groovy/groovy-jsr223/main/ org/apache/groovy/groovy-xml/ org/apache/groovy/groovy-xml/main/ org/apache/groovy/groovy-all/ org/apache/groovy/groovy-all/main/ org/apache/groovy/groovy-json/ org/apache/groovy/groovy-json/main/ org/apache/groovy/groovy-datetime/main/groovy-datetime-4.0.21.jar org/apache/groovy/groovy-templates/main/groovy-templates-4.0.21.jar org/apache/groovy/groovy-dateutil/main/groovy-dateutil-4.0.21.jar org/apache/groovy/groovy/main/groovy-4.0.21.jar org/apache/groovy/groovy-jsr223/main/groovy-jsr223-4.0.21.jar org/apache/groovy/groovy-xml/main/groovy-xml-4.0.21.jar org/apache/groovy/groovy-all/main/groovy-4.0.21.jar org/apache/groovy/groovy-all/main/groovy-xml-4.0.21.jar org/apache/groovy/groovy-all/main/groovy-datetime-4.0.21.jar org/apache/groovy/groovy-all/main/groovy-dateutil-4.0.21.jar org/apache/groovy/groovy-all/main/groovy-templates-4.0.21.jar org/apache/groovy/groovy-all/main/groovy-json-4.0.21.jar org/apache/groovy/groovy-all/main/module.xml org/apache/groovy/groovy-all/main/groovy-jsr223-4.0.21.jar org/apache/groovy/groovy-json/main/groovy-json-4.0.21.jar jar tf distro/tomcat/distro/target/camunda-bpm-tomcat-7.22.0-SNAPSHOT.zip | grep groovy server/apache-tomcat-9.0.89/lib/groovy-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-jsr223-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-json-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-xml-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-templates-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-dateutil-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-datetime-4.0.21.jar lib/groovy-4.0.21.jar lib/groovy-jsr223-4.0.21.jar lib/groovy-json-4.0.21.jar lib/groovy-xml-4.0.21.jar lib/groovy-templates-4.0.21.jar lib/groovy-dateutil-4.0.21.jar lib/groovy-datetime-4.0.21.jar ```
EE ``` unzip -l distro/websphere/distro/target/camunda-ee-ibm-was-7.22.0-SNAPSHOT.zip | grep groovy 7601299 04-06-2024 06:37 server/lib/groovy-4.0.21.jar 16922 06-24-2024 14:49 server/lib/groovy-jsr223-4.0.21.jar 130012 04-06-2024 06:50 server/lib/groovy-json-4.0.21.jar 212574 04-06-2024 06:59 server/lib/groovy-xml-4.0.21.jar 92239 06-24-2024 14:49 server/lib/groovy-templates-4.0.21.jar 7886 04-06-2024 06:46 server/lib/groovy-dateutil-4.0.21.jar 15580 06-24-2024 14:51 server/lib/groovy-datetime-4.0.21.jar jar tf distro/tomcat/distro/target/camunda-bpm-ee-tomcat-7.22.0-SNAPSHOT.zip | grep groovy server/apache-tomcat-9.0.89/lib/groovy-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-jsr223-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-json-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-xml-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-templates-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-dateutil-4.0.21.jar server/apache-tomcat-9.0.89/lib/groovy-datetime-4.0.21.jar lib/groovy-4.0.21.jar lib/groovy-jsr223-4.0.21.jar lib/groovy-json-4.0.21.jar lib/groovy-xml-4.0.21.jar lib/groovy-templates-4.0.21.jar lib/groovy-dateutil-4.0.21.jar lib/groovy-datetime-4.0.21.jar unzip -l distro/wildfly/distro/target/camunda-bpm-ee-wildfly-7.22.0-SNAPSHOT.zip | grep groovy 0 06-27-2024 08:40 modules/org/apache/groovy/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-datetime/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-datetime/main/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-templates/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-templates/main/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-dateutil/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-dateutil/main/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy/main/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-jsr223/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-jsr223/main/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-xml/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-xml/main/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-json/ 0 06-27-2024 08:40 modules/org/apache/groovy/groovy-json/main/ 15580 06-27-2024 08:40 modules/org/apache/groovy/groovy-datetime/main/groovy-datetime-4.0.21.jar 92239 06-27-2024 08:40 modules/org/apache/groovy/groovy-templates/main/groovy-templates-4.0.21.jar 7886 06-27-2024 08:40 modules/org/apache/groovy/groovy-dateutil/main/groovy-dateutil-4.0.21.jar 7601299 06-27-2024 08:40 modules/org/apache/groovy/groovy/main/groovy-4.0.21.jar 16922 06-27-2024 08:40 modules/org/apache/groovy/groovy-jsr223/main/groovy-jsr223-4.0.21.jar 212574 06-27-2024 08:40 modules/org/apache/groovy/groovy-xml/main/groovy-xml-4.0.21.jar 7601299 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/groovy-4.0.21.jar 212574 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/groovy-xml-4.0.21.jar 15580 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/groovy-datetime-4.0.21.jar 7886 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/groovy-dateutil-4.0.21.jar 92239 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/groovy-templates-4.0.21.jar 130012 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/groovy-json-4.0.21.jar 644 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/module.xml 16922 06-27-2024 08:40 modules/org/apache/groovy/groovy-all/main/groovy-jsr223-4.0.21.jar 130012 06-27-2024 08:40 modules/org/apache/groovy/groovy-json/main/groovy-json-4.0.21.jar 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-datetime/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-datetime/main/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-templates/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-templates/main/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-dateutil/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-dateutil/main/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy/main/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-jsr223/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-jsr223/main/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-xml/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-xml/main/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-json/ 0 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-json/main/ 15580 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-datetime/main/groovy-datetime-4.0.21.jar 92239 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-templates/main/groovy-templates-4.0.21.jar 7886 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-dateutil/main/groovy-dateutil-4.0.21.jar 7601299 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy/main/groovy-4.0.21.jar 16922 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-jsr223/main/groovy-jsr223-4.0.21.jar 212574 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-xml/main/groovy-xml-4.0.21.jar 7601299 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-4.0.21.jar 212574 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-xml-4.0.21.jar 15580 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-datetime-4.0.21.jar 7886 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-dateutil-4.0.21.jar 92239 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-templates-4.0.21.jar 130012 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-json-4.0.21.jar 644 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/module.xml 16922 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-all/main/groovy-jsr223-4.0.21.jar 130012 06-27-2024 08:40 server/wildfly-31.0.0.Final/modules/org/apache/groovy/groovy-json/main/groovy-json-4.0.21.jar 7601299 04-06-2024 06:37 lib/groovy-4.0.21.jar 16922 06-24-2024 14:49 lib/groovy-jsr223-4.0.21.jar 130012 04-06-2024 06:50 lib/groovy-json-4.0.21.jar 212574 04-06-2024 06:59 lib/groovy-xml-4.0.21.jar 92239 06-24-2024 14:49 lib/groovy-templates-4.0.21.jar 7886 04-06-2024 06:46 lib/groovy-dateutil-4.0.21.jar 15580 06-24-2024 14:51 lib/groovy-datetime-4.0.21.jar unzip -l distro/wls/distro/target/camunda-ee-oracle-wls-7.22.0-SNAPSHOT.zip | grep groovy 7601299 04-06-2024 06:37 modules/lib/groovy-4.0.21.jar 16922 06-24-2024 14:49 modules/lib/groovy-jsr223-4.0.21.jar 130012 04-06-2024 06:50 modules/lib/groovy-json-4.0.21.jar 212574 04-06-2024 06:59 modules/lib/groovy-xml-4.0.21.jar 92239 06-24-2024 14:49 modules/lib/groovy-templates-4.0.21.jar 7886 04-06-2024 06:46 modules/lib/groovy-dateutil-4.0.21.jar 15580 06-24-2024 14:51 modules/lib/groovy-datetime-4.0.21.jar ```

Will run smoke test on all distro after PR is merged.

venetrius commented 1 month ago

Hi @gbetances089 QA Note: This task changes the version of Groovy libraries that we ship with Camunda.

2 scenarios that needs extra attention during testing:

Test backwards compatibility with the extension methods for the java.util.Date class. groovy-dateutil library is added for this purpose.

Can use this groovyTest.bpmn.txt diagram for testing. (Github does not let me upload *.pbmn so I added a .txt suffix)

Are users able to downgrade to Groovy 2.4.4 by replacing the Groovy libraries?

To run legacy scripts users should be able to replace Groovy 4.0.x jar-s with Groovy 2.4.4 as it is explained in the migration guide You can use this bpmn shouldFailGroovy4.bpmn.txt for testing, it fails with groovy4 but works with Groovy 2.4.4.

gbetances089 commented 1 month ago

Tested on: camunda-bpm-run-ee-7.22.0-20240902.165156-82

Image Image Image Image

venetrius commented 3 weeks ago

Smoke tested on version:7.22.0-alpha5 on all AS.