6.0 Changelog

This page lists all the changes introduced in 6.0 releases. See also the release notes and the migration guide.

6.0.4 (2022-11-02)

Changes

  • Upgrade Hibernate from 5.6.9 to 5.6.12

    Details

    This fixes null mapped one-to-one field on an entity loaded from L2 cache.

Features

  • Update meta field labels and descriptions when restoring meta models

    Details

    Update meta field labels so that they can be used in grid customization.

  • Improve details-view usage

    Details

    In a details-view, the form view can be closed on demand or if there is no selected line. When we delete a line in the grid, the record in the form is no more displayed.

    This also fix duplicated requests, missing onLoad/onNew calls in some conditions and reset attrs states on form view.

Fixed

  • Preserve scroll position after saving form in details view

  • Fix grouped grid display when already initialized

  • Fix chart context evaluation when calling from action-view

  • Fix page on grid customization popup when containing extra fields

  • Make sure grids have committed before firing button action

    Details

    Fixes application that can become unresponsive after clicking on a button on a form view while having uncommitted editable grids.

  • Fix record pager display issue in popup

  • Fix missing cell css applied on item’s parent

  • Merge search-filter fields title with the model field title in grid customization popup

  • Fix query fetching missing fields in TagSelect widget

  • Fix delete metafile if target file is not found

  • Fix dependency conflict between GraalJS and Birt with package "com.ibm.icu"

  • Fix adding duplicate dotted field in grid customization

    Details

    Fix adding duplicate dotted field in grid customization when it exists both in view and search filters.

  • Fix customize dashboard with drag & drop

  • Fix wrong number of attachments displayed on record toolbar paper clip icon

6.0.3 (2022-09-28)

Features

  • Add view action to help popover

Fixed

  • Fix missing item context after creating M2M item from popup

  • Check for view.allow-customization setting when saving customized view

  • Fix save action on top grid preventing further actions

  • Fix wrong css class applied on editable grid

  • Fix custom fields on editable grid

  • Fix restarting jobs after scheduler shutdown

  • Fix model class resolution in Groovy expressions

  • Fix refreshing html dashlet when record changes

  • Fix non editable grid view customization popup

  • Fix required field using TagSelect widget

  • Skip default values of dotted field in editable grid

  • Fix timezone issues with date adapter

    Details

    When the server is running on UTC- timezone, date could be converted back by one day.

  • Fix conflicting Order title

  • Fix saving boolean false filter

    Details

    In the case of boolean fields with operator false, filter was transformed in order to check for null or false. But by doing that, original criteria was lost, breaking meta filter saving. Replaced client-side operators true and false by new virtual operators $isTrue and $isFalse which perform client-side transformation.

  • Fix ReferenceError with "⇐" operator on custom date/datetime fields

  • Fix sidebar toggle on window resize

  • Fix client authentication using path based callback url

    Details

    Some clients, ie AzureAd2Client, use path based callback url (/callback/AzureAd2Client) instead of default query based callback url (/callback?client_name=AzureAd2Client).

  • Fix missing TagSelect placeholder until we add and remove an item

  • Fix auth properties that exist in client and configuration

    Details

    When a property exists in the configuration and the client, try to set both.

    For example, scope exists in both GenericOAuth20Client and OAuthConfiguration.

  • Fix clipped field in Modern theme when using css="large" on WebKit-based browsers

  • Apply client-side operators on export and masss update

    Details

    Applying client-side operators was done on search only. Now, it is also done on exports and mass updates.

  • Fix setting $-prefixed dummy fields from onNew with default values

    Details

    Issue happened when setting $-prefixed dummy fields from onNew and record has some default values.

  • Fix wrong selected rows after grid sorting

  • Fix custom date/datetime criteria processing combined with column search

  • Use access token to retrieve user profile picture from OpenID Connect

    Details

    This fixes retrieving user profile picture from Azure Active Directory, where sending the access token is required.

  • Fix refreshing html view from tab right click

  • Fix save action with only default values

    Details

    This allow to save a record that contain default values (generally coming from domain definition) when calling save action. This behavior will be same as the toolbar save button behavior.

  • Fix changing dashlet url from action-attrs

  • Fix setting authentication map property

    Details

    This fixes setting GenericOAuth20Client.profileAttrs. Issue happened when there was no getter.

    # profile attributes: map of key: type|tag
    # supported types: Integer, Boolean, Color, Gender, Locale, Long, URI, String (default)
    auth.provider.oauth.profile-attrs.age = Integer|age
    auth.provider.oauth.profile-attrs.is_admin = Boolean|is_admin

