Release Notes for XWiki 7.0 Release Candidate 1

Last modified by Thomas Mortagne on 2023/10/13

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.

The version is mostly about stabilization before 7.0 final. It contains diff UI improvements, Extension Repository improvements, a new component based watchlist module, a new application to edit wiki skins. XWiki also moved to Servlet 3.0.1 which means various old application servers versions are not supported anymore.

This release introduce a new internal group cache in the security module. This group cache is affected by a serious issue. In certain situations, it causes group members not to be recognized as such, leading to incorrect access decisions. If you follow the XWiki best practices for setting rights (which recommends to minimize use of denies), this issue will result mostly in unexpected access denials, which obviously does not seriously compromise the security but cause real annoyance to legitimate users. See for more technical detail about this issue.

New and Noteworthy (since XWiki 7.0 Milestone 2)

Full list of issues fixed and Dashboard for 7.0.

Improved Document Diff View

The document history view that shows the differences between two versions of a document has been improved:

  • The new summary gives you an overview of the changes and provides fast navigation.
  • The changes made to the short text properties (e.g. title, which has only one line of text) are more readable now.
  • You can see the changes that have been made to a text attachment. For non-text attachments you can see the difference in the file size.
  • You can see detailed changes to a class definition (e.g. which meta properties, like 'Custom Display', have been modified).

history-compareDocumentVersions.png

See the Version Control feature documentation for more details.

Extension Diff View

You can now view the changes that have been made to the wiki pages of an installed extension. This can help you review your customizations to a XAR extension before doing an upgrade. The wiki pages of the transitive dependencies are also taken into account.

extension-changes.png

See more on the Extension Manager Application documentation page.

Experimental Realtime Watchlist Notification

We have added a new notification option for WatchList that notifies users of changes on their watched documents in real time (i.e. as soon as they happen).

watchlistRealtime.png

This feature is currently experimental and disabled by default. Fore more information on it and how to enable it, please see the documentation.

Miscellaneous

  • Rendering page performances have been improved when using the Flamingo skin (thanks to the usage of Less4j for the integration of the LESS language).
  • When deploying XWiki as ROOT you must now set the xwiki.webapppath property to empty as in:
    xwiki.webapppath=

    The reason is that XWiki cannot guess the webapp context from the URL in this case. This seemed to work on previous versions but it was actually leading to errors from time to time, depending on what URL was used when doing the first request on the XWiki instance.

  • Debian packages based on Tomcat 8 have been added.
  • Distribution Wizard should not ask to login when installing from scratch anymore
  • Renamed the WatchList notification options to something simpler and clearer:

      watchlistNotifiers.png

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

For Developers

Access Extension fields by name

Added a method in Extension to access a field (name, summary, version, etc.) value by name.

    /**
     * Get an extension field (name, summary, id, etc.) by name. Fallback on properties.
     *
     * @param <T> type of the field value
     * @param fieldName the field name;
     * @return the field value or null if none could be found
     * @since 7.0RC1
     */

   @Unstable
   <T> T get(String fieldName);

Skin Edition

  • We have added a new Skin Application to easily edit a skin document.

      skin-edit1.png skin-edit2.png

  • This application provides a new way to override a template. You do not need to edit the XWikiSkins class anymore.
  • It also provides the ability to override a file stored in a subdirectory.
  • It is now possible to override the LESS templates.

Extensions Repository improvements

  • The new advanced extension search introduced in 7.0 Milestone 2 has been implemented on server side
  • Source URL is now taken into account when importing an extension
  • Search and advanced search are now implemented based on Solr which among other things make the search ordered by score by default and boost configuration has been associated to each extension element (high score for extension name and id, etc.)
  • Extensions Repository REST service now return scm informations

Solr index changes

All String based object properties raw values are now stored in the Solr index with _string suffix (exactly like for static lists properties) in DOCUMENT types. This mean that when upgrading to 7.0 you should recreate the Solr index so that they are added.

WebJars Caching

