Release Notes for XWiki 10.9
This is the release notes for XWiki Commons, XWiki Rendering and XWiki Platform. They share the same release notes as they are released together and have the same version.
Starting with this release the Activity Stream Application is fully replaced by the Notifications Application. The list of followed users is back in the user profile and the Page Index can be sorted by page title. The Users and Groups administrations sections have been improved and there's a new Page Picker Velocity macro that can be used by developers.
New and Noteworthy (since XWiki 10.8.1)
Full list of issues fixed and Dashboard for 10.9.
For Users
Activity Stream is not bundled anymore
The good old Activity Stream Application is not bundled anymore with XWiki. This decision has been made because the Notifications Application can now handle the same features with better performances.
As a consequence, we have also modified every applications that was using Activity Stream to use the new Notifications features.
For backward compatibility, we also provide a Legacy Notification Activity Macro that would help you not to break the pages you have created with the use of the {{activity/}} macro..
Followed users in the user profile
A user can now see again (it was temporarily removed in past version while we migrated from WatchList to Notifications) the list of the users she is watching in the "network" panel of her user profile.
The name of the wiki is now displayed in the notifications
When a notification concerns a page that is not in the current wiki, the name of the wiki is now displayed in the notification.
Document index can be sorted by title
The main document index (and also the children/siblings of a page) can now be filtered and sorted by title. In previous versions this was not the case, because filtering and searching happens on the values stored in the database, which can be different from the displayed title.
While this obstacle has not been overcome now pages which have a displayed title which is different from the title stored in the database are now marked with the symbol "1". If these pages are found in the result set, a note is displayed explaining why filtering and sorting might not work as expected for these pages.
Miscellaneous
The notifications macro can now handle tags: The "tags" parameters can be used to filter events that concern pages marked with some given tags. In a multi-wikis environment, it works only on the current wiki.
For Admins
Improved Users Administration Section
The Users section from the Wiki Administration has been improved:
- Shows the user avatar
- Shows the user scope (Global vs. Local) when you are on a subwiki
- Has nicer modal popups for creating, editing and deleting the users
Improved Groups Administration Section
The Groups section from the Wiki Administration has been improved:
- Shows the group avatar
- Shows the member type (User vs. Group) when listing the members of a group
- Shows the group scope (Global vs. Local) when you are on a subwiki
- Has nicer modal popups for creating, editing and deleting the groups
Miscellaneous
Larger attachments by default: Till now the default limit for attachments was set at 32MB. It's now been increased to 100GB.
For Developers
No more unset xobject property
Missing properties in an xobject (compared to the xclass) are now automatically added (with a null value most of the time) during save or when adding a new field in a class. Among other things it means you can now use fields in a database query without wondering if the field exist or not, no more missing result because the property is not set in some object yet.
Page picker velocity macro
You can now use a #pagePicker($parameters) velocity macro (works like #userPicker) to display an input auto-suggesting pages. Pages are searched by full name (e.g. Sandbox.Page) and title (depending on the locale of the user).
Default empty choice for list properties
In the default list property editor an empty choice (generally displayed as "---" but it can be translated) is now always added for non multi select based editing. This avoid hacks like the "---" value which used to be used in various XWikiPreferences properties choices.
Miscellaneous
Metadata are rendered in Annotated XHTML: Metadata provided in the page structure (XDOM) are now output when using the Annotated XHTML renderer.
New Export "excludes" parameter for XAR/HTML: The new excludes parameter now allows the API users to craft more expressive request, such as "export all this space except those pages". This new parameter is supported for both XAR Export and HTML Export.
Sheet priority: The sheet query string parameter now has priority over anything else. It used to be skipped in various use cases.
Upgrades
The following runtime dependencies have been upgraded (they have a different release cycle than XWiki Commons, XWiki Rendering and XWiki Platform):
- Dom4j 2.1.0. This is actually a downgrade from version 2.1.1 used in XWiki 10.8RC1 and 10.8 which has a regression.
- Apache PDFBox 2.0.12
- Rome 1.11.1
- JNR FFI 2.1.9
- JNR Constants 0.9.11
- JGroups 4.0.15
- JSqlParser 1.3
- Tika 1.19.1
- Groovy 2.5.3
- snakeyaml 1.23
- Jackson 2.9.7
- commons-lang3 3.8.1
- commons-text 1.5
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:
Browser | Tests performed and results | |
---|---|---|
Google Chrome 70 | Smoke tests | |
Mozilla Firefox 63 | Not Tested | |
Microsoft Edge 17 | Not Tested | |
Internet Explorer 11 | New and Noteworthy Features + Jira Tickets Marked as Fixed in the Release Notes | |
Safari 12 | Not Tested |
Here is the list of databases we support and how they have been tested for this release:
Database | Tests performed and results | |
---|---|---|
HyperSQL 2.4.1 | Not Tested | |
MySQL 5.7 | Not Tested | |
Oracle 11.2 | Smoke tests | |
PostgreSQL 10 | New and Noteworthy Features + Jira Tickets Marked as Fixed in the Release Notes |
Here is the list of Servlet Containers we support and how they have been tested for this release:
Servlet Container | Tests performed and results | |
---|---|---|
Tomcat | Not Tested | |
Jetty (XWiki Standalone packaging) | New and Noteworthy Features + Jira Tickets Marked as Fixed in the Release Notes | |
Jetty | Not Tested |
Known issues
Backward Compatibility and Migration Notes
General Notes
- When upgrading make sure you compare and merge the following XWiki configuration files since some parameters may have been modified, removed or added:
- xwiki.cfg
- xwiki.properties
- web.xml
- hibernate.cfg.xml
- Add xwiki.store.migration=1 in xwiki.cfg so that XWiki will attempt to automatically migrate your current database to any new schema. Make sure you backup your Database before doing anything.
Issues specific to XWiki 10.9
Cannot remove a property from an xobject
It's not possible anymore to completely delete a property from an XObject if that property exists in the XClass. It will be automatically added back (with null value) when the document is saved.
Default is empty in the list property editor
The List property select based editor now always make sure the default choice is empty value for non multi list. It's possible control that by indicate what is the default value in which case empty value won't be proposed anymore.
API Breakages
The following APIs were modified since XWiki 10.8.1:
- Not a breakage.
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
@interface org.xwiki.stability.Unstable
## New:
@interface org.xwiki.stability.Unstable
- Violation type:
- Not a breakage: class moved to a legacy module
- Violation type:java.class.removed
- Code:## Old:
class org.xwiki.velocity.introspection.AbstractChainableUberspector
- Violation type:
- Not a breakage: class moved to a legacy module
- Violation type:java.class.removed
- Code:## Old:
interface org.xwiki.velocity.introspection.ChainableUberspector
- Violation type:
- Not a breakage: class moved to a legacy module
- Violation type:java.class.removed
- Code:## Old:
class org.xwiki.velocity.introspection.ChainingUberspector
- Violation type:
- Not a breakage: class moved to a legacy module
- Violation type:java.class.removed
- Code:## Old:
class org.xwiki.velocity.introspection.LinkingUberspector
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method java.util.Set<java.lang.String> org.xwiki.notifications.filters.NotificationFilterPreference::getEventTypes()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.removed
- Code:## Old:
method java.util.Set<org.xwiki.notifications.NotificationFormat> org.xwiki.notifications.filters.NotificationFilterPreference::getFilterFormats()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.removed
- Code:## Old:
method java.lang.String org.xwiki.notifications.filters.NotificationFilterPreference::getFilterPreferenceName()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method java.lang.String org.xwiki.notifications.filters.NotificationFilterPreference::getId()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method java.util.Set<org.xwiki.notifications.NotificationFormat> org.xwiki.notifications.filters.NotificationFilterPreference::getNotificationFormats()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method java.lang.String org.xwiki.notifications.filters.NotificationFilterPreference::getPage()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method java.lang.String org.xwiki.notifications.filters.NotificationFilterPreference::getPageOnly()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.removed
- Code:## Old:
method java.util.List<java.lang.String> org.xwiki.notifications.filters.NotificationFilterPreference::getProperties(org.xwiki.notifications.filters.NotificationFilterProperty)
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.noLongerDefault
- Code:## Old:
method java.util.Date org.xwiki.notifications.filters.NotificationFilterPreference::getStartingDate()
## New:
method java.util.Date org.xwiki.notifications.filters.NotificationFilterPreference::getStartingDate()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.nowAbstract
- Code:## Old:
method java.util.Date org.xwiki.notifications.filters.NotificationFilterPreference::getStartingDate()
## New:
method java.util.Date org.xwiki.notifications.filters.NotificationFilterPreference::getStartingDate()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method java.lang.String org.xwiki.notifications.filters.NotificationFilterPreference::getUser()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method java.lang.String org.xwiki.notifications.filters.NotificationFilterPreference::getWiki()
- Violation type:
- NotificationFilterPreference store did not scale
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method void org.xwiki.notifications.filters.NotificationFilterPreference::setEnabled(boolean)
- Violation type:
- Adding a parameter to a REST API is actually not a blocker.
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Adding a parameter to a REST API is actually not a blocker.
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method java.lang.String org.xwiki.notifications.rest.NotificationsResource::getNotificationsRSS(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
method java.lang.String org.xwiki.notifications.rest.NotificationsResource::getNotificationsRSS(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Adding a parameter to a REST API is actually not a blocker.
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::getNotifications(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Adding a parameter to a REST API is actually not a blocker.
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method java.lang.String org.xwiki.notifications.rest.NotificationsResource::getNotificationsRSS(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
## New:
method java.lang.String org.xwiki.notifications.rest.NotificationsResource::getNotificationsRSS(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.lang.Exception
- Violation type:
- Adding a new REST API is actually not a blocker.
- Violation type:java.method.addedToInterface
- Code:## Old:
null
## New:
method javax.ws.rs.core.Response org.xwiki.notifications.rest.NotificationsResource::postNotifications() throws java.lang.Exception
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method void org.xwiki.notifications.filters.NotificationFilterManager::deleteFilterPreference(java.lang.String) throws org.xwiki.notifications.NotificationException
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method java.util.stream.Stream<org.xwiki.notifications.filters.NotificationFilterPreference> org.xwiki.notifications.filters.NotificationFilterManager::getFilterPreferences(java.util.Collection<org.xwiki.notifications.filters.NotificationFilterPreference>, org.xwiki.notifications.filters.NotificationFilter)
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method java.util.stream.Stream<org.xwiki.notifications.filters.NotificationFilterPreference> org.xwiki.notifications.filters.NotificationFilterManager::getFilterPreferences(java.util.Collection<org.xwiki.notifications.filters.NotificationFilterPreference>, org.xwiki.notifications.filters.NotificationFilter, org.xwiki.notifications.filters.NotificationFilterType)
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method java.util.stream.Stream<org.xwiki.notifications.filters.NotificationFilterPreference> org.xwiki.notifications.filters.NotificationFilterManager::getFilterPreferences(java.util.Collection<org.xwiki.notifications.filters.NotificationFilterPreference>, org.xwiki.notifications.filters.NotificationFilter, org.xwiki.notifications.filters.NotificationFilterType, org.xwiki.notifications.NotificationFormat)
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method java.util.Collection<org.xwiki.notifications.filters.NotificationFilterPreference> org.xwiki.notifications.filters.NotificationFilterManager::getFilterPreferences(org.xwiki.model.reference.DocumentReference) throws org.xwiki.notifications.NotificationException
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method void org.xwiki.notifications.filters.NotificationFilterManager::saveFilterPreferences(java.util.Set<org.xwiki.notifications.filters.NotificationFilterPreference>)
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method void org.xwiki.notifications.filters.NotificationFilterManager::setFilterPreferenceEnabled(java.lang.String, boolean) throws org.xwiki.notifications.NotificationException
- Violation type:
- Young API
- Violation type:java.method.removed
- Code:## Old:
method void org.xwiki.notifications.filters.NotificationFilterManager::setStartDateForUser(org.xwiki.model.reference.DocumentReference, java.util.Date) throws org.xwiki.notifications.NotificationException
- Violation type:
- Young API
- Violation type:java.method.parameterTypeChanged
- Code:## Old:
parameter void org.xwiki.notifications.filters.watch.WatchedLocationReference::<init>(org.xwiki.model.reference.EntityReference, java.lang.String, org.xwiki.model.reference.EntityReferenceResolver<java.lang.String>, org.xwiki.notifications.filters.internal.scope.ScopeNotificationFilterLocationStateComputer, ===org.xwiki.notifications.filters.NotificationFilterManager===)
## New:
parameter void org.xwiki.notifications.filters.watch.WatchedLocationReference::<init>(org.xwiki.model.reference.EntityReference, java.lang.String, org.xwiki.model.reference.EntityReferenceResolver<java.lang.String>, org.xwiki.notifications.filters.internal.scope.ScopeNotificationFilterLocationStateComputer, ===org.xwiki.notifications.filters.NotificationFilterPreferenceManager===)
- Violation type:
- Young API
- Violation type:java.method.parameterTypeChanged
- Code:## Old:
parameter void org.xwiki.notifications.filters.watch.WatchedUserReference::<init>(java.lang.String, org.xwiki.notifications.filters.internal.user.EventUserFilterPreferencesGetter, ===org.xwiki.notifications.filters.NotificationFilterManager===)
## New:
parameter void org.xwiki.notifications.filters.watch.WatchedUserReference::<init>(java.lang.String, org.xwiki.notifications.filters.internal.user.EventUserFilterPreferencesGetter, ===org.xwiki.notifications.filters.NotificationFilterPreferenceManager===)
- Violation type:
- Add an optional parameter to a REST API end point
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method org.xwiki.rest.model.jaxb.PropertyValues org.xwiki.rest.resources.classes.ClassPropertyValuesResource::getClassPropertyValues(java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.util.List<java.lang.String>) throws org.xwiki.rest.XWikiRestException
## New:
method org.xwiki.rest.model.jaxb.PropertyValues org.xwiki.rest.resources.classes.ClassPropertyValuesResource::getClassPropertyValues(java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.util.List<java.lang.String>, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException
- Violation type:
- Add a hierarchy property to the Search Result from the REST model
- Violation type:java.annotation.attributeValueChanged
- Code:## Old:
class org.xwiki.rest.model.jaxb.SearchResult
## New:
class org.xwiki.rest.model.jaxb.SearchResult
- Violation type:
- Add an optional parameter to a REST API end point
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method org.xwiki.rest.model.jaxb.SearchResults org.xwiki.rest.resources.spaces.SpaceSearchResource::search(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.lang.String>, java.lang.Integer, java.lang.Integer, java.lang.String, java.lang.String, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException
## New:
method org.xwiki.rest.model.jaxb.SearchResults org.xwiki.rest.resources.spaces.SpaceSearchResource::search(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.lang.String>, java.lang.Integer, java.lang.Integer, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException
- Violation type:
- Add an optional parameter to a REST API end point
- Violation type:java.method.numberOfParametersChanged
- Code:## Old:
method org.xwiki.rest.model.jaxb.SearchResults org.xwiki.rest.resources.wikis.WikiSearchResource::search(java.lang.String, java.lang.String, java.util.List<java.lang.String>, java.lang.Integer, java.lang.Integer, java.lang.String, java.lang.String, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException
## New:
method org.xwiki.rest.model.jaxb.SearchResults org.xwiki.rest.resources.wikis.WikiSearchResource::search(java.lang.String, java.lang.String, java.util.List<java.lang.String>, java.lang.Integer, java.lang.Integer, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean) throws org.xwiki.rest.XWikiRestException
- Violation type:
Credits
The following people have contributed code and translations to this release (sorted alphabetically):
- Adel Atallah
- Arun Pattni
- Clemens Klein-Robbenhaar
- Ecaterina Moraru (Valica)
- Eduard Moraru
- Guillaume Delhumeau
- JSDennebouy
- Lavinia Florean
- Leif Erik Andersen
- Mario-Hofstaetter
- Marius Dumitru Florea
- Ryszard Jeziorski
- Simon Urli
- Thomas Mortagne
- Valdis Vitolins
- Vincent Massol
- xrichard
- 吴国凯