6.0.2 (2022-08-03)

Features

  • Improve report-box template in custom view

    Details
    • Implement icon attribute

    • Format value

    • Translate label

    • Implement dynamic percent style

    • Implement dynamic percent level style

    • Fix tag positioning

  • Add config to define the maximum number of items displayed per page.

    Details

    Introduce new config api.pagination.max-per-page :

    # Define the maximum number of items per page
    api.pagination.max-per-page = 1000

    This config is used globally in UI to limit and set the maximum number of items displayed per page. -1 means unlimited (default value). This will block users who try to get a high number of records. Fetch a too large dataset can result in some high server side load.

  • Minor fields tracking UI improvements

    Details

    Add minor fields tracking UI improvements :

    • Use right arrow character instead of right angle quote

    • Display None instead of an empty value

    • On create event, don’t generate tracking on empty field

  • Improve report-table custom view

    Details
    • Translate titles

    • Use title attribute from fields

    • Preserve column declaration order from dataset if report-table columns attribute is not specified

    • Format data according to field type, including selection with translation

    • Support field translatable attribute

    • Sticky header and footer

    • Skip having to define data='data'

    • Ability to sort by columns

    • Ability to use widgets supported in grid views

    • Allow to export dataset from dashlet export button

    Example:

    <custom name="my-report-order-lines" title="Order lines">
      <field name="statusSelect" type="integer" selection="selection-order-status" title="Status"/>
      <field name="product" type="string" x-translatable="true"/>
      <field name="total" type="decimal" x-scale="2" />
      <dataset type="jpql" limit="10">
      <![CDATA[
      SELECT self.name AS name, self.statusSelect AS statusSelect,
             item.product.name as product, item.quantity * item.price AS total
      FROM Order self
      LEFT JOIN self.customer AS c
      LEFT JOIN self.items AS item
      WHERE c = :customer
      ORDER BY self.name
      ]]>
      </dataset>
      <template>
      <![CDATA[
      <report-table sums='total'></report-table>
      ]]>
      </template>
    </custom>

Fixed

  • Fix chart dashlet data export

  • Fix unregistered request scope causing database task to fail

    Details

    If application has any bound RequestScoped classes, it will cause the database task to fail to install AppModule with "No scope is bound to com.google.inject.servlet.RequestScoped." error.

  • Fix advanced search with custom any-to-many fields

  • Fix html view height in popup

  • Ignore forceEdit if user has no write permission

  • Fix TypeError when user has insufficient permission to display a panel tab

  • Fix duplicate data loading of kanban dashlet inside form view

  • Fix context of kanban in dashlet

    Details

    Apply the same context behavior as other dashlets, ie. merge action-view context with current record context.

    Instead of domain, use criteria (as it is done for calendars) for the columnBy filter, as to avoid conflict with current record context.

  • Fix reload action on cards and kanban view

  • Fix grid JS error if action sent a list of IDs instead of a list of records

  • Don’t update the number value on spin events

    Details

    This fixes action iconsistencies between changing number value via manual input and spinner.

  • Take into account view-param limit on kanban views

  • Fix spurious invalid fields notice when master detail is not shown

  • Fix adding row on top editable grid when editor buttons are disabled

  • Prevent popup from handling editable grid key down events

    Details

    This fixes popup closing when pressing escape in editable grid.

  • Fix the view opened on mail thread creator link

    Details

    The user-info-form view can be bypassed if we refresh the browser tab after clicking on mail thread creator. The view is now opened in popup. If no view is defined, nothing is opened (no more fallback on user-form).

  • Fix grid column search combined with predefined and custom search filters

  • Don’t check for CSRF tokens with direct clients

  • Don’t reload dashlet calendar data when the widget is not visible

  • Fix adding row on grouped editable grid

  • Fix array of strings in context

    Details

    For example:

    <context name="_myStrings" expr="eval: ['hello', 'world']"/>
  • Commit editable grid when closing popup without confirming

    Details

    In a popup containing an editable grid, the line being edited was not committed if we directly close the popup via the "OK" button without clicking on "Confirm" in the editable grid.

  • Fix missing group on views and menus when loading

  • Fix emptying a field using SingleSelect widget

  • Fix uninitialized injector when running database task

  • Fix broken translation popup

  • Fix exporting selection field if multi-select widget is used