The WebJar resources are now permanently cached by the browser. The browser won't request them again unless you clear the browser cache or you force reload the page. See more on the WebJars Integration documentation.

Deprecated and Retired projects

  • The WatchList plugin has been moved to legacy and was replaced by a component-based implementation. The legacy module still provides a plugin API for compatibility, but clients should move to the new script service instead.

Miscellaneous

  • XAR Mojos now also format and verify attachment authors.
  • MandatoryDocumentInitializer components can now use a @Priority annotation to specify the order in which they should be executed. See XWIKI-11905.
  • A new isMainWikiOnly() method is available in AbstractMandatoryDocumentInitializer for overriding to specify that the document should be initialized on the main wiki only.
  • A new setDocumentFields() method is available in AbstractMandatoryDocumentInitializer to be called when initializing a regular document (which is not a class).
  • A new component based implementation of the watchlist module is now available (replacing the plugin one). See the documentation for more information.
  • The XWiki pages for the XClass Application (a.k.a Class Wizard or Class Editor Wizard) which were located in the xwiki-enterprise GitHub repository have been moved into a xwiki-platform-xclass Maven module in the xwiki-platform GitHub repository.
  • Added access to the document XDOM in com.xpn.xwiki.api.Document. That means you can now do $doc.getXDOM() and $doc.setContent($xdom).
  • The default preferences (the XWikiPreferences document) has been moved from xwiki-enterprise-ui-admin-user to xwiki-enterprise-ui-mainwikipreferences.

Upgrades

The following dependencies have been upgraded:

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 Chrome 41Not Tested
Firefox30.pngMozilla Firefox 37Jira Tickets Marked as Fixed in the Release Notes
IE30.pngInternet Explorer 8Not Tested
IE30.pngInternet Explorer 9Not Tested

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

DatabaseTest Result
hypersql.pngHyperSQL 2.3.2Jira Tickets Marked as Fixed in the Release Notes
mysql.pngMySQL 5.6.24Not Tested
oracle.pngOracle 11.2Not Tested
postgresql.pngPostgreSQL 9.4.1Not Tested

For the full list of tests see this page.

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 7.0 RC 1

  • The WatchList plugin has been moved to legacy and was replaced by a component-based implementation. The legacy module still provides a plugin API for compatibility, but clients should move to the new script service instead.
  • The Solr index changed so it needs to be recreated in case some new feature would expect to find the new fields
  • Debian packages based on Tomcat 5 and 6 has been removed since they are not supported by XWiki itself anymore
  • XWiki now requires to be deployed in a Servlet Container support Servlet 3.0.1. For example:
    • Jetty 8.x
    • Tomcat 7.x
    • Glassfish 3.x
    • WebSphere 8.x
    • WebLogic 12.x
    • JBoss AS 6.x/7.x
    • Resin 4.0.1

API Breakages

The following APIs were modified since XWiki 6.4.3:

  • In Velocity $jsontool.serialize($object) method return null when failing to serialize the passed object (it used to return whatever it was able to write before failing to serialize an element). This should not cause much issue since expecting to get a partial invalid JSON content is most probably a very rare use case.
  • The Watchlist plugin has been moved to legacy and a component-based implementation has replaced it. Major refactoring has been performed.
