Release Notes for XWiki 9.8-rc-1

Last modified by Gabriela Anechitoaei on 2017/09/26

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

This release introduces a new feature for the Notifications: the Watched Entities. It is disabled by default but you should try it to experiment it because it will replace the Watchlist Application soon.

For the users, we now have more usable notification filter settings and a nice helper when you edit a "Database List" field.

For developers, it is easier to propose an extension containing REST resources, or to customize the Flamingo LESS code. We have also exposes more database columns in the Query Module for users who don't have the programming rights. The notification filters AST (Abstract Syntax Tree) proposes new types of nodes to create complex filter queries. There are also new facilities to avoid using SyntaxFactory, to make Extension Manager faster, or to identify skins elements with proper IDs.

As usual, this release brings bug fixes (15 in this one!).

New and Noteworthy (since XWiki 9.7)

Full list of issues fixed and Dashboard for 9.8.

For Users

Watchlist to be replaced by Notifications


At the end of the 9.x cycle, we plan to remove the Watchlist Application from XWiki Standard. Before being able to do this, we need that the Notifications Application be able to propose the same features (and even more possibilities).

In this version, you can now receive notifications concerning a watched location (ie: a page, a page and its children, a wiki..), without enabling any specific type of events in the preferences.

This feature is disabled by default (and the Watchlist Application is active by default). See Notifications Application to know how to enable it.

Notifications Filters Settings revamped


We have changed the way we display Notification Filters in the Notification Settings page. All filters are listed in a single table so that it is easier to manage (adding, disabling, removing from the same place).

Improved Suggest Input for Database List Properties


The edit mode display for Database List properties that have "input" display type and "Use suggest" enabled in their definition has been improved by integrating selectize.js. The new widget handles both single selection and multiple selection properties. See the XWiki Data Model for more information on class properties.

For Admins

No changes!

Miscellaneous

  • Flavors search optimization: Speed up display of flavors mostly containing core dependencies (when resolving flavors dependencies, just assume those with know recommended versions are valid).

For Developers

Runtime injection of REST resources

 

  • It's now possible to install/uninstall/upgrade REST resources dynamically (it used to require a restart of XWiki)
  • Upgrading/uninstalling a JAR extension doesn't break REST resources coming from extensions anymore

Easier Flamingo Skin customizations


We now provide a default less/custom.less file that can be overwritten for your custom Flamingo Skin. You don't longer need to manually overwrite less/style.less.vm in order to add your custom code. This will make the upgrade to a newer version of the skin much smoother.