6.0.1 (2022-06-27)

Changes

  • Upgrade embedded Tomcat from 9.0.62 to 9.0.63

  • Upgrade Hibernate ORM from 5.6.8.Final to 5.6.9.Final

  • Upgrade Byte Buddy from 1.12.9 to 1.12.10

  • Upgrade Infinispan from 13.0.9 to 13.0.10

  • Upgrade Redisson from 3.17.1 to 3.17.3

  • Upgrade PostgreSQL JDBC from 42.3.4 to 42.3.6

  • Upgrade Flyway from 8.5.10 to 8.5.11

  • Upgrade Jackson from 2.13.2 to 2.13.3

  • Upgrade UnboundID LDAP SDK from 6.0.4 to 6.0.5

  • Rework mail message endpoints

    Details

    Some mail message endpoints has been reworked to use dedicated path. This avoid to give permission to MailMessage or MailFlag objects in order to access the mail menus and deal with messages and flags. MailMessage action-view is now always allowed in order to open mail views.

  • Upgrade GreenMail from 1.6.8 to 1.6.9

Features

  • Update file name format for duplicate file name

    Details

    Update format from file (1).txt to file-1.txt. This avoids necessary space in file name.

  • Show configured application logo in about page

  • Report duplicate view items at the end of the view loading process

  • Sanitize uploaded filenames

    Details

    Sanitize uploaded filenames :

    • Removes special characters that are illegal in filenames on certain operating systems

    • Replaces spaces and consecutive underscore with a single dash

    • Trims dot, dash and underscore from beginning and end of filename

Fixed

  • Don’t save meta filters with spurious $new attribute

  • Fix saving filter with string field

    Details

    In the case of string fields with operators isNull and notNull, filter was transformed in order to check for null or empty. But by doing that, original criteria was lost, breaking meta filter saving.

    Instead, use new virtual operators $isEmpty and $notEmpty which perform client-side transformation.

  • Fix MetaModule#application flag not filled

  • Take column filters into account when refreshing dashlets

  • Fix calendar dashlet refresh after refreshing/saving form view

  • Fix mail thread avatar img display

  • Fix downloaded filename from html action-view

  • Fix uploading file if a file with the same name exist

  • Fix missing name and color fields from selector with TagSelect widget

  • Fix missing _domainAction from context of kanban in dashlet

    Details

    The attribute _domainAction is needed to reevaluate the context server-side.

  • Fix ignored canNew attribute and permissions when pressing enter on last row of editable grid

  • Fix deadlock when loading views of different types with same 'id'

  • Fix meta file not found error

  • Fix downloaded filename encoding in Content-Disposition header

  • Clear dashlet filters when changing to another record

  • Allow users to paste into password fields on change password form

    Details

    Preventing password pasting undermines good security policy. https://web.dev/password-inputs-can-be-pasted-into/?utm_source=lighthouse&utm_medium=devtools

  • Fix duplicate data loading for grid dashlets on dashboards

  • Fix closing of resources in CSV/XML importers

  • Fix chart onAction and onClick having no context

    Details

    onAction and onClick should have context just like onInit.

  • Fix keyboard shortcut popup content

  • Fix grouping by extra custom field in grid view

    Details

    Fix grouping by custom field defined on JSON field other than default attrs.

  • Fix too many redirects error in case of missing pac4j user profile

  • Fix missing _domainAction from context of calendar in dashlet

    Details

    The attribute _domainAction is needed to reevaluate the context server-side.

  • Fix hide issue on archive/attach/log grid built-in toolbar buttons

    Details

    hidden attribute on built-in toolbar buttons wasn’t taken into account for archive/attach/log buttons.

    For example:

    <toolbar>
      <button name="log" onClick=" " hidden="true"/> <-- Hide audit log button -->
      <button name="attach" onClick=" " hidden="true"/> <-- Hide attachment button -->
      <button name="archive" onClick=" " hidden="true"/> <-- Hide archive/unarchive button -->
    </toolbar>