com.xpn.xwiki.plugin.watchlist.AutomaticWatchMode: Class com.xpn.xwiki.plugin.watchlist.AutomaticWatchMode removed
com.xpn.xwiki.plugin.watchlist.AutomaticWatchModeListener: Class com.xpn.xwiki.plugin.watchlist.AutomaticWatchModeListener removed
com.xpn.xwiki.plugin.watchlist.WatchListEvent: Class com.xpn.xwiki.plugin.watchlist.WatchListEvent removed
com.xpn.xwiki.plugin.watchlist.WatchListEventFeedManager: Class com.xpn.xwiki.plugin.watchlist.WatchListEventFeedManager removed
com.xpn.xwiki.plugin.watchlist.WatchListEventMatcher: Class com.xpn.xwiki.plugin.watchlist.WatchListEventMatcher removed
com.xpn.xwiki.plugin.watchlist.WatchListEventType: Class com.xpn.xwiki.plugin.watchlist.WatchListEventType removed
com.xpn.xwiki.plugin.watchlist.WatchListJob: Class com.xpn.xwiki.plugin.watchlist.WatchListJob removed
com.xpn.xwiki.plugin.watchlist.WatchListJobManager: Class com.xpn.xwiki.plugin.watchlist.WatchListJobManager removed
com.xpn.xwiki.plugin.watchlist.WatchListNotifier: Class com.xpn.xwiki.plugin.watchlist.WatchListNotifier removed
com.xpn.xwiki.plugin.watchlist.WatchListPlugin: Class com.xpn.xwiki.plugin.watchlist.WatchListPlugin removed
com.xpn.xwiki.plugin.watchlist.WatchListPluginApi: Class com.xpn.xwiki.plugin.watchlist.WatchListPluginApi removed
com.xpn.xwiki.plugin.watchlist.WatchListStore: Class com.xpn.xwiki.plugin.watchlist.WatchListStore removed
com.xpn.xwiki.plugin.watchlist.WatchListStore$ElementType: Class com.xpn.xwiki.plugin.watchlist.WatchListStore$ElementType removed
  • Add support for categories to extension. It should not be an issue for most Extension implementations which are supposed to extend AbstractExtension
org.xwiki.extension.Extension: Method 'public java.lang.String getCategory()' has been added to an interface
  • Helper to access extension fields by name
org.xwiki.extension.Extension: Method 'public java.lang.Object get(java.lang.String)' has been added to an interface
  • Added a method to get the date when an extension was installed.
org.xwiki.extension.InstalledExtension: Method 'public java.util.Date getInstallDate(java.lang.String)' has been added to an interface
  • Added support for associating custom install properties (e.g. the user that triggers the install) to the namespace where the extension is installed.
org.xwiki.extension.InstalledExtension: Method 'public java.lang.Object getNamespaceProperty(java.lang.String, java.lang.String)' has been added to an interface
org.xwiki.extension.repository.InstalledExtensionRepository: Method 'public org.xwiki.extension.InstalledExtension installExtension(org.xwiki.extension.LocalExtension, java.lang.String, boolean, java.util.Map)' has been added to an interface
  • Added support for advanced installed extensions search.
org.xwiki.extension.repository.InstalledExtensionRepository: Method 'public org.xwiki.extension.repository.result.IterableResult searchInstalledExtensions(java.lang.String, org.xwiki.extension.repository.search.ExtensionQuery)' has been added to an interface
  • Using String instead of JRCS Version for better flexibility. Probably should not have been public from the start.
com.xpn.xwiki.web.DeleteVersionsForm: Return type of method 'public org.suigeneris.jrcs.rcs.Version getRev()' has been changed to java.lang.String
com.xpn.xwiki.web.DeleteVersionsForm: Return type of method 'public org.suigeneris.jrcs.rcs.Version getRev1()' has been changed to java.lang.String
com.xpn.xwiki.web.DeleteVersionsForm: Return type of method 'public org.suigeneris.jrcs.rcs.Version getRev2()' has been changed to java.lang.String
  • Move to Servlet 3.0.1
com.xpn.xwiki.plugin.scheduler.XWikiServletRequestStub: Class com.xpn.xwiki.plugin.scheduler.XWikiServletRequestStub removed
com.xpn.xwiki.plugin.scheduler.XWikiServletResponseStub: Class com.xpn.xwiki.plugin.scheduler.XWikiServletResponseStub removed
  • Refactoring the LESS API. Make internal all the classes and interfaces that should never have been public
