Release Notes for XWiki 8.1

Last modified by Thomas Mortagne on 2017/03/24

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 brings an upgrade to the Java 8 runtime, a new Tips panel that replaces the old Quick Links panel, Extension Manager improvements and LDAP avatar synchronization. As usual, a lot of bug fixes (81) and minor improvements (43) are also included.

New and Noteworthy (since XWiki 8.0)

Full list of issues fixed and Dashboard for 8.1.

Requires Java 8

Java 8 is now required to run XWiki. If you use an earlier version of Java, you'll get an error while starting XWiki such as:

java.lang.reflect.InvocationTargetException
[...]
Caused by: java.lang.UnsupportedClassVersionError: org/xwiki/tools/jetty/listener/NotifyListener : Unsupported major.minor version 52.0
[...]

Tips Panel

A new Tips Panel has been added by default. Example:

tippanel-1.png

tippanel-2.png

Sandbox Relocation

The Sandbox pages were previously accessible through a link in the Quick Links Panel. This link has been removed and instead a Sandbox entry has been added in the Applications Panel

sandbox-appbar.png

In addition the message about the shortcut key to use the "Jump To Page" feature has been moved to the new Tips Panel.

Here's how the home page looks like now:

home.png

Documents Macro Improvement

The Documents Macro now supports a location parameter to display all documents having their full reference matching the location value. 

For example:

{{documents location="Sand"/}}

Gives:

documents-macro-location.png

RSS Macro Improvements

The RSS Macro now supports feeds delivered over HTTPS. Additionally, it now uses its own user-agent string, XWiki/VERSION, where VERSION is the version of XWiki in use.

Extension Manager improvements

Repair invalid extensions

The Extension Manager now tries to repair automatically any invalid dependency and also provides a "Repair" button to repair specific invalid extensions.

repair.png

repairplan.png

Apply namespaces constraints in the UI

The namespaces constraints introduced in 8.0 are now taken into account in the UI which won't propose an option that will fail in the install plan.

Move to farm

It's now possible to install on farm an extension installed in a subwiki directly from the UI.

installonfarm.png

Dependency on root

When using Extension Manager from main wiki it's now allowed to install/upgrade an extension which require upgrading/install farm level dependency. It also automatically propose to install on farm a new dependency which indicate it as constraint. This will make easier to deal with extension have an API that have to be installed on root and a XAR extension UI that should usualy be install on a wiki.

It's still forbidden from subwiki in the standard UI (any script with programming right can enable it in the install request). That might change in the future but need to be discussed more.

Managed dependencies

Extension Manager now support the concept of managed dependencies. It's pretty much the same thing that the <dependencyManagement> in Maven.

It still need to be supported in the Repository Application. See https://jira.xwiki.org/browse/XWIKI-13281.

Flavors improvements

  • Known flavors are not validated anymore before ending up in the flavor picker of the Distribution Wizard. This speed up a lot the use case where you just want to install default XWiki Flavor or XE UI. See Flavor Module for more details.
  • Flavors are now also searched in the local repository. This makes easier to embedded flavors in a distribution for setups with no network access.

Synchronization of user avatar from LDAP

Binary photos stored in LDAP can be synchronized now to XWiki user avatar. New options are added to control this feature:

ldap-photo.png

Please note that user avatar will not be updated from LDAP if user set custom avatar with filename other than specified in XWiki preferences.

Active Installs

New widget displayed on the dashboard to see the number of Active Installs count per XWiki Cycle version:

versionspercycle.png

Miscellaneous

  • The Annotations Application's Administration section has been updated to present the exception spaces as "locations", using the documentTree macro. The behavior has not been changed.

    annotationsAdminSection.png

  • The Gadget's title has now a default value which is internationalized.
  • Put a link to the product home page in the footer by default
  • Template providers that are restricted to certain pages are now also available on the children of those pages.
  • The Document Tree Macro has a new parameter to limit the number of child nodes displayed when a parent node is expanded for the first time.
  • The xwiki.usedefaultweb parameter from xwiki.cfg has been removed. See below.
  • Job module does not validate stored status at startup. This might improve a lot the startup time when there is a lot of status. Also there seems to still be use cases where XStream get lost in edge case when parsing, this was blocking the whole XWiki startup for a very long time.

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

For Developers

Standard java.lang.Package properties

The following properties are now automatically added to all Maven jar modules MANIFEST files:

Specification-Title: ${project.name}
Specification-Version: ${project.version}
Specification-Vendor: ${project.organization.name}
Implementation-Title: ${project.name}
Implementation-Version: ${project.version}
Implementation-Vendor-Id: ${project.groupId}
Implementation-Vendor: ${project.organization.name}
Implementation-URL: ${project.url}

And can be accessed using java.lang.Package from any class. For example:

String myVersion = this.getClass().getPackage().getImplementationVersion();

Deferred JavaScript Module Dependency Loading

You can extend a feature provided by some JavaScript module without knowing where that module is loaded from (by RequireJS) with the following code:

require(['deferred!module'], function(modulePromise) {
  modulePromise.done(function(module) {
  // Do something with the module, if the module is loaded by someone else.
});
});

This basically says to RequireJS: "let me know when this module is loaded by someone else" (someone else being an other script on the same page). You can read more about this on the Developer's Guide.

Context and cache inconsistency hunting

  • XWikiHibernate* store implementations don't take into account the passed XWikiContext anymore and will even log a warning if the passed XWikiContext is not the same as the one in the ExecutionContext
  • XWikiCacheStore make sure to recalculate the cache based based on whatever the actual store return instead of assuming the passes XWikiDocument is what it will received