6.0.0 (2022-05-20)

Changes

  • Re-implement action-ws using http client

  • Update join table columns names due to database reserved words conflicts

    Details

    Due to reserved words added in recent versions of supported databases, change columns name groups and menus to respectively group_id and meta_menu_id in the join tables name meta_menu_groups and meta_view_groups.

    Use these SQL statements to upgrade existing database :

    ALTER TABLE meta_menu_groups RENAME COLUMN groups TO group_id;
    ALTER TABLE meta_menu_groups RENAME COLUMN menus TO meta_menu_id;
    ALTER TABLE meta_view_groups RENAME COLUMN groups TO group_id;
    ALTER TABLE meta_view_groups RENAME COLUMN views TO meta_view_id;
  • Upgrade from Guice 4.2.2 to 5.1.0

  • Remove com.axelor.event.Priority in favor of javax.annotation.Priority

  • Not allowed to customize the search engine grid

  • Upgrade to Hibernate Search 5.11.10.Final

  • Search engine improvements

    Details

    The search engine view has been improved. It allows to implement recursive filters for more flexibility on the search condition, but also:

    • Add support for Enum field type in search fields.

    • Allow to define limit on each select. It gets preference over limit attribute of search.

    • Add support for enum and selection (also autodetect multi-select values) for fields in result fields.

    • Add support for returning only distinct records (based on id) on each select.

    • Allow to add an if condition on where. It the value of the expression is false, the element is skipped.

    • Add support for hiliting on row as well as on field.

    • Add support for adding buttons in grid view.

    Breakings changes:

    • The orderBy fields should refere to field names of the object graph (and no more the as attribute).

    • When searching on a multi-valued field (O2M/M2M), it shouldn’t need to be suffixed with [] anymore. For example, items[].product should now be items.product.

  • Improve groups and jobs data-init

    Details

    The default admins group is now marked as technicalStaff. The default mail.fetcher job is no more active by default.

  • Upgrade to StringTemplate 4.3.3

  • Format numbers, dates, and currencies preferably according to the user language

    Details

    Formatting of numbers, dates, and currencies used to be based on browser locale only. Now, formatting is done preferably according to the user language. If the user language has no country information, we select the first browser locale that matches the user language.

  • Upgrade to Guava 31.1-jre

  • Rename application.properties to axelor-config.properties

    Details

    The internal configuration file application.properties is renamed to axelor-config.properties

  • Upgrade from JDK 8 to JDK 11

    Details
  • Upgrade to Spotless 6.5.1

  • Use jcache in combination with Caffeine as second-level cache provider

    Details

    Ehcache2 second-level cache is deprecated since Hibernate 5.3. Use jcache in combination with Caffeine by default as second-level cache.

  • Rework actions on chart menu

    Details

    Adding buttons on chart menu was working using the following syntax : <config name="onAction" value="some-action"/>

    This syntax has been updated to the following :

    <actions>
    <action name="myBtn1" title="My action 1" action="some-action1"/>
    <action name="myBtn2" title="My action 2" action="some-action2"/>
    </actions>

    This allows to support more than 1 button on chart menu, but also provide a flexible usage of the feature.

  • Upgrade PostgreSQL Jdbc to 42.3.4

    Details

    This add support new SCRAM-SHA-256 password encryption method which is now the default password encryption method is PostgreSQL 14.

    Jdbc also introduce a change about Timestamp rouding : 2018-06-03T23:59:59.999999999 is rounded to 2018-06-04 00:00:00 (previously it was rounded to 2022-03-08 23:59:59.999). This new behavior follow psql’s suit. Especially if you work with Datetime/Timestamp having LocalTime.MAX as time, make sure to adjust your query.

  • Adopt a better configurations naming

    Details

    A lot of configurations names has been updated to have better and uniform naming across all settings. Refer to migration notes.

  • Support indirect/direct basic auth client via setting auth.local.basic-auth

    Details

    Indirect basic auth allows to log in on callback, while direct basic auth requires credentials in each request.

    # enable indirect and/or direct basic auth
    auth.local.basic-auth = indirect, direct

    auth.local.basic.auth.enabled, which was for direct basic auth only, is removed.

  • Upgrade to Hibernate 5.6.8.Final

    Details

    Most notably, positional parameters for native queries are now one-based.

  • Upgrade to intl-tel-input 17.0.16

  • Upgrade to Gradle 7.4.2

  • Fire PreRequest and PostRequest events outside of transactions

    Details

    PreRequest/PostRequest events are now fired outside of transactions. This fixes accessing the created/update records in a multithreaded process from PostRequest observers. However you can no longer rollback the request process in a PostRequest observer.

  • Upgrade to Apache Tomcat® 9.x

  • Upgrade to pac4j 5.4.3

  • Reimplement code generator in Java

    Details

    Dropped old code generator written in Groovy in favor of a new code generator written in Java.

  • Upgrade JUnit4 from 4.12 to 4.13.2

  • Upgrade from Groovy 2.4.10 to 3.0.10

    Details
  • Merge com.axelor.app and com.axelor.app-module gradle plugins

    Details

    Now there is only a single com.axelor.app plugin. All modules should use the app plugin only.

    Now all axelor modules are axelor apps.

  • Upgrade to Hibernate Validator 6.2.3.Final

  • Default gantt view mode is now month instead of week

    Details

    This can be changed on <gantt> view definition using the mode attribute.

  • Upgrade to Shiro 1.9.0

  • Replace nashorn script helper with GraalJS engine

    Details

    The nashorn script engine is deprecated in JDK-11 and has some incompatible changes than JDK-8.

    The new implementation uses GraalJS which supports latest ECMAScript features.

    The collection helpers listOf, setOf and mapOf are removed as corresponding native JavaScript objects are passed with appropriate Java equivalent wrapper to the Java calls.

  • Rename method getCodeOrEmail to getUserIdentifier in AuthPac4jProfileService

    Details

    Use a more generic method name, because users may override and use custom behavior.

  • Rework authentication implementation to use reflection and providers

    Details

    Reflection is now used to configure authentication clients. The new syntax is auth.provider.<providerName>.<configurationName>. You may use any of the built-in providers: google, facebook, github, azure, keycloak, apple, oauth, oidc, saml, cas. Or you can configure any other clients supported by pac4j using your own custom provider name. You may even create and use your own custom authentication clients.

  • Upgrade to Quartz 2.3.2

