Skip to content

Latest commit

 

History

History
179 lines (158 loc) · 11.8 KB

File metadata and controls

179 lines (158 loc) · 11.8 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  1. FlowQuery API
    Introduces an expression-based querying approach that offers a more expressive and unified API. Issue #140
  2. Reusable step data imports (@Import)
    Enables reusing and composing common step data sets by importing data definitions from another type. Supports optional kind prefixing (CamelCase or Plain) and merges data listeners from the imported and parent step, reducing duplication and improving maintainability. Issue #145

Changed

  1. Spring integration artifacts are now published in two explicit lines
    All Spring Boot integration artifacts are now published under coordinates that carry the supported Spring Boot major version: *-spring3 for Spring Boot 3 (e.g. de.lise.fluxflow:springboot-spring3) and *-spring4 for Spring Boot 4 (e.g. de.lise.fluxflow:springboot-spring4). The historical, unsuffixed coordinates (e.g. de.lise.fluxflow:springboot) are legacy Boot 3-only releases and will not receive new versions - migrate to the -spring3 coordinates when upgrading. Core artifacts remain Spring-agnostic and keep their unsuffixed coordinates. Both lines are released together, and the build now verifies the published coordinates before anything is published. Issue #401, Issue #402, Issue #405
  2. Spring Boot 4 variants now use Jackson 3
    The -spring4 variant of springboot-web now consumes Spring Boot 4's auto-configured Jackson 3 ObjectMapper (tools.jackson.databind.ObjectMapper) instead of requiring a Jackson 2 com.fasterxml.jackson.databind.ObjectMapper bean, which Spring Boot 4 no longer auto-configures. This fixes context startup failures (NoSuchBeanDefinitionException: com.fasterxml.jackson.databind.ObjectMapper) and removes the need for the deprecated spring-boot-jackson2 workaround in consuming applications. tools.jackson.module:jackson-module-kotlin is now a runtime dependency of springboot-web-spring4, so request bodies deserialize into Kotlin data classes out of the box. The -spring3 variants are unaffected and remain on Jackson 2.

Deprecated

  1. Legacy Query/Filter API
    The legacy query and filter APIs are now deprecated in favor of the new FlowQuery API.
    Issue #140

Fixed

Removed

[0.2.0] - 2025-10-02

Added

  1. Optional sort property
    Enhanced Sort Functionality to Handle Nullable Properties. The Sort interface now includes a nullableProperty function that allows nullable properties to be used for sorting. Issue #135
  2. Inclusion of nested/recursive validation constraints
    The Jakarta validation now reports validation constraints present on step data property's type, as long as the property is itself annotated with @Valid. Issue #152
  3. Versioning information for step definitions
    Step definitions and steps can now carry versioning information. They can be applied by annotating a step with the new @Version annotation.
  4. Compatibility checks and restored versions for steps
    FluxFlow can now check if the current step definition is still compatible with the version that has been used to originally create a step to be loaded from persistence. If it is incompatible, a restored/historic version of the affected step can be returned. See https://docs.fluxflow.cloud/see/2 for more information.
  5. Allow passing additional information when updating step data
    The StepDataService now accepts an additional parameter allowing developers to pass additional context information.
  6. DoesNotContainElement filter The filter 'DoesNotContainElement' has been added, which matches collections not matching a given element.
  7. Not filter
    The Not filter has been added, which negates the result of the inner filter.
  8. Job querying feature
    Added the ability to query for jobs using the JobService.findAll method. This allows developers to retrieve jobs based on various criteria.
  9. ElemMatch filter
    The ElemMatch filter has been added, which matches collections where the inner filter matches any element of the collection.
  10. Job duplication The duplicateJob method has been added, which duplicates the given job and schedules it for a workflow.
  11. Workflow definition metadata
    Similar to steps, jobs, and step data, workflow definitions now support metadata. The metadata is automatically extracted from annotations present on the workflow model class. This metadata can be accessed via the WorkflowDefinition.metadata property. Issue #86 and Issue #50
  12. Scheduled job reconciliation on startup
    Added a startup BootstrapAction that validates all jobs marked as Scheduled in persistence and automatically reschedules any that are missing from the active scheduler implementation. Enable with fluxflow.scheduling.reconcileOnStartup=true.
  13. Possibility to intercept job executions
    Developers can now register JobExecutionInterceptors allowing them to intercept immediate job executions. This allows for custom setup and teardown actions, which might be necessary as jobs are regularly executed outside a request context. Issue #337

