Release Notes for XWiki Enterprise 4.0 Release Candidate 1

Last modified by Thomas Mortagne on 2023/10/13

This is the first and hopefully last release candidate for XWiki Enterprise 4.0 version (Roadmap). This is mostly a polishing release before the final one.

New and Noteworthy (since XWiki Enterprise 4.0 Milestone 2 version)

Extension Manager improvements

The install/uninstall plan and log are now displayed in a tab inside the details section of an extension. We plan to make the new Progress tab display the install/uninstall status in real time in the near future.

EM-progressTab.png

For developers

New technical content hiding system

In this release we have only implemented the content hiding mechanism. At the moment, using it will not have any effect on the default UI you see (no documents will be filtered). We will gradually update all places listing documents in the UI to use the new mechanism in XWiki Enterprise 4.1. That said, if you're a developer we encourage you to test out the new content filtering API.

The basic support for hidden documents introduced in XWiki Enterprise 1.7 has been reimplemented differently (the previous implementation was not allowing anyone, including Admins, to see hidden documents!). The new logic is currently as follows (it'll be discussed and probably modified in XWiki Enterprise 4.1):

  • Simple users never see hidden documents
  • For advanced users, it is now possible to specify that a document should be hidden when editing the document (only wiki or wysiwyg edit modes):

    hidden.png

    And now there's a new setting in the user profiles, letting users chose if they want hidden documents to appear in search results or not:

    hiddenSettings.png

    As already mentioned above in warning, setting the Hidden configuration value will currently not have any effect on the default XWiki Enterprise pages since they're not calling the new filtering API yet (you'll need to wait for 4.1 for taht!). However it's supposed to work like this:

    • If the user doesn't set explicitly the Hidden setting value in his profile, he won't see hidden documents by default. Thus seeing hidden documents is an explicit choice.

To test this feature do the following:

  • Log as Admin on your wiki (or any user having edit rights)
  • Create a Page, say in Sandbox.HiddenFeatureTest and put the following content in wiki edition mode:
    {{velocity}}
    #set ($items = $services.query.xwql("where doc.name like 'S%'").setFilter("hidden").execute())
    There are $items.size() documents starting with 'S'

    #foreach ($item in $items)
    * [[$item]]
    #end
    {{/velocity}}
  • It'll print the number of matching documents (31 in a XWiki Enterprise 4.0 RC 1 with the default XAR) and the list of matching documents
  • Then go to Main.Search (for example), edit the page and check the Hidden checkbox and save
  • Go back to the Sandbox.HiddenFeatureTest  page and verify there's one less document printed now (it should say 30 in a XWiki Enterprise 4.0 RC 1 with the default XAR)
  • Then go to your user profile and select "Display Hidden Documents" to "Yes"
  • Go back to the Sandbox.HiddenFeatureTest  page and verify it's listing all documents again (it should say 31 in a XWiki Enterprise 4.0 RC 1 with the default XAR)

Changes in the ComponentManager API

The new lookupComponent method (which we had introduced in 4.0M1 with the introduction of Generics support) has been renamed to getInstance. New getInstanceList and getInstanceMap has also been introduced to replace lookupList and lookupMap.

Miscellaneous

Bug fixes and improvements

See the full list of JIRA issues fixed in this release.

Tested Browsers

Here's the list of browsers tested with this version (i.e. browsers that we've tested as working - Check the list of supported browsers):

Firefox
10.0.1
Firefox
3.6
Chrome
18
Internet Explorer
8
Internet Explorer
9

Tested Databases

HyperSQL
2.2.8
MySQL
5.x
Oracle
11.x
PostgreSQL
9.x

Known issues

Test Report

You can check the manual test report to learn about what was tested and the results on various browsers.

Backward Compatibility and Migration Notes

As usual, before upgrading to this version, be sure to have a working backup of your database(s).

General Notes

If you're running in a multiwiki setup you'll also need to define the property xwiki.store.migration.databases in your xwiki.cfg file if you want to explicitly name some databases to be migrated as the default is now to migrate all databases. Database that are not migrated could not be accessed.

You may also want to import the default wiki XAR in order to benefit from all the improvements listed above.

Always make sure you compare your xwiki.cfg and xwiki.properties files with the newest version since some configuration parameters were 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.

API Breakages

The following APIs were modified since version 3.5:

org.xwiki.bridge.AttachmentName: Class org.xwiki.bridge.AttachmentName removed
org.xwiki.bridge.DocumentAccessBridge: Method 'public java.io.InputStream getAttachmentContent(org.xwiki.bridge.AttachmentName)' has been removed
org.xwiki.bridge.DocumentAccessBridge: Method 'public java.lang.String getAttachmentURL(org.xwiki.bridge.AttachmentName, boolean)' has been removed
org.xwiki.bridge.DocumentAccessBridge: Method 'public java.util.List getAttachmentURLs(org.xwiki.bridge.DocumentName, boolean)' has been removed
org.xwiki.bridge.DocumentAccessBridge: Method 'public java.util.List getAttachments(org.xwiki.bridge.DocumentName)' has been removed
org.xwiki.bridge.DocumentAccessBridge: Method 'public org.xwiki.bridge.DocumentName getCurrentDocumentName()' has been removed
org.xwiki.bridge.DocumentAccessBridge: Method 'public org.xwiki.model.reference.DocumentReference getCurrentUserReference()' has been added to an interface
org.xwiki.bridge.DocumentAccessBridge: Method 'public org.xwiki.bridge.DocumentModelBridge getDocument(org.xwiki.bridge.DocumentName)' has been removed
org.xwiki.bridge.DocumentAccessBridge: Method 'public org.xwiki.bridge.DocumentName getDocumentName(java.lang.String)' has been removed
org.xwiki.bridge.DocumentModelBridge: Method 'public org.xwiki.bridge.DocumentName getDocumentName()' has been removed
org.xwiki.bridge.DocumentName: Class org.xwiki.bridge.DocumentName removed
org.xwiki.gwt.user.client.ui.ListBox: Removed com.google.gwt.event.dom.client.KeyDownHandler from the set of implemented interfaces
org.xwiki.gwt.user.client.ui.ListBox: Removed com.google.gwt.event.dom.client.KeyPressHandler from the set of implemented interfaces
org.xwiki.gwt.user.client.ui.ListBox: Removed com.google.gwt.event.dom.client.KeyUpHandler from the set of implemented interfaces
org.xwiki.gwt.user.client.ui.ListBox: Method 'public void onKeyDown(com.google.gwt.event.dom.client.KeyDownEvent)' has been removed
org.xwiki.gwt.user.client.ui.ListBox: Method 'public void onKeyPress(com.google.gwt.event.dom.client.KeyPressEvent)' has been removed
org.xwiki.gwt.user.client.ui.ListBox: Method 'public void onKeyUp(com.google.gwt.event.dom.client.KeyUpEvent)' has been removed
org.xwiki.query.Query: Method 'public org.xwiki.query.QueryFilter getFilter()' has been added to an interface
org.xwiki.query.Query: Method 'public org.xwiki.query.Query setFilter(org.xwiki.query.QueryFilter)' has been added to an interface
org.xwiki.gwt.wysiwyg.client.plugin.line.IELinePlugin: Removed com.google.gwt.event.dom.client.KeyDownHandler from the set of implemented interfaces
org.xwiki.gwt.wysiwyg.client.plugin.line.IELinePlugin: Removed com.google.gwt.event.dom.client.KeyPressHandler from the set of implemented interfaces
org.xwiki.gwt.wysiwyg.client.plugin.line.IELinePlugin: Removed com.google.gwt.event.dom.client.KeyUpHandler from the set of implemented interfaces
org.xwiki.gwt.wysiwyg.client.plugin.line.IELinePlugin: Removed com.google.gwt.event.shared.EventHandler from the set of implemented interfaces
org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Removed com.google.gwt.event.dom.client.KeyDownHandler from the set of implemented interfaces
org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Removed com.google.gwt.event.dom.client.KeyPressHandler from the set of implemented interfaces
org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Removed com.google.gwt.event.dom.client.KeyUpHandler from the set of implemented interfaces
org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Removed com.google.gwt.event.shared.EventHandler from the set of implemented interfaces
org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Method 'public void onKeyDown(com.google.gwt.event.dom.client.KeyDownEvent)' has been removed
org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Method 'public void onKeyPress(com.google.gwt.event.dom.client.KeyPressEvent)' has been removed
org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Method 'public void onKeyUp(com.google.gwt.event.dom.client.KeyUpEvent)' has been removed
org.xwiki.gwt.wysiwyg.client.plugin.list.ListBehaviorAdjuster: In method 'public ListBehaviorAdjuster()' the number of arguments has changed
org.xwiki.gwt.wysiwyg.client.plugin.list.ListBehaviorAdjuster: Method 'protected void dispatchKey(com.google.gwt.user.client.ui.Widget, int, org.xwiki.gwt.dom.client.Event)' has been removed
org.xwiki.gwt.wysiwyg.client.plugin.list.ListBehaviorAdjuster: Method 'public org.xwiki.gwt.user.client.ui.rta.RichTextArea getTextArea()' has been removed
org.xwiki.gwt.wysiwyg.client.plugin.list.ListBehaviorAdjuster: Method 'public void setTextArea(org.xwiki.gwt.user.client.ui.rta.RichTextArea)' has been removed
org.xwiki.gwt.wysiwyg.client.plugin.macro.exec.InsertExecutable: In method 'public InsertExecutable(org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroSelector)' the number of arguments has changed
org.xwiki.wysiwyg.server.WysiwygEditorConfiguration: Method 'public java.lang.Integer getHistorySize()' has been added to an interface

Get Connected