Features

  • Allow to customize notify/info/alert/error message modal/notification

    Details

    This allow to add more customization on modal/notification :

    • notify : allow to change the title of the notification

    • info : allow to change the title of the popup and the title of the confirm button

    • alert : allow to change the title of the popup and the title of the confirm and cancel button

    • error : allow to change the title of the popup and the title of the confirm button

    Example usage:

    <action-validate name="my-action">
      <notify message="A notification" title="My notif"/>
      <info message="This is an info" title="My info" confirm-btn-title="Got it"/>
      <alert message="This is an alert" title="My alert" confirm-btn-title="Got it" cancel-btn-title="Abort"/>
      <error message="This is an error" title="My error" confirm-btn-title="I understand" cancel-btn-title="Do something else"/>
    </action-validate>

    or with ActionResponse:

    response.setNotify("A notification", "My notif");
    response.setInfo("This is an info", "My info", "Got it");
    response.setAlert("This is an alert", "My alert", "Got it");
    response.setError("This is an error", "My error", "I understand", "Do something else");
  • Parallelize generation of computed views

  • Use Gradle Node Plugin to run npm tasks

    Details

    No more need to install Node.js locally to build web resource bundles, aka npm-build task.

    If your project already depends on gradle-node-plugin, there will be conflicts between both. As the provided plugin is only applied on root project, the best fit is to delegate the process to a subproject. That way, the subproject can process and build your needs, and the root project can depends on that subproject and gets produced build.

    To use it, you need to Declare Node.js repository in settings.gradle, section dependencyResolutionManagement :

    // Declare the Node.js download repository
    ivy {
      name = "Node.js"
      setUrl("https://nodejs.org/dist/")
      patternLayout {
        artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]")
      }
      metadataSources {
        artifact()
      }
      content {
        includeModule("org.nodejs", "node")
      }
    }
  • Implement WebSocket support

  • Add support to encrypt secrets in properties

    Details

    Secrets defined in axelor-config.properties can be encrypted. Value should be wrapped in ENC() to indicate that the value is encrypted : db.default.password = ENC(<some_thing>)

    To use encrypted secrets, config.encryptor.password properties should be added : this is the secret key used to encrypt/decrypt data.

    Others optional properties can be added to use custom encryption : config.encryptor.algorithm, config.encryptor.key-obtention-iterations, config.encryptor.provider-name, config.encryptor.provider-class-name, config.encryptor.salt-generator-classname, config.encryptor.iv-generator-classname, and config.encryptor.string-output-type. The default algorithm is PBEWITHHMACSHA512ANDAES_256.

    For convenience, a Gradle task encryptText have been added to generate the encrypted value of a string : ./gradlew :encryptText --text="A secret to encode" --password="MySecureKey" This will generate for you, the necessary properties and the encrypted value to used inside ENC().

  • Add application setting auth.order to set authentication provider order

    Details

    Because of multisource application settings, settings order is undefined. Use auth.order if you require authentication providers to be displayed in a specific order on login page.

  • Add JpaRepository#findByIds(List<Long>) method to find multiple entities by their primary key

  • Add support to MySQL 8

  • Allow closing preference view manually with canClose or close action

  • Add validation support for csv import

    Details

    Two new attributes added to validate data being imported.

    • check - boolean expression

    • check-message - the validation message

    If check fails, the check-message or default validation message is shown and import will be terminated.

  • Add Gantt view attribute mode

    Details

    Gantt view attribute mode allows to define the default view mode. It can be set to year, month, week, or day.

  • Add some predefinied css classes for dialogs and notify components

  • Sanitize HTML where it is needed with DOMPurify

    Details

    Instead of sanitizing all jQuery.html calls, use DOMPurify to sanitize HTML where it is needed only. This should reduce scripting load in the web client.

  • Perform accent-insensitive navigation search

  • Refactoring menu and tags processing

    Details

    This is a refactoring on how menus and tags are processing. The original way was complex and mixing tags and menus rules in a single method. There is no changes on how it works.

    Now, menus and tags processing are separate. Moreover, instead of parsing each menu one by one (but also recursively checking parent access), it builds a tree. The tree is a representation of the menus' hierarchy, where each menu have a parent and some child’s. Then the tree is traversed, checking each node access. When a node is allowed, it continues traversing each child’s. When a node is not allowed, it skips the node and all the child’s.

  • Support YAML configuration format, env variables and system properties

    Details

    Now support YAML format for internal configuration file : axelor-config.properties can be in YAML format (yml or yaml ext). It should only have a one internal configuration file (in properties or YAML format).

    External configuration file can be provided by using system properties (axelor.config=<path_to_file>) or using env variables (AXELOR_CONFIG=<path_to_file>). Same as the internal configuration file, it also supports YAML format.

    The internal configuration file is now optional. Final properties are built using internal configuration file + external configuration file + env variable + system properties. If variables are redefined, they will take preferences over the previous values.

    Configuration values can also be provided with system properties using axelor.config.<key>=value format. For example db.default.user becomes axelor.config.db.default.user.

    Configuration values can also be provided with environment variables using AXELOR_CONFIG_<key>=value format, where <key> is underscored uppercase equivalent of the configuration key. For example db.default.user becomes AXELOR_CONFIG_DB_DEFAULT_USER.

  • Add QuickMenu to allow running actions from default page

    Details

    Example usage:

    public class MyQuickMenu implements QuickMenuCreator {
    
      @Override
      public QuickMenu create() {
        final QuickMenu menu = new QuickMenu();
        menu.setTitle("My menu");
        menu.setOrder(0);
        menu.setShowingSelected(false);
        menu.setItems(
            List.of(
                new QuickMenu.Item("All projects", "project.all"),
                new QuickMenu.Item("All tasks", "project.task.all")));
        return menu;
      }
    }

    and register the QuickMenu in module configuration :

    public class MyModule extends AxelorModule {
    
      @Override
      protected void configure() {
        addQuickMenu(MyQuickMenu.class);
      }
    }
  • Improve index generation

    Details

    We can now specify order on column names with ASC or DESC. Some examples:

    <index columns="code,name"/>
    <index columns="code ASC,name DESC"/>
    <index columns="code,name DESC"/>

    We can also specify whether the index is unique.

    <index columns="code,name" unique="true"/>

    This will replace and makes <unique-constraint ... /> obsolete in future.

  • Allow to enable/disable cache from axelor-config.properties

    Details

    jakarta.persistence.sharedCache.mode property in axelor-config.properties can be used to overwrite the shared-cache-mode from persistence.xml. It allow to enable/disable the shared cache mode (ie second-level cache).

  • Add support to manage multiple matching notify in action-validate

