Release Notes for XWiki 9.4

Last modified by Gabriela Anechitoaei on 2017/06/09

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 releases is mostly focused on usability improvements. It adds support for batch restore of deleted pages from the recycle bin. The content menu has received some polishing. The live notification system has been improved to group similar notification messages and to show notifications for page comments. The history of an extension page now includes a special revision that corresponds to the extension version so it is easier to "reset to factory defaults". Finally, the Help Center and the Menu application are now part of the default XWiki distribution.

As usual, this version also brings bug corrections.

New and Noteworthy (since XWiki 9.3.1)

Full list of issues fixed and Dashboard for 9.4.

For Users

Restore a batch of deleted documents

 
If you have performed an operation that deletes multiple documents at the same time (like delete with children or delete space), it is now possible to restore all the deleted documents together, to their original state and location.

This is achieved by assigning a common batch ID to the deleted documents in the recycle bin. You can now browse the deleted documents and group them by batch.

For each deleted document, you can now also choose to see the batch where it was deleted from and if you want to restore just one document or the entire batch.

Check the documentation for more details.

Help Center Application bundled by default

 
The Help Center Application has been bundled with the default XE flavor (on the main wiki only) in order to help new users get familiar with XWiki faster. It can be easily accessed from the Applications panel.

Content menu usability improvements

 
We've had various reports that people new to XWiki were struggling to find the content menu (edit, create, etc.) so after some discussions, we've decided to try to make it a bit clearer and user-friendly.
The main changes include:

  • adding labels and backgrounds to each menu button to make it clearer that users could/should interact with them
  • merging the 2 action menus into a single one ("More Actions") to address issues with understanding what is the difference between them and also the "fear of the cog" icon, which was confusing some users.

Grouping of similar Notifications

 
Similar notifications (for example a page has been updated by the same user several time in a row) are now grouped together and the details of all activities is displayed in the "details" section.

Standard version of the document in the history

 
It's now possible to see/compare/revert to the standard version of a document (the one coming from the installed extension) right from the document history view.

Menu Application bundled by default

 
The Menu Application has been bundled with the default XE flavor (on the main wiki only) in order to allow admins to easily setup and display a horizontal menu. It can be easily accessed from the Applications panel by admins (members of the XWiki.AdminGroup) only.

Notifications for comments

 
A notification is now displayed when a comment is posted on a page (if you enable it in your settings).

Miscellaneous

  • Annotation toggle on click: We changed the way the annotation popup is shown: instead of hovering over the annotation icon you now have to click on the annotation icon. This new behavior is more mobile friendly.

For Admins

For Developers

  • Minor Job API improvement: Added a "canceled" flag to AbstractJobStatus to simplify writing cancelable jobs.

  • New Recycle Bin API methods for batch operations: Added new methods that allow setting a batch ID to a deleted document and retrieving deleted documents for a given batch.

  • Delete all mails: There's now a script API to delete all messages having a status in the database and their serialized messages on the file system.

  • Recycle Bin API Improvements: Updated the Recycle Bin and Deleted Documents API to make it easier to work with.

  • XWiki#getDocument(..., String revision) now supports a syntax to get document from other sources (installed XAR extension, deleted document, etc.).

Moved Modules

No modules have been deprecated, retired or moved.

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: 

Tested Browsers & Databases

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

BrowserTest Result
Chrome30.pngGoogle ChromeNot Tested
Firefox30.pngMozilla Firefox 53Jira Tickets Marked as Fixed in the Release Notes
IE30.pngInternet Explorer 10Not Tested
IE30.pngInternet Explorer 11Not Tested

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
oracle.pngOracleNot Tested
postgresql.pngPostgreSQLNot Tested

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.

Issues specific to XWiki 9.4

By default serialized object references don't contain the wiki part of the class reference anymore. It might affect some listeners that were not considering the wiki part of the class as optional in the object reference.

API Breakages

