3.0.0

After almost six years effort (!), v2.0.0 and v3.0.0 are the first official releases of Apache Causeway, now re-platformed to run on Spring Boot. The two versions are being released at the same time.

The v3.0.0 release is broadly equivalent to the v2.0.0 release. As such, see the 2.0.0 release notes for full details of the features available in this release.

However, 3.0.0:

  • targets Spring Boot 3.x (instead of Spring Boot 2.x)

  • targets Java 17 (instead of Java 11)

It also uses the jakarta namespace rather than javax.

There is one functional change, namely that support for Shiro security module has been dropped (for now). See the migration notes for options.

Table 1. Comparing v2.0.0 and v3.0.0
v2.0.0 v3.0.0 Notes

Java

11

17

Spring Boot

v2.7.18

v3.2.4

Spring Boot 2.7 is EOL.

Namespace

javax.*

jakarta.*

Wicket

v9.17.0

v10.0.0

Bootstrap

5.3.2

5.3.3

RestEasy

5.0.0.Final

6.2.7.Final

EclipseLink

2.7.14

4.0.2

DataNucleus

6.0.7

6.0.7

Other highlights

  • Persistence using JPA has been added through an integration of EclipseLink.

    Persistence using JDO continues to be supported through the integration with DataNucleus.

    We use EclipseLink rather than Hibernate because the latter is licensed using LGPL, which is incompatible with ASF licensing. In addition, EclipseLink is the reference implementation for JPA.

    Spring Data is supported for both persistence mechanisms.

  • multiple mechanisms of implementing view models (JAXB, programmatic, serializable). This is pluggable.

  • added a generic GraphQL API.

  • multiple improvements to the programming model, including:

    • support for meta-annotations

    • support for different introspection modes.

      In particular, "encapsulated" mode mean that the properties and collections of entities and view models do not have to have public visibility; their programmatic API can be kept to a minimum.

    • supported custom scalar value types and composite types

      This includes AsciiDoc, Markdown, Joda Time and Vega (Vega-lite, "a grammar of interactive graphics").

    • mixin classes annotated as @Action, @Property or @Collection

    • logical type name aliases

  • integration extensions, including Command Log, Execution Log and Execution Outbox

  • Web UI (Wicket Viewer) extensions including Full Calendar, PDF.js, Tabular Extension (Excel).

    Also tree view and client-side filtering using datatables.net JS.

  • security extensions including secman ( authorization and/or authentication implemented as Causeway entities), Audit Trail and Session Log

  • dependency/library upgrades:

    • Spring event bus replaces guava or axon; removes guice

    • ByteBuddy replaces cglib or javassist for implementation of WrapperFactory

    • switch from hsqldb to h2

  • other extensions such as a BackgroundService for executing commands asynchronously, and Flyway integration.

Apart from dependencies and the javax/jakarta namespace, in most regards v2.0.0 and v3.0 are functionally equivalent. The only feature not available in 3.0 is the Shiro module, because (at the time of release) Apache Shiro have not released jakarta support. However, either the Spring Security integration or even the Simple Security implementation can be used instead.


For 2.0.0 and 3.0.0, below lists the features, improvements and bugs made since the previous release:

New Feature