Fixed

  • Fix undefined when calling search engine with route params

  • Fix secure cookie on login attempt or change tenant request

  • Prevent concurrent meta restoring

  • Fix usage of multiple matching info in action-validate

    Details

    In action-validate, if there is multiple info matching, only the first will be displayed on UI.

  • Fix radio style for grid selector

  • Fix MySQL exception reporting

  • Use whole value comparisons in datetime searches instead of using between operator

    Details

    PostgreSQL JDBC driver 42.2.3+ introduce a change on how Timestamp are rounded : https://github.com/pgjdbc/pgjdbc/issues/1211

    For example, 2018-06-03T23:59:59.999999999 is rounded to 2018-06-04 00:00:00 Previously 2018-06-03T23:59:59.999999999 was rounded to 2022-03-08 23:59:59.999

    If nanoseconds is greater than 999999500 , value is now rounded. This is how PostgreSQL works :

    $ insert into some_table(date) VALUES('2018-06-03 23:59:59.999999999');
             date
    ----------------------------
    2018-06-04 00:00:00

    The between operator used when searching on date/dateTime in UI have been updated to use >= and < operators instead.

  • Fix JAXP usage

    Details

    Thread safe usage of JAXP API. Use XMLUtils to protect XML Parsers from XXE attacks but also disable external entity processing.

