2.0.0-M6

This release adds plenty of new features, along with numerous improvements and bugfixes.

Highlights are:

  • full support for the CommandPublisher,ExecutionPublisher and EntityPropertyChangePublisher SPIs for both JPA and JDO.

  • support for keycloak authentication (leveraging Spring security)

  • view models for serializable classes now view models;

  • a library of architecture tests to detect possible programming issues with your domain apps

  • InteractionService added to the applib, allowing programmatic control of sessions (interactions)

  • improvements to built-in and SecMan’s security (impersonation, surface UserMemento, decouple SecMan from Shiro)

  • new @MemberSupport annotation

  • removal of @MemberOrder annotation (now folded into the @XxxLayout annotations)

Also, the minimum version of Java was bumped to JDK11.

New Feature

  • ISIS-2826 - Implement Lightweight Property Change Tracking for JPA

  • ISIS-2820 - Additional arch tests for entities etc.

  • ISIS-2813 - TableColumnOrderingService using files

  • ISIS-2807 - Improve arch tests for subpackages to work across modules.

  • ISIS-2803 - Rewrite keycloak integration to use Spring security

  • ISIS-2802 - Change AsciiDoc and MarkDown types to convert on the fly, and rename 'Markup' to 'Html'

  • ISIS-2789 - Implement EntityChangePublisher for JPA

  • ISIS-2781 - Add library of architecture tests.

  • ISIS-2779 - Support JVM serialization as a way to mementos of view models that implement java.io.Serializable.

  • ISIS-2775 - Allow mixin actions to be declared on domain services.

  • ISIS-2757 - ServiceRegistry.lookupService should honour @Primary as earlier than any @Priority

  • ISIS-2756 - Unit test support fixes (docs and impl)

  • ISIS-2754 - Use @AliasFor to declare Spring’s @Named from @DomainService(logicalTypeName)

  • ISIS-2738 - Metamodel: add diff report (along the various MM downloads)

  • ISIS-2736 - Metamodel: add (diff friendly) download format ASCII (as a variant to XML)

  • ISIS-2734 - Extend the API of VirtualClock to make it a little easier to work with.

  • ISIS-2733 - Surface UserMemento on the UI

  • ISIS-2728 - Extend UserMemento to contain application tenancy path, and callback to allow secman etc to populate.

  • ISIS-2727 - Expose minimal InteractionFactory in the applib, to create new InteractionLayers. Perhaps this is an extension of SudoService ?

  • ISIS-2705 - Allow positioning of Wicket viewer’s popups to be configured

  • ISIS-2677 - Locating the layout.xml should search up the (class) inheritance hierarchy

  • ISIS-2673 - Rationalize secman fixture scripts. In particular, all regular users of secman should be granted isis.security.LogoutMenu

  • ISIS-2672 - Consider promoting the feature dom out of secman and up into core.

  • ISIS-2658 - Factor out BDD specs as a separate surefire execution so can turn on or off via system properties.

  • ISIS-2635 - Add TableColumnVisibilityService so that implementations can be used for filtering only.

  • ISIS-2622 - CommandLog: split impl into JDO and JPA variants

  • ISIS-2608 - Extend Wicket viewer to show avatarUrl and realName on header (if available)

  • ISIS-2607 - Decouple SecMan from the authenticator API that is in use.

  • ISIS-2606 - Extend UserMemento to include gravatar URL

  • ISIS-2605 - Allow spring security to handle arbitrary authenticated principals (SPI)

  • ISIS-2534 - Spring Security Integration

  • ISIS-2442 - Bring/document in base, docx from incode-platform.

  • ISIS-1720 - namedXxx() supporting method for dynamic names of actions, properties etc.

