Skip to main content

8.7

tip

This release contains breaking changes. These are listed at the end of this page, along with instructions for migrating from previous releases.

Server

Features

  • Relocate genesis-cluster classes to new modules
  • Expose columnSeparator and quoteChar to csvDecoder operator
  • No longer need import for LOG in purger script
  • Add clientName gradle property to allow for custom site specific folders
  • Print additional statement to system.log if killProcess ends up calling 'kill -9' after the waiting grace period expires
  • TriggerRemote method no longer requires process name
  • Compact PBCs together in dev strategy
  • Add columnSeparator and quoteChar to csvEncoder operator
  • Add ability to copy event meta data with new details type
  • Allow lambdas for withInput expressions to be assigned and reused
  • Added genesis-transform module for user-defined ETL capabilities
  • Add batch size configuration to db batch poll source
  • Make process name optional on cron rule records to allow execution in compact process mode
  • Add support for runtime script file and config file annotations
  • Added Connector and AckConnector for joining pipelines
  • Upgrade to Kotlin 2.1.0
  • Implemented CamelFileSource for outbound file flow and made sink interfaces contravariant
  • Install hooks improvements
  • Document Manger: Ability to upload files to a customised sub directory
  • Document Manger: Extend file storage api to allow generate and store document + modify + delete
  • Document Manger: Add UNIT_TEST_PROCESS to remote file storage client
  • Recon: Added support to invoke a reconciliation by configuration name as well as ID, for API users
  • Notify: Added new dataserver specifically for toasts
  • Notify: Relax validation restrictions on Email Gateway config to make SMTP credentials optional
  • Notify: adapt codebase to changes related to Cluster simplification in GSF

Fixes

  • Indices on DOUBLE fields are now correctly sorted correctly in LMDB - Dataserver
  • Add custom deserializer for Field to ignore originalName
  • dbSink should apply operations in batches
  • DictionaryBuilder: fix table metadata read operation and ensure field/table names don't have a double '_'
  • Ensure parentheses are preserved when parsing evaluator expressions to JSON
  • Can use deploy plugin when distribution plugin is disabled
  • Correct bug in enum handling
  • Remove explicit toString call on ClusterMessage debug line
  • Do not throw if txDbSink is not given a transaction handle, just create a new one
  • Fix reqrep not starting if key field has _FROM or _TO
  • Regression on view generation when empty blocks are used in derived fields
  • Renamed DbSink to bring in line with documentation, added typealias for backwards compatibility
  • Correct typo in new transformer API
  • Optionally disable maven modules
  • Correct mapping of dates in ExcelDataToCsv
  • Pipelines : Added type variance to operator interfaces
  • Cluster manager not bound when running GenesisRun and other scripts that user ServiceModule
  • Regression - settings plugin not properly handling OS specific paths while discovering resources
  • Update comment in BodyLessWebEndpoint.kt to new docs url
  • ExcelDataToCSV. allow better user.dir setup, running with no arg and running on a dir
  • Integrations: close consumer when source is stopped
  • Auth: make user active_sessions eventually consistent with user_session table
  • Auth: login-auth-ack and login-details-ack messages now return a "ZERO_MQ_PROXY_OUTBOUND_PORT" property instead of the mispelt "ZERO_MQ_PROXY_OUTOUND_PORT"
  • Auth: update URLs to docs
  • Auth: bump seed version for release
  • Recon: Timestamp on batch recon results view is now start time, not last updated time
  • Notify: Allow null values on email address lists