Improvement

  • CAUSEWAY-3700 - Include the secman authenticator auto-configuration…​

  • CAUSEWAY-3697 - Deprecate @DomainService(nature=NatureOfService..) for Removal (to be replaced by some SPI)

  • CAUSEWAY-3696 - Don’t log ClientAbortExceptions

  • CAUSEWAY-3694 - IntrospectionPolicy ENCAPSULATION_ENABLED should NOT require annotation on mixin main method.

  • CAUSEWAY-3693 - [Wicket Viewer] Allow table header text to break on whitespace (CSS)

  • CAUSEWAY-3692 - [Programming Model] Rename DependentDefaultsPolicy to PrecedingParamsPolicy to better explain intent.

  • CAUSEWAY-3691 - [JUnit] Remove 'stable' from regression test artifact names

  • CAUSEWAY-3689 - Make parsing of BigDecimal stricter, to avoid mistypes.

  • CAUSEWAY-3688 - Audit trail should gracefully attempt to capture values, but not fail fast.

  • CAUSEWAY-3687 - [Validation] Disallow @Transactional within @DomainService(nature=VIEW)

  • CAUSEWAY-3686 - [Wicket Viewer] Veto (Reason) Icon Tooltip is potentially too verbose

  • CAUSEWAY-3685 - Tree Rendering: allow for nodes to be marked (as selected)

  • CAUSEWAY-3684 - [Commons] Json/YamlUtils support for Can<T>

  • CAUSEWAY-3683 - [Commons] Json/YamlUtils support for java.time (ISO)

  • CAUSEWAY-3678 - REST API should return a 503 if polled before the app is fully up.

  • CAUSEWAY-3675 - Suppress autoflush if called by EntityChangeTracker (to avoid concurrent modification exceptions).

  • CAUSEWAY-3672 - Make DomainEventHelper more resilient if there is a programming error with the definition of an event.

  • CAUSEWAY-3661 - REST call for collection can return 404 error

  • CAUSEWAY-3646 - [Programming Model] Object Support Method for Font Awesome Layers

  • CAUSEWAY-3461 - [Wicket Viewer] unable to tab into autoComplete search field.

  • CAUSEWAY-3404 - [Commons] Quality of Life Improvements for 2.0.0 Release

  • CAUSEWAY-3390 - AuditTrailEntryRepository has generic parameter vs secman repos (eg ApplicationUserRepository) that does not …​ make these consistent.

  • CAUSEWAY-3081 - Check for existence of feature in fixturescript

  • CAUSEWAY-2873 - petclinic tutorial (documentation)

  • CAUSEWAY-2085 - [archunit rule] Every entity should be annotated with @XmlJavaTypeAdapter(PersistentEntityAdapter.class)

Bug

  • CAUSEWAY-3701 - Enable h2 ui console for v3

  • CAUSEWAY-3679 - Downloaded Excel spreadsheet shows header rows as black on black.

  • CAUSEWAY-3674 - [Wicket Viewer] Potential NPE in PendingParamsSnapshot

  • CAUSEWAY-3673 - Fix LayoutLoadersGitHubMenu action’s incorrectly defined domain event.

  • CAUSEWAY-3667 - [Wicket Viewer] Regression: date/time picker in param dialog is squeezed into single line

  • CAUSEWAY-3650 - FixtureScripts runScript vs runFixtureScript - one fires the FixturesInstallingEvent/FixturesInstalledEvent and the other does not.

  • CAUSEWAY-3620 - RO viewer returns 500 not 404 if object doesn’t exist.

  • CAUSEWAY-3491 - [Wicket Viewer] cannot easily change the offset for an OffsetTime

  • CAUSEWAY-3490 - [Wicket Viewer] not possible to change the offset for an OffsetDateTime.

  • CAUSEWAY-3489 - [Wicket Viewer] cannot enter ZonedDateTime values and Joda DateTime.

  • CAUSEWAY-3326 - Specification's Injection Points are not being resolved

  • CAUSEWAY-3175 - Autocomplete not supported for values, only for object references

Duplicate

  • CAUSEWAY-3695 - [DUPLICATE] Joda DateTime not being handled correctly - treated as a ZonedDateTime

Documentation

Task


Version 3.x also has a number of its own changes not present in the 2.x release:

New Feature

  • CAUSEWAY-3698 - Security Integration Replacement for Shiro INI based Realm

  • CAUSEWAY-3348 - [Programming Model] Support for Action Parameters as a Tuple using Java Records (Mixins only)

Improvement

Bug

Dependency upgrade

  • CAUSEWAY-3634 - [Wicket Viewer] Update to Wicket 10.0.0-M2

    Note that the final release uses Wicket 10.0

Not implemented (moved to Attic)