Improvement

  • ISIS-2853 - Cover all RO Viewer Endpoints with Debug Logging

  • ISIS-2850 - Remove uses of deprectated SecMan config beans

  • ISIS-2841 - Fix module path issues to allow javadoc plugin to be reinstated

  • ISIS-2836 - Remove the unnecessary mavendeps, cleanup uses of JDK11+support

  • ISIS-2831 - WicketViewer/ScalarPanelTextField: page scrolls to the top on editing a field

  • ISIS-2829 - Cannot run WicketViewer on JVM 17

  • ISIS-2819 - Extend base subdomain’s convenience annotations, provide JDO applib variants

  • ISIS-2818 - Add overrides for XxxDomainEvent for hide/disable/invalidate to evaluate a supplier

  • ISIS-2817 - Module 'Apache Isis Core - Schemas' cannot build with JDK-16 (or 17-ea)

  • ISIS-2809 - HiddenTypeFacetDerivedFromAuthorization should take actions into account

  • ISIS-2806 - Add some overrides for SudoService / InteractionContext to switch the clock.

  • ISIS-2801 - Add JPA support for Blob and Clob (multi-valued)

  • ISIS-2790 - Allow the Wicket viewer’s Password reset feature email to support xxx+yyy@ format for emails.

  • ISIS-2777 - Extend AbstractUserAndRoleFixtureScript to allow username and roles to be supplied lazily.

  • ISIS-2773 - Extend FixtureScript API to allow checking of optional params

  • ISIS-2772 - Extend ApplicationFeatureId's API to create from LogicalType

  • ISIS-2771 - Remove Object_stopImpersonating mixin

  • ISIS-2769 - Remove execPrereq and addPrereq from BuilderScriptAbstract

  • ISIS-2766 - Make ObjectIcon(s) available via ManagedObject(s) directly.

  • ISIS-2764 - stopImpersonating should always be available (under isis.applib)

  • ISIS-2762 - Allow HomePageResolverService to be substituted out.

  • ISIS-2760 - Wicket/BS-Grid: remove css class "col" from container div

  • ISIS-2755 - add @Priority to all menu @DomainService's

  • ISIS-2753 - to avoid explicit casting, make AbstractDomainEvent#getSubject() return <T> T

  • ISIS-2742 - Allow meta-annotations to be declared for entities.

  • ISIS-2740 - Wicket Viewer: menu dropdowns should have higher z-index than toast messages

  • ISIS-2732 - Rationalize fixture applib’s Clock singleton vs VirtualClock (hopefully remove the former)

  • ISIS-2730 - If home page fails to render (eg due to insufficient permissions), then just suppress.

  • ISIS-2726 - Simplify SudoService and others to be based on InteractionService

  • ISIS-2725 - Support logical type names with value types

  • ISIS-2717 - Replace FixtureScriptsSpecificationProvider with configuration properties.

  • ISIS-2715 - Shiro permissions should use namespace rather than package; fix

  • ISIS-2713 - All framework-contributed metamodel features should be in isis.<something> namespace

  • ISIS-2712 - MetaModelServiceMenu downloadMetamodelXml should filter on logical type namespaces, not on packages

  • ISIS-2707 - Extend MetaModelServiceMenu downloadMetaModelCsv to include the logicalTypeName as a column.

  • ISIS-2750 - To allow beans to be overridden, use @Priority instead of @Order and remove any @Primary annotations.

  • ISIS-2711 - TreeNode should be a value in the metamodel

  • ISIS-2709 - Fix permission seed data for h2console, make available to secman admin; other minor simplifications

  • ISIS-2701 - SecMan: rename ApplicationUser_permissions to ApplicationUser_effectiveMemberPermissions

  • ISIS-2700 - If no members visible for type, then veto viewing of instances of that type.

  • ISIS-2699 - Replace SecmanConfiguration with configuration properties.

  • ISIS-2698 - Rename secman’s 'api' and 'model' submodules to 'applib' and 'integration' respectively

  • ISIS-2697 - Simplify secman’s support for user-registration.

  • ISIS-2694 - Can we simplify secman and get rid of SecurityRealm / SecurityRealmCharacteristics ?

  • ISIS-2693 - Not sure how filterPermissions is meant to work exactly - slightly confusing output

  • ISIS-2692 - Rename ApplicationUserStatus from ENABLED/DISABLED to LOCKED/UNLOCKED

  • ISIS-2691 - Add @MemberSupport for all framework-provided mixins.

  • ISIS-2689 - Allow multiple Authorizors to be registered, with mechanism to decide which to use.

  • ISIS-2681 - Allow members of a type hierarchy including interfaces to share the same objectType=…​

  • ISIS-2668 - Suppress Object_objectType and Object_objectIdentifier unless for entities.

  • ISIS-2665 - @Action(associateWith=) requires separation of layout and behavioral concerns

  • ISIS-2659 - @DomainObject(autoCompleteAction=) should be renamed to autoCompleteMethod

  • ISIS-2655 - "You have been redirected" message gets in the way of prototypine menu.

  • ISIS-2648 - Wicket: simplify collection models and member mementos

  • ISIS-2644 - Remove Persistable_datanucleusIdLong …​ duplicated by Object_objectIdentifier

  • ISIS-2640 - Spring @Profile support

  • ISIS-2633 - Quieten DN warnings if 1:N mismatch in ApplicationTenancy hierarchy

  • ISIS-2632 - An error in security seed scripts results in none being installed, but no warning or stacktrace to diagnose from.

  • ISIS-2631 - Make terminology consistent in applib (@DomainObject(objectType=…​), TableColumnOrderService, ApplicationFeatureId, BookmarkService)

  • ISIS-2626 - Do not serve HTTP requests until the Application is fully initialized.

  • ISIS-2621 - Allow for usernames with more than 30 characters in SecMan

  • ISIS-2616 - Auto-select fixture script in drop-down if only one

  • ISIS-2615 - Clean up configuration view model a tiny bit

  • ISIS-2614 - productionise secman a bit more (finish off ImpersonsateUserAdvisor)

  • ISIS-2613 - To reduce CI build time, split out regression tests into multiple modules, so that they can run in parallel

  • ISIS-2612 - Promote @Model annotation to Applib (maybe find a better name also)

  • ISIS-2610 - Add Permission (to role) action in SecMan should use modal dialogue

  • ISIS-2609 - PrincipalForApplicationUser should use the ApplicationUser username

  • ISIS-2604 - Metamodel: don’t allow annotations to occur more than once for mixins

  • ISIS-2602 - Programming Model: add @ActionLayout/@PropertyLayout(fieldSetId=…​, fieldSetName=…​)

  • ISIS-2601 - Remove ActionPrompt page from Wicket viewer (unused)

  • ISIS-2600 - Remove microprofile from incubator

  • ISIS-2595 - Translation context should be provided consistently for collections/properties/services …​

  • ISIS-2594 - Add EclipseLink configuration property support

  • ISIS-2593 - Recognize eclipselink.* configuration options and pass them over to the EclipseLink integration.

  • ISIS-2592 - Fix schemas for secman (JDO and JPA) to be in line with the owning module.

  • ISIS-2589 - Remove usage of deprecated Wicket API ClientProperties.isBrowserInternetExplorer()

  • ISIS-2569 - Further rationalize value types representing the metamodel.

  • ISIS-2561 - Metamodel: Resurrect orphaned supporting method validator

  • ISIS-2557 - Provide a more general purpose Authenticator as an alternative to having to route through Shiro.

  • ISIS-2550 - Add support for impersonation (RunAs menu action)

  • ISIS-2549 - Configuration (Menu Action): show additional runtime information

  • ISIS-2545 - Replace @MemberOrder#name() with @PropertyLayout#fieldSetId() (and fieldSetName)

  • ISIS-2523 - Combine @MemberOrder into @PropertyLayout etc.

  • ISIS-2513 - Add JPA support Isis Blob, Clob, AsciiDoc, Markdown, SSE and other value types.

  • ISIS-2490 - @Property(entityChangePublishing=DISABLED)

  • ISIS-2471 - Remove support for validate() at Domain Object Level

  • ISIS-2329 - Support nested non-static mixins, with domain event class declared within.

  • ISIS-1488 - For auditing, Blobs and Clobs should be automatically ignored (also ISIS-1489)

  • ISIS-1046 - Get rid of chatty Shiro messages about no CacheManager being set.

  • ISIS-299 - Document the logout action. (Was: Extend the authentication API so that can explicitly logout session.)