Removed

  • Remove deprecated usage of hashKey and hashAll attributes

    Details

    Use equalsInclude and equalsIncludeAll instead.

  • Remove deprecated Query#fetchSteam methods

    Details

    Use Query#fetchStream instead.

  • Remove domain model lang attribute

    Details

    Domain models are generated in Java only.

  • Remove dependency to OpenCSV

  • Remove deprecated ActionHandler(ActionRequest) method

    Details

    Use ActionExecutor#newActionHandler(ActionRequest) instead

  • Remove deprecated Context#getParentContext method

    Details

    Use Context#getParent instead.

  • Remove deprecated cachable domain attribute

    Details

    Use cacheable attribute instead.

  • Remove ModuleChanged event

    Details

    Since dropping support of removable modules, this event is no more used.

  • Remove deprecated LoginRedirectException

    Details

    Use WebUtils.issueRedirect instead.

  • Remove IDE app launcher support

  • Remove setFlash in ActionResponse to be aligned with action-validate#info

    Details

    Use setInfo instead.

  • Remove legacy form widgets <notebook>, <break>, <group>, <portlet>, and <include>

    Details

    Form widgets <notebook>, <break>, <group>, <portlet>, and <include> are deprecated. cols and colWidths form attributes used for legacy form layout are also deprecated. Those have be removed. Use panel layout instead.

  • Drop removable module support

    Details

    The feature is not used by any axelor apps and has many technical issues.

    Run following SQL script to drop unnecessary columns

    alter table meta_module drop column installed;
    alter table meta_module drop column removable;
    alter table meta_module drop column pending;