org.xwiki.lesscss.cache.ColorThemeCache: Class org.xwiki.lesscss.cache.ColorThemeCache removed
org.xwiki.lesscss.cache.LESSCache: Class org.xwiki.lesscss.cache.LESSCache removed
org.xwiki.lesscss.cache.LESSResourcesCache: Class org.xwiki.lesscss.cache.LESSResourcesCache removed
org.xwiki.lesscss.colortheme.ColorTheme: Class org.xwiki.lesscss.colortheme.ColorTheme removed
org.xwiki.lesscss.colortheme.ColorThemeReference: Class org.xwiki.lesscss.colortheme.ColorThemeReference removed
org.xwiki.lesscss.colortheme.ColorThemeReferenceFactory: Class org.xwiki.lesscss.colortheme.ColorThemeReferenceFactory removed
org.xwiki.lesscss.colortheme.ColorThemeReferenceSerializer: Class org.xwiki.lesscss.colortheme.ColorThemeReferenceSerializer removed
org.xwiki.lesscss.colortheme.DocumentColorThemeReference: Class org.xwiki.lesscss.colortheme.DocumentColorThemeReference removed
org.xwiki.lesscss.colortheme.LESSColorThemeConverter: Class org.xwiki.lesscss.colortheme.LESSColorThemeConverter removed
org.xwiki.lesscss.colortheme.NamedColorThemeReference: Class org.xwiki.lesscss.colortheme.NamedColorThemeReference removed
org.xwiki.lesscss.compiler.IntegratedLESSCompiler: Class org.xwiki.lesscss.compiler.IntegratedLESSCompiler removed
org.xwiki.lesscss.compiler.LESSCompiler: In method 'public java.lang.String compile(java.lang.String, java.nio.file.Path[])' the number of arguments has changed
org.xwiki.lesscss.compiler.LESSCompiler: In method 'public java.lang.String compile(java.lang.String)' the number of arguments has changed
org.xwiki.lesscss.compiler.LESSSkinFileCompiler: Class org.xwiki.lesscss.compiler.LESSSkinFileCompiler removed
org.xwiki.lesscss.resources.LESSObjectPropertyResourceReference: Class org.xwiki.lesscss.resources.LESSObjectPropertyResourceReference removed
org.xwiki.lesscss.resources.LESSResourceReader: Class org.xwiki.lesscss.resources.LESSResourceReader removed
org.xwiki.lesscss.resources.LESSResourceReference: Method 'public java.lang.String getContent(java.lang.String)' has been added to an interface
org.xwiki.lesscss.resources.LESSResourceReference: Method 'public java.lang.String serialize()' has been added to an interface
org.xwiki.lesscss.resources.LESSResourceReferenceSerializer: Class org.xwiki.lesscss.resources.LESSResourceReferenceSerializer removed
org.xwiki.lesscss.resources.LESSSkinFileResourceReference: Class org.xwiki.lesscss.resources.LESSSkinFileResourceReference removed
org.xwiki.lesscss.skin.DocumentSkinReference: Class org.xwiki.lesscss.skin.DocumentSkinReference removed
org.xwiki.lesscss.skin.FSSkinReference: Class org.xwiki.lesscss.skin.FSSkinReference removed
org.xwiki.lesscss.skin.SkinReference: Class org.xwiki.lesscss.skin.SkinReference removed
org.xwiki.lesscss.skin.SkinReferenceFactory: Class org.xwiki.lesscss.skin.SkinReferenceFactory removed
org.xwiki.lesscss.skin.SkinReferenceSerializer: Class org.xwiki.lesscss.skin.SkinReferenceSerializer removed
org.xwiki.lesscss.LessCompilerScriptService: Return type of method 'public org.xwiki.lesscss.colortheme.ColorTheme getColorThemeFromSkinFile(java.lang.String)' has been changed to org.xwiki.lesscss.internal.colortheme.ColorTheme
org.xwiki.lesscss.LessCompilerScriptService: Return type of method 'public org.xwiki.lesscss.colortheme.ColorTheme getColorThemeFromSkinFile(java.lang.String, java.lang.String)' has been changed to org.xwiki.lesscss.internal.colortheme.ColorTheme
Tags:
   

Get Connected