Release Notes for XWiki 13.7-rc-1

Last modified by Ilie Andriuta on 2021/09/02

This is the release notes for XWiki Commons, XWiki Rendering and XWiki Platform. They share the same release notes as they are released together and have the same version.

The main focus of this version was developer tools such as introducing support for exposing WebSocket endpoints as XWiki components, making easier to handle skin extensions in asynchronous HTML content, a more accurate strategy to select between several similar Java methods in Velocity scripts and support for ConfigurableClass in all administration pages. It also comes with various bug fixes and improvements.

New and Noteworthy (since XWiki 13.6)

Full list of issues fixed and Dashboard for XWiki 13.7.

For Users

No changes!

For Admins

  • Smaller serialized job status: Job status are now zipped (new jobs will end up with a file named status.xml.zip instead of status.xml). The content of the actual XML used to serialize the progress was also optimized a little (removed various metadata which did not really needed to be serialized) when possible. This should help reduce quite a lot the disk space used by some jobs statuses.

For Developers

WebSocket Integration

 
Starting with this version you can write WebSocket end-points as XWiki Components using the standard Java API for WebSocket (JSR 356). For deploying the end-points we rely on the servlet container, which means the servlet container needs to support WebSockets (i.e. it needs to provide an implementation of the JSR 356 specs). At the moment, this includes all the servlet containers we support. See the documentation for more information.

Automatic injection of required skin extensions

 
Lazy loading UI elements has become much easier with the automatic injection (on the client side) of the required skin extensions.

Method selection improvement in Velocity

 
When standard Velocity cannot match a method call, XWiki try to find a close approximation that could be called provided the arguments are converted. The only criteria to select a suitable method used to be to count the number of arguments, but the order in which methods with the same number of arguments were tried was pretty much random. This leaded sometime to either hard to call methods or random results. This has been greatly improved to have more advanced ordering (taking into account already compatible arguments, etc.), see Velocity Module for more details.

Allow to display ConfigurableClass in all administration pages

 
The ConfigurableClass has been refactored to use a new scope property for defining where it should be configured. This property can take 4 different values:

  • WIKI (displayed Wiki): the configuration will be displayed in the wiki administration (equivalent to true value in configureGlobally for older versions)
  • SPACE (displayed "Current space"): the configuration will be displayed in administration of pages that belongs to the current space (equivalent to false value in configureGlobally for older versions)
  • ALL_SPACES (displayed "All spaces"): the configuration will be displayed on administration of pages for any space, but not on the wiki administration. 
  • WIKI+ALL_SPACES (displayed "Wiki and all spaces"): the configuration will be displayed in all administration pages, be it the wiki administration or any page administration. 

Note that the old configureGlobally property is still supported in the code handling the ConfigurableClass so no migration is needed for this change.

Miscellaneous

  • Allow to store Like average xobjects: Like implementation is based on Ratings, and until this version the configuration of Ratings we were using was hardcoded.

    We provide in this version 2 new properties that allow to store the average ratings xobjects related to the Like information: those xobjects can notably be used to perform HQL queries with the total number of likes in pages, since this data is stored in them.

    We only provide those properties as an experimental feature: it might be removed later, by providing a cleaner API for this usecase.

    The properties are the following:

    ## Specify if the average rating should be stored or not for likes. Default value is false.
    like.averagerating.isStored=true

    ## Specify where the average ratings should be stored. Default value is xobject. Possible values are currently solr or xobject.
    like.averagerating.hint=xobject
  • History delete event: It's now possible to be notified when a range of document history versions is about to be deleted using the event org.xwiki.bridge.event.DocumentVersionRangeDeletingEvent. See Model Bridge API for more details.

  • NamespaceURLClassLoader#isClosed(): NamespaceURLClassLoader now exposes an API to know if it has been closed.

  • Allow to recompute average ratings from script service: A new API methods has been added in Ratings script service to allow computing back the average ratings when needed.

    The signature of the method is the following:

        /**
         * Recompute the average rating of a reference.
         * Note that this method can be resource consuming if the set of data is large.
         *
         * @param reference the reference for which to recompute the average ratings.
         * @return the average rating in an optional or an empty optional in case of error.
         * @since 13.7RC1
         * @since 13.4.3
         * @since 12.10.9
         */

        @Unstable
        @Programming
       Optional<AverageRating> recomputeAverageRating(EntityReference reference)

Upgrades

The following runtime dependencies have been upgraded (they have a different release cycle than XWiki Commons, XWiki Rendering and XWiki Platform):

Translations

The following translations have been updated: 

Tested Browsers & Databases

Here is the list of browsers we support and how they have been tested for this release:

 BrowserTested on:
Edge30.pngMicrosoft Edge 92Not Tested
Chrome30.pngGoogle Chrome 92Jira Tickets Marked as Fixed in the Release Notes
IE30.pngInternet Explorer 11Tests run and results
Firefox30.pngMozilla Firefox 91
Safari30.pngSafari 14Not Tested

Here is the list of databases we support and how they have been tested for this release:

 DatabaseTested on:
hypersql.pngHyperSQL 2.5.2Not Tested
mariadb.pngMariaDB 10.6Tests run and results
mysql.pngMySQL 8
postgresql.pngPostgreSQL 13Jira Tickets Marked as Fixed in the Release Notes
oracle.pngOracle 19cNot Tested

Here is the list of Servlet Containers we support and how they have been tested for this release:

 Servlet ContainerTested on:
tomcat-icon.pngTomcat 9.0.52
jetty-icon.pngJetty 9.4.29 (XWiki Standalone packaging)
jetty-icon.pngJetty 9.4.29Not Tested

Known issues

Backward Compatibility and Migration Notes

General Notes

  • When upgrading make sure you compare and merge the following XWiki configuration files since some parameters may have been modified, removed or added:
    • xwiki.cfg
    • xwiki.properties
    • web.xml
    • hibernate.cfg.xml
  • Add xwiki.store.migration=1 in xwiki.cfg so that XWiki will attempt to automatically migrate your current database to any new schema. Make sure you backup your Database before doing anything.

API Breakages

The following APIs were modified since XWiki 13.6:

Unknown Criticality

These violationq are missing a criticality and need to be fixed.

  • Unstable API: this API was not properly designed and shouldn't have returned that in first place.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method javax.mail.internet.InternetAddress org.xwiki.security.authentication.script.AuthenticationScriptService::requestResetPassword(org.xwiki.user.UserReference) throws org.xwiki.security.authentication.ResetPasswordException

      ## New:
      method void org.xwiki.security.authentication.script.AuthenticationScriptService::requestResetPassword(org.xwiki.user.UserReference) throws org.xwiki.security.authentication.ResetPasswordException
  • Unstable API: this API was not properly designed and shouldn't have returned that in first place.
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method javax.mail.internet.InternetAddress org.xwiki.security.authentication.ResetPasswordRequestResponse::getUserEmail()

Credits

The following people have contributed code and translations to this release (sorted alphabetically):

  • Eduard Moraru
  • Manuel Leduc
  • Marius Dumitru Florea
  • Simon Urli
  • Teo Caras
  • Thomas Mortagne
  • Vincent Massol
  • slauriere
  • urs19work

Get Connected