The following APIs were modified since XWiki 9.3.1:

  • NotificationDisplayer must handle a composite event instead of a raw event
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.rendering.block.Block org.xwiki.notifications.NotificationDisplayer::renderNotification(===org.xwiki.eventstream.Event===) throws org.xwiki.notifications.NotificationException

      ## New:
      parameter org.xwiki.rendering.block.Block org.xwiki.notifications.NotificationDisplayer::renderNotification(===org.xwiki.notifications.CompositeEvent===) throws org.xwiki.notifications.NotificationException
  • NotificationManager must return composite events instead of a raw events now
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.eventstream.Event> org.xwiki.notifications.NotificationManager::getEvents(java.lang.String, boolean, int) throws org.xwiki.notifications.NotificationException

      ## New:
      method java.util.List<org.xwiki.notifications.CompositeEvent> org.xwiki.notifications.NotificationManager::getEvents(java.lang.String, boolean, int) throws org.xwiki.notifications.NotificationException
  • NotificationManager must return composite events instead of a raw events now
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.eventstream.Event> org.xwiki.notifications.NotificationManager::getEvents(java.lang.String, boolean, int, java.util.Date, java.util.List<java.lang.String>) throws org.xwiki.notifications.NotificationException

      ## New:
      method java.util.List<org.xwiki.notifications.CompositeEvent> org.xwiki.notifications.NotificationManager::getEvents(java.lang.String, boolean, int, java.util.Date, java.util.List<java.lang.String>) throws org.xwiki.notifications.NotificationException
  • NotificationRenderer must handle a composite event instead of a raw event
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.rendering.block.Block org.xwiki.notifications.NotificationRenderer::render(===org.xwiki.eventstream.Event===) throws org.xwiki.notifications.NotificationException

      ## New:
      parameter org.xwiki.rendering.block.Block org.xwiki.notifications.NotificationRenderer::render(===org.xwiki.notifications.CompositeEvent===) throws org.xwiki.notifications.NotificationException
  • NotificationManager must return composite events instead of a raw events now
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.eventstream.Event> org.xwiki.notifications.script.NotificationScriptService::getEvents(boolean, int) throws org.xwiki.notifications.NotificationException

      ## New:
      method java.util.List<org.xwiki.notifications.CompositeEvent> org.xwiki.notifications.script.NotificationScriptService::getEvents(boolean, int) throws org.xwiki.notifications.NotificationException
  • NotificationManager must return composite events instead of a raw events now
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.eventstream.Event> org.xwiki.notifications.script.NotificationScriptService::getEvents(boolean, int, java.util.Date, java.lang.String[]) throws org.xwiki.notifications.NotificationException

      ## New:
      method java.util.List<org.xwiki.notifications.CompositeEvent> org.xwiki.notifications.script.NotificationScriptService::getEvents(boolean, int, java.util.Date, java.lang.String[]) throws org.xwiki.notifications.NotificationException
  • NotificationManager must return composite events instead of a raw events now
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.List<org.xwiki.eventstream.Event> org.xwiki.notifications.script.NotificationScriptService::getEvents(boolean, int, java.util.Date, java.util.List<java.lang.String>) throws org.xwiki.notifications.NotificationException

      ## New:
      method java.util.List<org.xwiki.notifications.CompositeEvent> org.xwiki.notifications.script.NotificationScriptService::getEvents(boolean, int, java.util.Date, java.util.List<java.lang.String>) throws org.xwiki.notifications.NotificationException
  • NotificationManager must return composite events instead of a raw events now
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter org.xwiki.rendering.block.Block org.xwiki.notifications.script.NotificationScriptService::render(===org.xwiki.eventstream.Event===) throws org.xwiki.notifications.NotificationException

      ## New:
      parameter org.xwiki.rendering.block.Block org.xwiki.notifications.script.NotificationScriptService::render(===org.xwiki.notifications.CompositeEvent===) throws org.xwiki.notifications.NotificationException
  • Align with Java API
    • Violation type:
      java.annotation.added
    • Code:
      ## Old:
      field org.xwiki.rest.model.jaxb.JobRequest.verbose

      ## New:
      field org.xwiki.rest.model.jaxb.JobRequest.verbose
  • Young API
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:
      null

      ## New:
      method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.RecordableEventDescriptorManager::getAllRecordableEventDescriptorsAllWikis() throws org.xwiki.eventstream.EventStreamException

Credits

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

  • ClĂ©ment Aubin
  • Ecaterina Moraru (Valica)
  • Eduard Moraru
  • Guillaume Delhumeau
  • Marius Dumitru Florea
  • Sergiu Dumitriu
  • Thomas Mortagne
  • Vincent Massol

Get Connected