Changed

  1. Configurable replacement scope for workflow continuations
    The Continuation.workflow function now supports a replacementScope parameter that defines which workflow elements should be replaced. The default value is an empty scope, which means that only the workflow itself is replaced.

    Previously, the standard behavior of a workflow replacement continuation was to replace the steps and jobs of the workflow. Issue #99

  2. Added an optional version property to MongoDB's StepDocument. There is no need for a migration, as the field is optional/nullable.

  3. A custom collation can now be specified when ensuring indexes using MongoBootstrapAction.

  4. MongoDB documents now use a different data structure to store map entries and their data types. See https://docs.fluxflow.cloud/see/1 for more information.

  5. If a FluxFlow job has no explicit cancellation key,
    Quartz now uses the workflow and job identifier as the job key.
    This enables more efficient lookups for pre-scheduled jobs.
    To fall back to lookups based on the job detail map (which requires iterating over all scheduled jobs),
    set fluxflow.quartz.legacyLookup to true.

Fixed

  1. NPE within ParamMatcher.isAssignable
    The NullPointerException that has been thrown within ParamMatcher.isAssignable when passing in a generic type has been fixed. Issue #158
  2. SOE with AndFilter in InMemoryFilter
    Fixed a bug in the InMemoryFilter implementation where the and filter was not implemented correctly and caused a stack overflow error with infinite recursion of and calls.
  3. NPE with NullablePropertyFilter in InMemoryFilter
    Fixed a bug in the InMemoryFilter implementation where the nullableProperty filter was incorrectly casting nullable properties and not properly handling null values, which caused NullPointerExceptions during filtering.
  4. CNFE for singleton lists and sets Fixed a bug in assertType in SimpleType.kt where lists and sets with one element cause a ClassNotFoundException because they are stored using the internal singleton collection types.

Removed

  1. Removed the unused Type.toKClass() extension function from de.lise.fluxflow.reflection.

[0.1.0] - 2024-03-10

Added

  1. Model listeners
    A model listener can be used to act upon changes to a workflow's model. Similar to data listeners, model listeners are declared by creating a function within the workflow model and annotating it with @ModelListener. Issue #70
  2. Job(definition) metadata
    Jobs and job definitions now support adding metadata using annotations.
  3. Step data modification policy
    A step data modification policy can be used to control the modification behaviour on inactive steps. The policy can be accessed by the step data definition. Issue #90
  4. Step data metadata
    Step data can now also be annotated with metadata. The metadata can be accessed via the step data definition. Issue #50

Changed

  1. Harmonized Spring Boot dependencies.
  2. The Spring packages are now targeting version 3.2.1.
  3. AnyOfFilter, InMemoryAnyOfFilter and MongoAnyOfFilter have been renamed to [...]InFilter and deprecated aliases have been added to maintain API compatibility. The Filter interface now also exposes a Filter.in function.
  4. The Filter.in and Filer.anyOf are now accepting a more general Collection<TModel> parameter. Additionally, there is an overload that directly accepts the more sensible Set<TModel>. Issue #101
  5. Packages depending on or extending Spring Boot functionalities are now consistently prefixed with springboot-. Issue #38
  6. The WorkflowService is now a composition of all CRUD-related services. Issue #109
    • create: WorkflowStarterService
    • read: WorkflowQueryService
    • update: WorkflowUpdateService
    • delete: WorkflowRemovalService

Deprecated

  1. Workflow.id has been renamed to Workflow.identifier. The id property remains as an alias and is deprecated.
  2. AnyOfFilter, InMemoryAnyOfFilter and MongoAnyOfFilter are now deprecated aliases for InFilter, InMemoryInFilter and MongoInFilter.

Fixed

  1. Changes to the step and workflow are now persisted before publishing events. Issue #47
  2. Persisting and publishing of step and workflow updates are now skipped if the element didn't actually change. Can be disabled by setting fluxflow.change-detection.step or fluxflow.change-detection.workflow to false. Issue #49
  3. Dependency injection now throws an exception if the dependency resolution fails for other reasons than a missing dependency (e.g. duplicate beans). Issue #110
  4. Steps with custom step kinds can now be activated successfully. Issue #115

Removed

  1. Removed experimental and broken de.lise.fluxflow:memorycache module. Issue #94
  2. The WorkflowService.replace function has been removed as it leaked internal functionality. Issue #10

[0.0.1] - 2024-01-24

Added

  1. Initial FluxFlow release