Extension Manager improvements

  • introduced new ExtensionNotFoundException exception to get more information about why exactly the resolve failed in extension repository API
  • provide API to search installed extensions in several all namespaces

Upgrades

The following dependencies have been upgraded:

Miscellaneous

  • The default LiveTable results page (XWiki.LiveTableResults, the page that generates the JSON displayed by the LiveTable) now supports a location extra parameter.
  • Modified WebJars URL format and added some new Script Service methods:
    public String url(String webjarId, String namespace, String path, Map<String, ?> params)
    public String url(String webjarId, String namespace, String path)
  • IRC Bot Application has been moved to XWiki Contrib under the new extension id of org.xwiki.contrib:application-ircbot-ui
  • Selenium Application had been moved to XWiki Contrib under the new extension id of org.xwiki.contrib:application-selenium
  • FAQ Application has been moved to XWiki Contrib under the new extension id of org.xwiki.contrib:application-faq-ui
  • Starting With XWiki 8.1M1, the backward-compatibility tool we use is Revapi. We had to move away from CLIRR since it didn't support Java 8 constructs.
  • Introduced JobFinishingEvent to be called at the end of the job execution before starting to close it
  • Introduced new JobStatus#getError() which return the exception that filled the job main execution (if any) (it's also logged in the log as an error like before)
  • The XAR plugin now also verifies that Translation pages are using the plain/1.0 syntax (it checks pages having a Translation xobject in them).
  • This Methods Arguments Velocity Uberspector now supports calling varargs methods.

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 34Jira Tickets Marked as Fixed in the Release Notes + New Features from 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.pngMySQLNot Tested
oracle.pngOracle 11.2Jira Tickets Marked as Fixed in the Release Notes + New Features from Release Notes
postgresql.pngPostgreSQLNot Tested

Performances tests compared to <last super stable version>

<a summary of the comparison with latest super stable version>

More details on <link to the test report>.

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 8.1

  • Since we've modified content of the Quick Links Panel, the Distribution Wizard may detect a merge conflict if this panel was customized. In addition, the Quick Links panel may disappear after an upgrade to 8.1M1+. You can add it back from the administration UI if you want to keep it (e.g. if it has been customized).
  • The WebJars URL format has been modified to support relative WebJars URL in subwikis. The new format is /webjars/<namespace>/<path/to/resource>?.... Reminder: you should not use this format directly and instead you should use the Script Service to generate a valid WebJars URL; this isolate you from any URL change. Example from Velocity: $services.webjars.url(...).
  • The xwiki.usedefaultweb parameter has been removed from xwiki.cfg. This parameter had not been working since XWiki 7.2-milestone-1; when we introduced Nested Pages we had to make a choice and we decided to support addressing top-level Nested Pages without having to have WebHome in the URL (nor having to finish URLs with a trailing /). For example, http://<server>/xwiki/bin/view/something points to something.WebHome by default since XWiki 7.2-milestone-1.

API Breakages

The following APIs were modified since XWiki 8.0:

  • ? return type makes signature more complex for nothing
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.List<? extends org.xwiki.extension.ExtensionDependency> org.xwiki.extension.AbstractExtension::getDependencies()

      ## New:
      method java.util.List<org.xwiki.extension.ExtensionDependency> org.xwiki.extension.AbstractExtension::getDependencies()
  • ? return type makes signature more complex for nothing
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.Collection<? extends org.xwiki.extension.ExtensionDependency> org.xwiki.extension.Extension::getDependencies()

      ## New:
      method java.util.Collection<org.xwiki.extension.ExtensionDependency> org.xwiki.extension.Extension::getDependencies()
  • ? return type makes signature more complex for nothing
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.Collection<? extends org.xwiki.extension.ExtensionDependency> org.xwiki.extension.wrap.WrappingExtension<E extends org.xwiki.extension.Extension>::getDependencies()

      ## New:
      method java.util.Collection<org.xwiki.extension.ExtensionDependency> org.xwiki.extension.wrap.WrappingExtension<E extends org.xwiki.extension.Extension>::getDependencies()
  • CopyStatusPage page object was renamed to CopyOrRenameStatusPage since it is needed in both places.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.test.ui.po.CopyStatusPage org.xwiki.test.ui.po.CopyOverwritePromptPage::clickCopyButton()

      ## New:
      method org.xwiki.test.ui.po.CopyOrRenameStatusPage org.xwiki.test.ui.po.CopyOverwritePromptPage::clickCopyButton()
  • CopyStatusPage page object was renamed to CopyOrRenameStatusPage since it is needed in both places.
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method org.xwiki.test.ui.po.CopyStatusPage org.xwiki.test.ui.po.CopyPage::clickCopyButton()

      ## New:
      method org.xwiki.test.ui.po.CopyOrRenameStatusPage org.xwiki.test.ui.po.CopyPage::clickCopyButton()
  • CopyStatusPage page object was renamed to CopyOrRenameStatusPage since it is needed in both places.
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.test.ui.po.CopyStatusPage
  • Minor change unlikely to break anything in practice
    • Violation type:
      java.method.returnTypeChanged
    • Code:
      ## Old:
      method void org.xwiki.test.ui.TestUtils::setDefaultCredentials(org.apache.commons.httpclient.UsernamePasswordCredentials)

      ## New:
      method org.apache.commons.httpclient.UsernamePasswordCredentials org.xwiki.test.ui.TestUtils::setDefaultCredentials(org.apache.commons.httpclient.UsernamePasswordCredentials)
Tags:
   

Get Connected