Dependency changes

  • com.thoughtworks.xstream:xstream from 1.4.20 to 1.4.21
  • oracleJdbcVersion from 23.5.0.24.07 to 23.6.0.24.10
  • org.apache.fury:fury-core from 0.8.0 to 0.9.0
  • groovyVersion from 3.0.22 to 3.0.23
  • org.quartz-scheduler:quartz from 2.3.2 to 2.5.0
  • nettyVersion from 4.1.114.Final to 4.1.115.Final
  • io.github.classgraph:classgraph from 4.8.177 to 4.8.179
  • org.apache.shiro:shiro-core from 2.0.1 to 2.0.2
  • com.zaxxer:HikariCP from 6.1.0 to 6.2.0
  • micrometerVersion from 1.13.6 to 1.14.1
  • dcarbone/install-jq-action from 2.1.0 to 3.0.1
  • debeziumVersion from 3.0.1.Final to 3.0.2.Final
  • com.avast.gradle:gradle-docker-compose-plugin from 0.17.10 to 0.17.11
  • com.zaxxer:HikariCP from 6.2.0 to 6.2.1
  • org.openapitools:openapi-generator from 7.9.0 to 7.10.0
  • com.google.errorprone:error_prone_annotations from 2.35.1 to 2.36.0
  • commons-io:commons-io from 2.17.0 to 2.18.0
  • testcontainersVersion from 1.20.3 to 1.20.4
  • log4jVersion from 2.24.1 to 2.24.2
  • debeziumVersion from 3.0.2.Final to 3.0.3.Final
  • io.reactivex.rxjava3:rxjava from 3.1.9 to 3.1.10
  • debeziumVersion from 3.0.3.Final to 3.0.4.Final
  • com.google.protobuf:protobuf-java from 4.28.3 to 4.29.0
  • org.checkerframework:checker-qual from 3.48.2 to 3.48.3
  • software.amazon.jdbc:aws-advanced-jdbc-wrapper from 2.5.2 to 2.5.3
  • Auth: bump com.jfrog.artifactory from 5.2.3 to 5.2.5
  • Auth: bump org.sonarqube from 5.0.0.4638 to 5.1.0.4882
  • Auth: bump org.passay:passay from 1.6.5 to 1.6.6

Patch releases

8.7.7

Features
  • Add flag to create compact toString method on entities
Fixes
  • Add sync backwards join cache implementation.
  • Ensure TRACE level is set correctly for GenesisMessageEncoder and GenesisMessageDecoder when DATADUMP_ON is activated
  • Increase zero mq subscriber worker high watermark value to Integer.MAX_VALUE

8.7.6

Fixes
  • Ensure classpath builder util can handle jars with no manifest

8.7.5

Features
  • Allow for overriding of test process name
Fixes
  • gradle: site specific plugin to do not modify binary files stored under data
  • Ensure cookie based REFRESH_AUTH_TOKEN value is correctly added to EVENT_LOGIN_AUTH payload
  • Ensure DataDumpManager uses different loggers for GenesisMessageDecoder and GenesisMessageEncoder
  • Ensure script files in site-specific have priority when searching by suffix

8.7.4

Features
  • Optimise memory usage BackwardJoinCache for 1-2-1 joins
  • Provide better bulk purge support
  • Performance Improvement: Use deleteAll in PurgerScript.purgeDerivedRange
Fixes
  • ExcelToGenesis: catch and accumulate unsupported formula errors while processing a worksheet
  • Fixed issue where removal of a sequence at the same time as a table rename would cause remap to fail

8.7.3

Features
  • Added ability to perform record deltas using dbSink by exposing modifiedFields

8.7.2

Features
  • genesisType json schema property for req reps and data server queries
  • Option to register root records in back join cache to ensure they exist when child record is registered
Fixes
  • Generated Entities: Generate all ENUM values inside enum reference objects for completeness
  • Added support for enabling app level sys def files in integration tests

8.7.1

Features
  • Generated Entities: Add enum references as companion object properties for each enum field for easy access in GPAL scripts
  • Document Management: Add support for excel templates
Fixes
  • Platform Integrations: Fixed initialisation issue in BloombergClient related to metrics
  • Platform Integrations: Fixed initialisation issue with Bloomberg data pipelines connector

Client

Features

  • Add support for NANO_TIMESTAMP
  • Added labelStyle property in multiselect
  • Public path deployments
  • Notify: Added No Row and Loading message for alert center
  • Notify: Added html tooltip on rule dropdowns
  • Notify: Add part to alert inbox to allow for styling overrides

Fixes

  • Remove module federation for zero ds
  • Add Accessor re-export
  • Add AttachedBehaviorHTMLDirective re-export
  • Lock all FAST package versions
  • Strip trailing slash from public path
  • KV extras
  • Add missing logout route
  • Re-direct to login after sso logout
  • Rename session to allow backward compatibility
  • Combobox dropdown hidden in entity manager forms
  • Remove tag for to specify components and hard code to rapid
  • Reporting: Improve accessibility for grid checkboxes - new row select renderer
  • Reporting: Removed special characters from column name
  • Notify: Retaining field name in right side on rule dialog
  • Notify: Made Topic field in rule dialog as combobox
  • Notify: Handle date and datetime fields in rule builder
  • Notify: Debounce text based filters
  • Notify: Force a new package-lock with up to date dependency refs