Bug

  • ISIS-2854 - Secman’s UserMementoRefinerForApplicationUser introduces circular dependency

  • ISIS-2845 - Reinstate automatic injection into entities when resolved.

  • ISIS-2835 - JpaPropertyPublishingTest succeeds in isolation, fails when run in sequence to other tests

  • ISIS-2834 - Pending Parameters Model is not capturing values of type LocalDateTime

  • ISIS-2833 - @Title throws NPE.

  • ISIS-2830 - Wicket Viewer: ScalarPropertyModel.getManagedProperty() caching is too agressive

  • ISIS-2828 - ExecutionParametersDefault: asKeyValueMap(…​) assumes newline to be 'n'

  • ISIS-2827 - Wicket Blob/Clob: filename is rendered twice in table cells

  • ISIS-2824 - Ensure ImpersonatedUserHolder can be accessed during initial fixtures

  • ISIS-2816 - Impersonation: eventually throws exception (in the background?)

  • ISIS-2815 - TableColumnOrderServiceUsingTxtFile: line parsing will eventually fail

  • ISIS-2814 - Tooltip doesn’t appear for icons in collections

  • ISIS-2812 - Regression: cssClassFa and cssClass not honored with menubars.layout.xml

  • ISIS-2811 - Regression: Fontawesome Icons are not showing up when based on prefix pattern.

  • ISIS-2800 - reasonVetoed is null, causing NPE

  • ISIS-2799 - JPA: Framework caches and does not re-read changed state from the database.

  • ISIS-2798 - ObjectBulkLoader should inject dependencies into Pojos

  • ISIS-2796 - Use base64 encoding with o.a.wicket…​.CookieUtils.save/load.

  • ISIS-2794 - JPA Lifecycle events do not fire

  • ISIS-2793 - Impersonation with roles doesn’t work with keycloak (next interaction logs out)

  • ISIS-2791 - TitleFacetViaMethodsFactory needs to unconditionally remove toString method from action candidates

  • ISIS-2788 - XRay interferes with auditing, as it causes the pending changes to be drained/discarded.

  • ISIS-2787 - Names cannot be overridden in menubars.layout.xml

  • ISIS-2785 - Title tooltip shows the base class, rather than concrete

  • ISIS-2784 - fix implementation of FixtureScript#wrapMixin

  • ISIS-2780 - Regression: IllegalArgumentException with Wrapper using Mixin

  • ISIS-2778 - Action returning an unchanged view model does not re-inject domain services into local mixins…​

  • ISIS-2776 - @Parameter(regex=…​) does not allow for parameter to also be optional.

  • ISIS-2767 - secman m:n link table for ApplicationUser/ApplicationRole is in default schema

  • ISIS-2763 - JPA ApplicationUser / ApplicationRole should not use CascadeType.ALL

  • ISIS-2761 - Invoking link for rel object-icon results in HTTP 404

  • ISIS-2758 - Initial fixture scripts can fail to load due to JSF not present exception.

  • ISIS-2751 - ModuleFixtureService#modules() needs to be well-defined, to walk the graph correctly …​

  • ISIS-2748 - Presence of "mustSatisfy" Specifications causes integ tests to fail …​. UNKNOWN bean sort

  • ISIS-2746 - Fix the order of listeners for metamodel event (security seeding should be early, fixture installation should be late)

  • ISIS-2739 - Download menubars XML is broken, due to @DomainObject annotation on enum

  • ISIS-2724 - [Regression] Some mixed-in actions don’t show up

  • ISIS-2723 - [Regression] JDO: @Column(allowsNull="true") is not interpreted as Optionality.OPTIONAL

  • ISIS-2722 - [Regression] Markup value types are hidden

  • ISIS-2721 - [Regression] Blob/Clob properties are not rendered with table columns

  • ISIS-2720 - [Regression] FormExecutorDefault#executeAndProcessResults throws IllegalArgumentException

  • ISIS-2719 - with secman, Impersonation does not correctly figure out permissions of switched user

  • ISIS-2716 - Can’t Login to demo wicket nightly 20210602

  • ISIS-2710 - Provide a mechanism so that view models wrapping "just deleted" entity objects don’t attempt to reset their state after execution (resulting in runtime error).

  • ISIS-2708 - Add bottom margin spacing after tab groups in Wicket viewer

  • ISIS-2706 - JPA does not persist entities with application-defined primary keys

  • ISIS-2704 - If there is an select2 drop-down param, this takes focus even if not first field

  • ISIS-2696 - [Regression] MM validation fails on abtract mixin member support method

  • ISIS-2690 - ApplicationUser is unable to modify their own user detais.

  • ISIS-2688 - Impersonation doesn’t actually work …​ AuthorizorShiro still delegates to ApplicationUser as originally logged in.

  • ISIS-2686 - cannot 'identify' the value type org.apache.isis.applib.value.LocalResourcePath, as values have no identifier

  • ISIS-2684 - RO domain-types/<xxx> representation of members returns a list instead of a map

  • ISIS-2682 - Cannot read field "mutatorFacetType" because "mutatorSpec" is null

  • ISIS-2680 - [Regression] SecMan cannot open ME menu entry: no such object

  • ISIS-2679 - [Regression] SecMan cannot list Roles

  • ISIS-2674 - Collections of Interfaces do not show columns (eg ApplicationUser#getRoles())

  • ISIS-2669 - When both Wicket- and RO-Viewer are provisioned, REST requests fail due to HttpSession creation not allowed

  • ISIS-2666 - Defaults callback for dependent vector param is never called when change preceding param arg.

  • ISIS-2664 - [Regression] Collection Panel: associated actions are not showing up, if the assoc. is specified in the layout.xml only

  • ISIS-2661 - [Regression] Parented Collections: some associated actions are not showing up

  • ISIS-2657 - If action parameter first field is an auto-complete drop-down, then it doesn’t get focus.

  • ISIS-2647 - DB connection leak with DataSourceIntrospectionService

  • ISIS-2645 - Unreferenced Action not showing up

  • ISIS-2643 - Dependent default parameters don’t refresh

  • ISIS-2642 - Wildcard Generic Type Args are not properly detected, always using Object instead

  • ISIS-2641 - SecMan: abstract ApplicationFeatureViewModel.getPermissions() renders with missing columns

  • ISIS-2638 - Dependent defaults seems to be broken, eg impersonateWithRoles

  • ISIS-2636 - TableColumnOrderForCollectionTypeAbstract should return null for non-recognised collection types

  • ISIS-2630 - Regression: SecMan User’s Permission Tab is gone

  • ISIS-2629 - Wicket BS4 Regression: Disabled Action buttons should have mouse cursor disabled style

  • ISIS-2628 - Wicket BS4 Regression: Property edit button tooltips don’t dissapear on inline edit

  • ISIS-2625 - Removing access to a property nevertheless shows as column in table for user.

  • ISIS-2623 - Regression: DomainObject’s property setter may never be interpreted as an action

  • ISIS-2619 - TenantedAuthorizationFacetFactory should not use Mixin Class to filter evaluators

  • ISIS-2618 - ConcurrentModificationException with MethodFinderUtils.findAnnotatedMethod

  • ISIS-2597 - Prevent duplicate info messages being rendered

  • ISIS-2591 - source release seems to zip up node_modules & datanucleus.log

  • ISIS-2590 - MessageService informUser messages not presented in the UI

  • ISIS-2588 - Icon size in breadcrumb misaligned with font size

  • ISIS-2587 - [WON’T FIX]Navigable parent not updated in breadcrumb panel

  • ISIS-2583 - NPE from ConfigurationViewServiceDefault if there are NO datanucleus.log properties defined.

  • ISIS-2580 - Duplicated UI notification on DataAccessExceptions.

  • ISIS-2573 - Regression-Testing: add entity change publishing tests

  • ISIS-2562 - SecMan: New User modal dialog …​ selected inital role has no label only icon

  • ISIS-2493 - Actions with same name but different signature potentially share the same metamodel member id.

  • ISIS-2488 - Add metamodel validation: detect object-type (logical-type) name clashes

  • ISIS-2465 - Kroviz - Demo Menu Actions Show No Output

  • ISIS-2390 - Not possible to navigate to date/time drop-down using keyboard.

  • ISIS-2253 - Derive ChoicesFacet from ChoicesFromFacet, remove special-case logic.

  • ISIS-2063 - Entering a string such as "10:45" for a joda LocalTime causes stack trace.

  • ISIS-2015 - Text (multiline?) can be changed on non-editable field, without using edit.

Dependency upgrade

The list below is not comprehensive:

  • ISIS-2849 - Bump Spring Boot from 2.5.3 to 2.5.4

  • ISIS-2783 - Bump resteasy-spring-boot-starter from 4.8.0.Final to 4.8.1.Final

  • ISIS-2808 - Java 11 to replace Java 8 compliance for the entire code base

  • ISIS-2685 - Bump spring-boot from 2.4.5 to 2.5.0

  • ISIS-2662 - Get ready for Maven 3.8.x

  • ISIS-2617 - Upgrade Bootstrap 3 to 4 (WicketStuff)

Demo and Starter Apps

  • ISIS-2620 - Demo: create a JPA stack based variant

  • ISIS-2660 - For starter apps, remove persistence.xml (we can get by without it).

  • ISIS-2584 - Disable CORS for SimpleApp

  • ISIS-2687 - To reduce learning curve, remove archunit, lockdown and BDD specs from simpleapp.

  • ISIS-2714 - Update helloworld and simpleapp with permissions to allow users to logout (!)

  • ISIS-2652 - simpleapp’s SimpleObject.layout.xml throws metamodel errors unless fieldSetId="…​" is defined also.

  • ISIS-2611 - for simpleapp, the Smoke_IntegTests seem to be run twice (by two different surefire executions).

Won’t Fix / Not a Problem / Duplicates

No code changes were made to close these tickets:

  • ISIS-2786 - [NOT A PROBLEM] A tabgroup with tab that contains multiple fieldsets does not surround them correctly (UI cosmetics only)

  • ISIS-2747 - [OBSOLETE] Document the fact that secman requires SudoService to specify a user with appropriate roles

  • ISIS-2745 - [DUPLICATE] Allow actions to be contributed to domain services also.

  • ISIS-2675 - [WON’T FIX] Object_ mixins should only be contributed to entities and view models.

  • ISIS-2671 - [WON’T FIX] Extend ApplicationRole to show the inferred permissions (similar to ApplicationUser)

  • ISIS-2040 - [WON’T FIX] Authentication/Shiro: Add OpenID support

  • ISIS-2555 - [WON’T FIX] EntityChanges (as consumed by EntityChangesSubscriber) should associate with transaction, not interaction?

  • ISIS-2514 - [DUPLICATE] add JPA support commandlog extension

  • ISIS-2603 - [WON’T FIX] Simplify layout styles (that are available for download when prototyping)

  • ISIS-2574 - [WON’T FIX] Swagger: Harmonize dependencies of metamodel and vaadin viewer

  • ISIS-2650 - [DUPLICATE] Support domain events for property and collection mixins