Extension Manager improvements

 

  • new API in ExtensionManagerConfiguration to get a recommended version for a passed Extension id
  • various optimizations
    • speed resolve when the range contains only one version (don't ask all versions anymore)
    • better merge of version constraint ranges to only keep most specific ranges

New HQL safe select columns


Some new allowed query select columns have been added:

  • XWikiDeletedDocument
    • id
    • fullname
    • language
  • DeletedAttachment
    • id
    • filename

Enhanced notification filters AST (Abstract Syntax Tree)


In XWiki 9.7RC1, we have introduced an Abstract Syntax Tree (AST) to generate the query that fetch the events we want to display as notifications.

This AST has been created for 2 reasons:

  • in the future, the events might be stored in a different way, and the current HQL query might be not effective on a different storage (such as NoSQL). This AST abstracts the language so the query could still be effective, as soon as we have a translator for the target language.
  • it's easier for developers to write a NotificationFilter by generating an AST than generating a good HQL query that must escape its values and co-exists with other filters...

In this release, we have rewritten the whole internal query, and we had to introduce new types of ExpressionNode to handle all use-cases. This new nodes are:

  • BooleanValueNode to handle a boolean value
  • DateValueNode to handle a date
  • EntityReferenceNode to handle an EntityReference without manual serialization
  • GreaterThanNode to handle >= comparison
  • InNode to check if a property or a value is contained in a list
  • LesserThanNode to handle <= comparison
  • StartsWith to check if a value or a property starts with some other value

Since theses nodes have been created for our own implementation needs, please open a JIRA issue if you wish to have more.

Miscellaneous

  • New Syntax#valueOf(String) API: SyntaxFactory is now deprecated and replaced by the static Syntax#valueOf(String).

  • REST Resource to Retrieve Property Values: A new REST resource is available to retrieve the list of values of an XWiki class property. It currently works only with Database List (DBList) properties but we plan to add support for List of Users properties soon. The main use case for this new resource is to provide suggestions when editing object properties. See the REST API documentation for more details.

  • Add some missing CSS class iD : for "children", "comments", "attachments", "history" and "information" menu entries of flamingo flavor like the others menu entries.

Upgrades

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

Translations

The following translations have been updated: 

  • Croatian
  • German
  • Polish

Tested Browsers & Databases

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

BrowserTest Result
Chrome30.pngGoogle Chrome 61Not Tested
Firefox30.pngMozilla Firefox 55Not Tested
IE30.pngInternet Explorer 10Not Tested
IE30.pngInternet Explorer 11Jira Tickets Marked as Fixed in the Release Notes + New and Noteworthy Features

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

DatabaseTest Result
hypersql.pngHyperSQLNot Tested
mysql.pngMySQL 5.7Jira Tickets Marked as Fixed in the Release Notes + New and Noteworthy Features
oracle.pngOracle 11.2Not Tested
postgresql.pngPostgreSQLNot Tested
Test Closed XCOMMONS-1265 Failed because of Closed XCOMMONS-1263.

Known issues

Backward Compatibility and Migration Notes

General Notes

When upgrading make sure you compare your xwiki.cfg, xwiki.properties and web.xml files with the newest version since some configuration parameters may have been modified or added. Note that you should add xwiki.store.migration=1 so that XWiki will attempt to automatically migrate your current database to the new schema. Make sure you backup your Database before doing anything.

Database List Property Values

We fixed a few security issues around Database List properties by:

  • restricting the type of explicit query you can use on the Database List definition based on the class author rights
  • evaluating the Velocity code from the explicit query only if the class author has script right
  • checking if the current user has the right to view the returned values (when implicit query is used)

This may break existing applications if they use Database List properties and the last author of the class that holds the property definition doesn't have sufficient rights.

API Breakages

The following APIs were modified since XWiki 9.7:

  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method org.xwiki.notifications.filters.expression.generics.AbstractNode org.xwiki.notifications.filters.NotificationFilter::filterExpression(org.xwiki.model.reference.DocumentReference)
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method void org.xwiki.notifications.filters.NotificationFilterManager::deleteFilterPreference(java.lang.String) throws org.xwiki.notifications.NotificationException
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method org.xwiki.rendering.block.Block org.xwiki.notifications.filters.NotificationFilterManager::displayFilter(org.xwiki.notifications.filters.NotificationFilter, org.xwiki.notifications.filters.NotificationFilterPreference) throws org.xwiki.notifications.NotificationException
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method java.util.Set<org.xwiki.notifications.filters.NotificationFilterPreference> org.xwiki.notifications.filters.NotificationFilterManager::getFilterPreferences(org.xwiki.model.reference.DocumentReference) throws org.xwiki.notifications.NotificationException
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method java.util.Set<org.xwiki.notifications.filters.NotificationFilterPreference> org.xwiki.notifications.filters.NotificationFilterManager::getFilterPreferences(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.filters.NotificationFilter) throws org.xwiki.notifications.NotificationException
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method java.util.Set<org.xwiki.notifications.filters.NotificationFilterPreference> org.xwiki.notifications.filters.NotificationFilterManager::getFilterPreferences(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.filters.NotificationFilter, org.xwiki.notifications.filters.NotificationFilterType) throws org.xwiki.notifications.NotificationException
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method java.util.Set<org.xwiki.notifications.filters.NotificationFilterPreference> org.xwiki.notifications.filters.NotificationFilterManager::getFilterPreferences(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.filters.NotificationFilter, org.xwiki.notifications.filters.NotificationFilterType, org.xwiki.notifications.NotificationFormat) throws org.xwiki.notifications.NotificationException
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method void org.xwiki.notifications.filters.NotificationFilterManager::saveFilterPreferences(java.util.Set<org.xwiki.notifications.filters.NotificationFilterPreference>)
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method void org.xwiki.notifications.filters.NotificationFilterManager::setFilterPreferenceEnabled(java.lang.String, boolean) throws org.xwiki.notifications.NotificationException
  • Young API
    • Violation type: java.method.parameterTypeChanged
    • Old: parameter void org.xwiki.notifications.filters.expression.AndNode::<init>(===org.xwiki.notifications.filters.expression.generics.AbstractNode===, org.xwiki.notifications.filters.expression.generics.AbstractNode)
    • New: parameter void org.xwiki.notifications.filters.expression.AndNode::<init>(===org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode===, org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode)
  • Young API
    • Violation type: java.method.parameterTypeChanged
    • Old: parameter void org.xwiki.notifications.filters.expression.AndNode::<init>(org.xwiki.notifications.filters.expression.generics.AbstractNode, ===org.xwiki.notifications.filters.expression.generics.AbstractNode===)
    • New: parameter void org.xwiki.notifications.filters.expression.AndNode::<init>(org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode, ===org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode===)
  • Young API
    • Violation type: java.method.parameterTypeChanged
    • Old: parameter void org.xwiki.notifications.filters.expression.NotNode::<init>(===org.xwiki.notifications.filters.expression.generics.AbstractNode===)
    • New: parameter void org.xwiki.notifications.filters.expression.NotNode::<init>(===org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode===)
  • Young API
    • Violation type: java.method.parameterTypeChanged
    • Old: parameter void org.xwiki.notifications.filters.expression.OrNode::<init>(===org.xwiki.notifications.filters.expression.generics.AbstractNode===, org.xwiki.notifications.filters.expression.generics.AbstractNode)
    • New: parameter void org.xwiki.notifications.filters.expression.OrNode::<init>(===org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode===, org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode)
  • Young API
    • Violation type: java.method.parameterTypeChanged
    • Old: parameter void org.xwiki.notifications.filters.expression.OrNode::<init>(org.xwiki.notifications.filters.expression.generics.AbstractNode, ===org.xwiki.notifications.filters.expression.generics.AbstractNode===)
    • New: parameter void org.xwiki.notifications.filters.expression.OrNode::<init>(org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode, ===org.xwiki.notifications.filters.expression.generics.AbstractOperatorNode===)
  • Young API
    • Violation type: java.class.nonFinalClassInheritsFromNewClass
    • Old: class org.xwiki.notifications.filters.expression.generics.AbstractBinaryOperatorNode
    • New: class org.xwiki.notifications.filters.expression.generics.AbstractBinaryOperatorNode
  • Young API
    • Violation type: java.class.nonFinalClassInheritsFromNewClass
    • Old: class org.xwiki.notifications.filters.expression.generics.AbstractUnaryOperatorNode
    • New: class org.xwiki.notifications.filters.expression.generics.AbstractUnaryOperatorNode
  • Young API
    • Violation type: java.method.parameterTypeChanged
    • Old: parameter void org.xwiki.notifications.filters.expression.PropertyValueNode::<init>(===org.xwiki.notifications.filters.NotificationFilterProperty===)
    • New: parameter void org.xwiki.notifications.filters.expression.PropertyValueNode::<init>(===org.xwiki.notifications.filters.expression.EventProperty===)
  • Young API
    • Violation type: java.class.superTypeTypeParametersChanged
    • Old: class org.xwiki.notifications.filters.expression.PropertyValueNode
    • New: class org.xwiki.notifications.filters.expression.PropertyValueNode
  • Young API
    • Violation type: java.method.returnTypeChanged
    • Old: method org.xwiki.notifications.filters.expression.generics.AbstractNode org.xwiki.notifications.filters.NotificationFilter::filterExpression(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.preferences.NotificationPreference)
    • New: method org.xwiki.notifications.filters.expression.ExpressionNode org.xwiki.notifications.filters.NotificationFilter::filterExpression(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.preferences.NotificationPreference)
  • Young API
    • Violation type: java.method.addedToInterface
    • Old: null
    • New: method org.xwiki.notifications.filters.expression.ExpressionNode org.xwiki.notifications.filters.NotificationFilter::filterExpression(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.filters.NotificationFilterType)
  • Young API
    • Violation type: java.class.removed
    • Old: class org.xwiki.notifications.filters.expression.LikeNode
  • Added the PropertyValues element to the REST model to be used by the ClassPropertyValues resource.
    • Violation type: java.annotation.attributeValueChanged
    • Old: class org.xwiki.rest.model.jaxb.LinkCollection
    • New: class org.xwiki.rest.model.jaxb.LinkCollection

Credits

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

  • Anca Luca
  • ClĂ©ment Aubin
  • Ecaterina Moraru (Valica)
  • Guillaume Delhumeau
  • Marius Dumitru Florea
  • Pascal B
  • Sergiu Dumitriu
  • Thomas Mortagne
  • Vincent Massol
Tags:
Created by Ecaterina Moraru (Valica) on 2017/08/31
   

Get Connected