Breaking changes

Kotlin 2.1.0 upgrade

The Kotlin version used in Genesis Server is now 2.1.0. Genesis applications can now:

  • take advantage of the much faster compilation times provided by the K2 compiler
  • stay up-to-date with any other libraries that are already using Kotlin 2.x versions

Every Genesis server project is affected.

info

The Kotlin 2.x compiler may use more heap memory in certain scenarios in comparison to the previous Kotlin 1.x compiler. Please ensure your project uses the most up-to-date Gradle Daemon and Kotlin Compiler Daemon settings found on the blank-app-seed for best results.

Upgrading your server project

In many cases, the upgrade steps are as simple as changing the Kotlin version and updating the Kotlin gradle plugin configuration. The main steps are shown below:

  • Add a .gitignore entry to your project to ensure Kotlin compiler temporary files are not committed:
# Avoid kotlin compiler folder
**/.kotlin
  • Update the Kotlin Gradle Plugin usage in your "parent" build.gradle.kts file:

The Kotlin jvm plugin needs to be updated to version 2.1.0 if the plugin version is declared explicitly:

Example:

plugins {
kotlin("jvm") version "1.9.10"
}

becomes:

plugins {
kotlin("jvm") version "2.1.0"
}

If you are using any other Kotlin plugins, like the serialization plugin, you must update these to version 2.1.0.

The power-assert plugin has changed namespace. This used to be a third-party plugin, but it has been incorporated into the main Kotlin language plugins since version 2.0.0.

Example:

plugins {
id("com.bnorm.power.kotlin-power-assert") version "0.13.0"
}

// If using legacy "apply" method:
apply(plugin = "com.bnorm.power.kotlin-power-assert")

becomes:

plugins {
kotlin("plugin.power-assert") version "2.1.0"
}

// If using legacy "apply" method:
apply(plugin = "org.jetbrains.kotlin.plugin.power-assert")

KotlinCompile task configuration needs to be updated as shown below:

tasks {
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict", "-Xjvm-default=all")
jvmTarget = "17"
}
}
}

becomes:

import org.jetbrains.kotlin.gradle.dsl.JvmTarget

tasks {
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
compilerOptions {
freeCompilerArgs.addAll("-Xjsr305=strict", "-Xjvm-default=all")
jvmTarget = JvmTarget.JVM_17
}
}
}

Note the extra import statement needed in the previous example.

Further checks

The previous steps are usually enough to upgrade a Genesis app to use Kotlin 2.1.0, but there are a few other common checks to go through:

  • The Kotlin String.toLowerCase() and String.toUpperCase() methods have been removed in Kotlin 2.1.0 (deprecated since 1.5). These changes do not affect Java String.toLowerCase() and String.toUpperCase() methods.

The toLowerCase() and toUpperCase() Kotlin methods always used the default Locale to perform the transformation, but this Locale configuration may change depending on the environment where the Java process is executed.

This is exactly the same behaviour as Java toLowerCase() and toUpperCase() methods, but unfortunately, it is non-deterministic and can lead to confusion. These methods can be replaced by lowercase() or lowercase(Locale.getDefault()) (and the respective uppercase() methods too) depending on the expected behaviour.

  • lowercase(Locale.getDefault()) will maintain exactly the same behaviour as before.
  • lowercase() will use the root locale, which provides deterministic behaviour in all environments.

Example for lowercase():

val testVariable = "TEST".toLowerCase()

becomes:

import java.util.Locale

val testVariable = "TEST".lowercase(Locale.getDefault())
//or
val testVariable = "TEST".lowercase()

IntelliJ sometimes enables you to migrate the usage of deprecated methods automatically; hover over the deprecated methods and use the ALT + ENTER shortcut. In this way, you can migrate entire projects quickly and safely without resorting to search and replace operations. This is a valid method for migrating toLowerCase() and toUpperCase().

Example

  • The following GPAL methods have been deprecated, and should be removed from your code.

Ensure all *-system-definition.kts files in your project do not have the following import defined:

import global.genesis.config.dsl.systemDefinition

Ensure all *-field-dictionary.kts files in your project do not have the following import defined:

import global.genesis.dictionary.pal.fields

Ensure all *-tables-dictionary.kts files in your project do not have the following import defined:

import global.genesis.dictionary.pal.tables
tip

For any other issues, Jetbrains has additionally released a very comprehensive Kotlin 2.0 compiler migration guide.