Release Notes for XWiki 7.2
- New and Noteworthy (since XWiki 7.1)
- For Developers
- Nested Spaces
- New Reference-related APIs
- Complete References Providers
- org.xwiki.model.reference.EntityReferenceProvider
- Properly support any kind of References in getDocument and getURL
- New helpers in EntityReference
- New helpers in LocalDocumentReference
- org.xwiki.model.reference.SpaceReferenceResolver
- New model Script Service helpers
- New components to generate REST URLs
- Reference Scripting API for Nested Spaces
- Resolve nested spaces in JavaScript
- New readonly XWikiContext provider
- New Space/XWikiSpace table
- Queries improvement
- XWiki Select Widget
- Document Picker
- REST
- Miscellaneous
- Deprecated and Retired projects
- Upgrades
- Translations
- Tested Browsers & Databases
- Performances tests compared to 6.4.5
- Known issues
- Backward Compatibility and Migration Notes
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 is probably one of the biggest releases we have done in XWiki for years (more than 900 commits)! We have worked hard during all the summer to finally achieve the introduction of a new concept: Nested Pages. This big change affects both the platform and the user interface, and you will discover many differences while using XWiki.
For developers, this release also introduces a new Script right and some changes in the REST, Job and Refactoring modules, just to list a few...
Finally, it also brings a lot of bugs fixes!
New and Noteworthy (since XWiki 7.1)
Full list of issues fixed and Dashboard for 7.2.
Nested Pages
It's now possible to create wiki pages inside other wiki pages. More specifically we've decided to drop the concept of Space in the UI (it's still there at the API/platform level) and instead, to replace it with the concept of Nested Pages.
We've also decided to drop the concept of Parent/Child relationship since it was too complex for end users to have 2 hierarchies: the Space/Page hierarchy and the Parent/Child hierarchy. The Parent/Child hierarchy also had limitations: you couldn't inherit page permissions for example. Thus the idea is to have a single hierarchy based on Nested Pages.
Advantages of Nested Pages:
- The URL reflects the page hierarchy
- Finer-grained control: Ability to set permissions at each level
- Generally speaking, a nicer and simpler way to organize your content hierarchically
- Moving and Deleting pages updates the hierarchy
Terminology:
- Nested Page (a.k.a Non-Terminal Page): This is a wiki page that can have children pages. Technically a Nested Page is implemented as a Nested Space (i.e. a WebHome page).
- Non-Nested Page (a.k.a Terminal Page): This a wiki page that cannot have children pages. Applications and script can create Terminal Pages. Advanced Users will also be able to create Terminal Pages from the UI. Standard Users will only be able to create Nested Pages.
- Nested Space: A Space which has another Space as parent. As mentioned above, a Nested Page is technically implemented as a Nested Space. You will used the term Nested Space when speaking technically about XWiki APIs for example but when talking about UI you should favor using the term Nested Page instead.
For more information, see Content Organization.
We have worked a lot to minimize the retro-compatibility issues. However, some Extensions are not adapted for Nested Pages yet, and their execution is still sub-optimal. For the next releases, we plan to work on the adaptation of these Extensions.
Script right
A new Script Right has been added to allow controlling who has the right to write Scripts. Specifically anyone with Edit rights can edit a page and write a Script in it. However, when the page is rendered the script will only execute if the last author of the page has the Script right.
Example when the author of a script doesn't have the Script right:
The Script Right is set to DENY by default, meaning that if you do not have it explicitly, you will not be able to execute the scripts that you write with your user account.
However, for backward-compatibility reasons, the standard XWiki Enterprise distribution comes with the Script Right being allowed for all users at the main wiki level, so that, unless you (as an Admin) explicitly revoke the right for some users or explicitly deny it, they will be able to execute the scripts they wrote, just like before.
Hiding of the Parent-Child Relationship
Following our decision to drop the Parent-Child relationship (see above), it's now been turned off by default in favor of Nested Pages.
Note that it's possible to go back to the previous behavior, in which the Breadcrumb was following the Parent/Child relationship, by setting the core.hierarchyMode property to parentchild in the xwiki.properties configuration file.
New Breadcrumb
The Breadcrumb has been reworked to reflect the location of a Page in the reference hierarchy. For example for a Page "CEO" inside a Page "Boarding" inside a Page "Management" inside a Page "Staff" you would have the following Breadcrumb:
New Index Tree
The Index Tree is now using the reworked Document Tree Macro and is thus honoring the Nested Pages hierarchy. For example:
Updated Edit Mode
In Edit mode, the ability to change the Parent has been removed by default since we're now honoring the Nested Pages hierarchy. For example:
Flamingo
Following the introduction of the Nested Pages feature, we have changed a lot our default skin, Flamingo:
- The top menu has been removed and replaced by a drawer menu that you can expand by clicking on the top right icon
- The add menu has been relocated near the edit one
- The L&F of the Add, Edit, and "More Actions" menus has been changed
- A lot of actions have been moved to the "More Actions" menu
- The page breadcrumb has suffered some changes:
- it is now also displayed on the wiki home page
- the wiki home page is now included when it is part of the current document's hierarchy, i.e. for children and descendants of the wiki home page. See XWIKI-12423 for more details.
- the sub-wiki pretty name is included between the home icon and the local page path
- The actions menus (edit, create, more actions) are now available from the rename, copy and delete actions.
- The create, copy and rename page actions have been modified to support nested pages:
- The source and target pages are displayed using the breadcrumb
- The target page can be selected using a document tree picker
- For advanced users there is also the option to specify the target page using some text input fields (location advanced edit mode). This is useful especially if you want to create/move the page under a parent that doesn't exist yet (you cannot use the tree picker in this case because the parent would not be available in the tree).
- The delete action proposes to delete the children of the page.
- The welcome message from the main wiki home page has been updated.
- The "Spaces" widget from the wiki dashboard has been replaced with "Pages" which shows the hierarchy of nested pages from that wiki.
- For non terminal pages, we have introduced a "Page Administration", where you will find settings that concern the page and its children (it's actually the old space administration behind the scene). But we have also introduced 2 sections for setting rights on these pages:
- a section to set rights for the page only.
- a section to set rights for the page and its children.
- For terminal pages, nothing changes, you can change the access rights of the page in the "edit" menu. The only addition is a "Administer Parent" link in the "More actions" menu to administer the parent page (which again is the space administration behind the scene).
- The create action has been re-looked (with the introduction of the "page type" field) and proposes to import an office document.
- A new "children" viewer is now accessible in the "more actions" menu, along with the other viewers.
- For Terminal Pages, a new "siblings" viewer is present, which replaces the old "space index" feature.
LDAP improvements
It's now possible to disable subgroups resolution using xwiki.authentication.ldap.group_sync_resolve_subgroups property in xwiki.cfg configuration file. Resolving each member to check if it's a group might be very expensive with big groups so if you know there is no subgroup you should really disable it.
Solr Search
You can now search for nested pages using the Solr Search Application. The display of the search result location has been updated to support nested pages.
The "Space" facet has been replaced with a "Location" facet that supports nested pages. This allows you to search in a specific location in the page hierarchy.
The "Page" facet has been removed by default because it doesn't bring value in the context of the nested pages: all non-terminal pages have the same name 'WebHome'. The "Wiki" facet is displayed by default only on the main wiki and only if you have multiple wikis.
The search results location displayed on the Search suggest has also been updated to support nested pages.
Miscellaneous
- When a space home page has an empty title (and the space home page doesn't have a sheet or the sheet doesn't control the title) then the displayed title is now the space name instead of 'WebHome'.
- The Document Tree Macro has a new parameter called showSpaceAsDocument which allows you to merge the space nodes with the space home page nodes.
- The list of available template providers is now sorted by document full name.
- The Orphaned Pages tab from the Document Index is now displayed only when the Parent-Child Hierarchy Mode is enabled (which is not the case by default).
- Import UI move to new standard tree
- The size of the Job status cache is now configurable. See job.statusCacheSize property in xwiki.properties files.
- The Spaces macro (which lists all Spaces) is now working fine when there are Nested Spaces.
- The LiveTable macro is now working fine when there are Nested Spaces.
- The Navigation panel displays nested pages:
- When renaming or copying a nested page the document title is updated to reflect the new page name if its previous value was equal the old page name. This was happening already for terminal pages. We extended the behaviour to nested pages.
- Fixed various issues for several applications bundled in XE (such as WatchList and Annotations), which should now work well with Nested Spaces.
- The Administration mode for spaces and wikis now uses the standard reference-based breadcrumbs instead of the previously custom section-based breadcrumbs.
- The Administration mode no longer features a select input on the right side for navigation between spaces since that input does no longer scale in the context of Nested Spaces. Thus, the breadcrumbs should be used instead and the future UI improvements that will soon become available in this direction.
- It's now possible to create Skins in Nested Spaces.
- Changed the exception message displayed when a script execution fails due to lack of rights to make it clearer that it's not a problem with the current user, but with the script.
- When creating, copying or renaming a page you can now select a top level location from the tree picker (e.g. copy as top level page) even if you have a single wiki (i.e. only the main wiki). You do this by selecting the root of the tree (i.e. the wiki node).
- The Document Tree Macro is now displaying a message when the tree is empty.
With the new showRoot parameter you can force the document tree to show the actual root node (either the one specified by the root parameter or the default root node).
- A couple of bugs in the App Within Minutes Application, that were caused by the introduction of the Nested Pages feature, have been fixed.
- It's now possible create new FAQs in Nested Spaces.
- When using the XWiki Jetty distribution, a memory dump is automatically created in XWiki's data/ folder when an Out Of Memory error occurs.
- The Activity Stream now also displays activity for Nested Spaces.
See the full list of JIRA issues fixed in this release.
For Developers
Nested Spaces
Since Nested Spaces were already planned and supported in APIs like DocumentReference there are not too many changes for those who were using recent APIs but there is still some and here are the main ones.
Space Reference instead of Space name
The heart of the implementation is that the field that used to contain the unique document space now contain the possibly Nested Space Reference. In practice it means that:
- "." (dot), ":" (colon) and "\" (baskslash) characters, which are part of a Space name will now be escaped (using the "\" character) in the space (XWD_WEB) field from the Document's table in the Database. For example a space named Space:with.special\char will be stored as Space\:with\.special\\char.
- Same as for the database, the XWikiDocument/Document#getSpace() methods now return a serialized Reference to the Space instead of what used to be the unique Space name (basically it return what's in the database). Same logic for XWikiDocument#setSpace(). Those field have been deprecated a long time ago but they are still used in lots of places...
- Various APIs are also affected by this Space name to Space Reference input change:
- XWiki#getSpaceDocsName methods (both in the public and private XWiki API)
- All the default XWikiURLFactory implementation methods accepting a Space as parameter have been modified to accept a serialized Space Reference. Extensions/code implementing XWikiURLFactory (or extending classes implementing XWikiURLFactory such as XWikiServletURLFactory) will need to be modified to handle nested spaces passed in the space parameter of the various APIs. Here's how to parse Spaces passed as a String:private EntityReferenceResolver<String> relativeEntityReferenceResolver =
Utils.getComponent(EntityReferenceResolver.TYPE_STRING, "relative");
...
or
...
@Inject
@Named("relative")
private EntityReferenceResolver<String> relativeEntityReferenceResolver;
...
private List<String> extractSpaceNames(String spaces)
{
List<String> spaceNames = new ArrayList<>();
// Parse the spaces list into Space References
EntityReference spaceReference = this.relativeEntityReferenceResolver.resolve(spaces, EntityType.SPACE);
for (EntityReference reference : spaceReference.getReversedReferenceChain()) {
spaceNames.add(reference.getName());
}
return spaceNames;
} - Extensions/code implementing ExportURLFactoryActionHandler will also need to be modified to handle nested Spaces passed in the space parameter.
- Extensions/code implementing EntityReferenceSerializer or DocumentReferenceResolver must now handle Nested Spaces (in the past they were already supposed to handle Nested Spaces but since it was not used they could take shortcuts and it wasn't visible. It's now going to fail, see XWIKI-12191).
Space separator properly taken into account
The Reference syntax specification was already indication that "." was supposed to be escaped in the space part of the Reference but it was not really taken into account so not escaping it was not making any difference. This is now fixed in the various standard String Reference resolvers so a Reference that don't follow the specification and did not escaped the "." in the space part will be cut is several nested spaces. Anything that was serialized with one of the standard serializers was properly escaped so not worry here, the issue will be more for hand written or hardcoded String References.
New XAR format
To support exporting/importing nested spaces some changes has been made to the XAR format. The format remain upward and downward compatible (except that you won't get nested spaces in your < 7.2 instance obviously).
Two new attributes has been added to the <xwikidoc> root XML element
- reference: the complete local Reference of the document in standard Reference format. <web> and <name> are deprecated (but still set). <web> keep containing the (unescaped) space name when there is only one space and will contain the space Reference when there is several (when imported in a < 7.2 instance a document exported from a nested space will end up in a space having as name the space reference).
- locale: the locale of the document. <language> is deprecated. It was not technically needed in the context of nested spaces but it makes having the Reference as attribute more consistent. It also make getting all the entries from a new format XAR easier and faster since document space and name could be located anywhere in the XML document.
REST module
- The REST module now supports Nested Spaces. Example of url to access the page A.B.C.MyPage: /xwiki/rest/wikis/xwiki/spaces/A/spaces/B/spaces/C/pages/MyPage.
URL modules
The URL modules have been modified to support Nested Spaces. As a consequence the URL formats supported by the standard URL scheme have been modified.
New Rename/Delete Jobs
New code has been developed to support Nested Pages/Nested Spaces and Script Services have been provided and they now run inside Jobs to better handle the fact that they are long-running operations.
The corresponding Script Services APIs have been added:
- Copy a Space#set ($source = $services.model.resolveSpace('Path.To.Source'))
#set ($destination = $services.model.resolveSpace('Path.To.New.Parent'))
$services.refactoring.copy($source, $destination).join() - Copy a Space As#set ($source = $services.model.resolveSpace('Path.To.Source'))
#set ($destination = $services.model.resolveSpace('Path.To.New.Name'))
$services.refactoring.copyAs($source, $destination).join() - Move a Space#set ($source = $services.model.resolveSpace('Path.To.Source'))
#set ($destination = $services.model.resolveSpace('Path.To.New.Parent'))
$services.refactoring.move($source, $destination).join() - Move a Page#set ($source = $services.model.resolveDocument('Path.To.Source.WebHome'))
#set ($destination = $services.model.resolveSpace('Path.To.New.Parent'))
$services.refactoring.move($source, $destination).join() - Rename a Space#set ($source = $services.model.resolveSpace('Path.To.Source'))
$services.refactoring.rename($source, 'NewName').join() - Rename a Page#set ($source = $services.model.resolveDocument('Path.To.Source.WebHome'))
$services.refactoring.rename($source, 'NewName').join() - Delete a Page#set ($source = $services.model.resolveDocument('Path.To.Source.WebHome'))
$services.refactoring.delete($source).join() - Delete a Space#set ($source = $services.model.resolveSpace('Path.To.Source'))
$services.refactoring.delete($source).join() - Convert a Terminal Page to a Nested Page#set ($source = $services.model.resolveDocument('Path.To.Page'))
$services.refactoring.convertToNestedDocument($source).join() - Convert a Nested Page to a Terminal Page#set ($source = $services.model.resolveDocument('Path.To.Source.WebHome'))
$services.refactoring.convertToTerminalDocument($source).join()
New create action parameters and logic
The create action now accepts a spaceReference parameter and a name parameter, together with an optional tocreate=terminal parameter (usable on non-terminal pages). The previous space parameters was not scalable in the context of Nested Spaces since it was just a top-level space name so it did not allow the creation of deeper space levels. More details are available in the create action's documentation.
As explained previously, these logic is also available in the improved create UI, with the terminal pages option appearing only for advanced users and being checked or unchecked by default, depending on the type of the current page.
JS API Improvements
- It's now possible to create a Nested Spaces Reference using XWiki's Javascript API. For example:// Construct a Nested Space reference
var reference = new XWiki.SpaceReference('wiki', ['space1', 'space2']);
expect(XWiki.Model.serialize(reference)).toEqual('wiki:space1.space2');
reference = new XWiki.DocumentReference('wiki', ['space1', 'space2'], 'page');
expect(XWiki.Model.serialize(reference)).toEqual('wiki:space1.space2.page');
// Construct a non-Nested Space reference
reference = new XWiki.SpaceReference('wiki', 'space');
expect(XWiki.Model.serialize(reference)).toEqual('wiki:space');
// Try passing non-valid space parameters
expect(function() {new XWiki.SpaceReference('wiki', [])}).toThrow('Missing mandatory space name or invalid type for: []');
expect(function() {new XWiki.SpaceReference('wiki', 12)}).toThrow('Missing mandatory space name or invalid type for: [12]'); - A new XWiki.EntityReference.equals() method has been added. For example:var reference1 = new XWiki.DocumentReference('wiki', ['space1', 'space2'], 'page');
var reference2 = new XWiki.DocumentReference('wiki', ['space1', 'space2'], 'page');
var reference3 = new XWiki.DocumentReference('wiki2', ['space1', 'space2'], 'page');
expect(reference1.equals(reference2)).toBe(true);
expect(reference1.equals(reference3)).toBe(false); - A new XWiki.EntityReference.fromJSONObject(obejct) has been added to create a Javascript XWiki.EntityReference from a Java EntityReference directly serialized as JSON:var reference = XWiki.EntityReference.fromJSONObject(jsonText.evalJSON());
- A new XWiki.EntityReferenceTree JS class has been added, which partially mimics the Java EntityReferenceTree Class. It's still missing features though as it was introduced mostly to make it easier to manipulate a serialized Java EntityReferenceTree.
Updated Document Tree Macro
The Document Tree Macro now supports Nested Pages and Nested Spaces modes. Specifically, the following changes have been made:
- removed the showSpaceAsDocument parameter (was introduced recently in 7.2M1)
- deprecated the showChildDocuments parameter
- added the hierarchyMode parameter with two supported values: reference (default) and parentchild
As a result, you can use the document tree macro like this:
- Nested Page Tree{{documentTree/}}
- Nested Space + Page Tree{{documentTree showSpaces="true" /}}
- Parent-Child Page Tree{{documentTree hierarchyMode="parentchild" /}}
- Old Page Index Tree (i.e. Parent-Child mixed with space grouping){{documentTree hierarchyMode="parentchild" showSpaces="true" /}}
Solr Search
We added 3 new fields to the Solr Index related to Nested Spaces:
- spaces: the list of nested spaces, e.g. ['A', 'B', 'C']
- space_facet: used for hierarchical faceting (the 'facet.prefix'-based drill down approach)
- space_prefix: used to match descendant documents, e.g. all documents from space A.B and all its descendants (like space A.B.C)
We also modified the value of the space and space_exact fields to contain the full local reference of the space (it was holding only the name of the last space prior to 7.2). Finally, the space field has been deprecated in favour of the spaces field.
New Reference-related APIs
Various new API around References has been introduced while adding support for nested spaces.
Complete References Providers
Complete References Providers (for DocumentReference, SpaceReference and WikiReference) with default or current hints. They allow getting complete Reference created from each default or current part of those references (for example in SpaceReference you end up with the space of the XWikiContext document and the XWikiContext wiki)
Provider<DocumentReference> defaultDocumentReference;
@Inject
@Named("current")
Provider<DocumentReference> currentDocumentReference;
org.xwiki.model.reference.EntityReferenceProvider
org.xwiki.model.reference.EntityReferenceProvider replaces org.xwiki.model.reference.EntityReferenceValueProvider. It's essentially the same thing but with EntityReference instead of string which allow getting multiple spaces when you ask for the current EntityType.SPACE for example.
EntityReferenceProvider provider;
Properly support any kind of References in getDocument and getURL
com.xpn.xwiki.XWiki#getDocument(EntityReference) and com.xpn.xwiki.api.XWiki#getDocument(EntityReference) support any kind of Reference properly (e.g. a Space Reference will return the space home page, an Object Reference will return the Object Document Reference, etc).
Same for com.xpn.xwiki.XWiki#getURL(EntityReference) and com.xpn.xwiki.api.XWiki#getURL(EntityReference) (e.g. passing a Document Reference with Locale will return the URL to the specified document translation, by adding language=xx to the query string).
New helpers in EntityReference
- boolean equals(EntityReference otherReference, EntityType to): same as equals but only take into account Reference parts up to the passed entity type (included)
- boolean equals(EntityReference otherReference, EntityType from, EntityType to): same as equals but only take into account Reference parts between passed entity types (included)
- boolean equalsNonRecursive(EntityReference otherReference): same as equals but does not take into account the parent
New helpers in LocalDocumentReference
- LocalDocumentReference(String pageName, EntityReference spaceReference): allowed created a LocalDocumentReference from a Space Reference instead of just the space name
org.xwiki.model.reference.SpaceReferenceResolver
New default String and EntityReference based SpaceReferenceResolver has been added. It's the same behavior then DocumentReferenceResolver but for spaces.
SpaceReferenceResolver<String> stringResolver;
@Inject
SpaceReferenceResolver<EntityReference> referenceResolver;
New model Script Service helpers
- new help to escape an entity name according to default Reference syntax as in:$services.model.escape('some.space:with\specialchars', 'SPACE')
will print
some\.space\:with\\specialchars - you can retrieve a node from an EntityReferenceTree using its reference:#set ($alice = $services.model.resolveDocument('wiki:Users.Alice.WebHome'))
#set ($bob = $services.model.resolveDocument('wiki:Users.Directory'))
#set ($tree = $services.model.toTree($alice, $bob))
#set ($usersNode = $tree.get($bob.lastSpaceReference))
New components to generate REST URLs
- The component RestURLGenerator has been added. Its role, in the long term, is to generate a REST URL for any kind of EntityReference. It currently handles DocumentReference and SpaceReference.
- The corresponding script service has been added: $services.rest with the method $services.rest.url($entityReference).
Reference Scripting API for Nested Spaces
The Script API for Entity References has been updated with new APIs to support creating Nested Spaces references. For example:
$services.model.createDocumentReference("wiki", ["space1", "space2"], "page")
$services.model.createDocumentReference("wiki", ["space1", "space2"], "page", "default")
$services.model.createSpaceReference(["space1", "space2"], $services.model.createWikiReference("wiki"))
{{/velocity}}
Resolve nested spaces in JavaScript
spaceReference.getReversedReferenceChain().map(function(entityReference) {
return entityReference.name;
}).join(' > ');
// Produces: A > B > C
See the JavaScript API documentation for more details.
New readonly XWikiContext provider
You can inject a new "readonly" XWikiContext the following way:
@Named("readonly")
Provider<XWikiContext> roXWikiContextProvider;
The difference with default provider is that the readonly one won't try to create a new XWikiContext and will return null if it can't find any. It's been introduced for some low level components that were used during XWikiContext creation but in general it should be used by any component that only search for some XWikiContext property that might be null even in a valid XWikiContext.
New Space/XWikiSpace table
A new table dedicated to Spaces has been introduced, in order to have performant and scalable Space-related queries (like supporting getting paginated Space which is useful for the Document Tree macro for example).
Queries improvement
Allow executing complete SELECT queries
In HQL and XWQL it's now possible to execute full SELECT queries without Programming Right as long as you follow some rules currently defined in com.xpn.xwiki.internal.store.hibernate.query.HqlQueryUtils, which contains a list of the database field allowed in the SELECT clause. Namely:
- For the Document/XWikiDocument table: fullName, name, space, language, defaultLanguage, translation, hidden
- For the XWikiSpace table: reference, name, parent, hidden
This is also true for the Named Queries located in the queries.hbm.xml file.
New Secure Query
The right to execute or not some Query is now controlled by each org.xwiki.query.QueryExecutor.
Anyone can ask the executor to check or ignore Right through the new org.xwiki.query.SecureQuery extending org.xwiki.query.Query:
- checkCurrentAuthor(): indicate if the current author right should be checked
- checkCurrentUser(): indicate if the result should be filtered based on current user Right (only implemented by SOLR right now)
XWiki Select Widget
A new widget has been introduced, to have a rich select box:
Document Picker
Two new Velocity macros has been added to allow selecting a page from a tree picker and to display the path (breadcrumbs) to the selected page.
Check the Document Picker documentation for more details.
REST
2 new resources have been exposed to the REST API:
REST script services
New url(EntityReference) was introduced to return relative REST URL of an entity. The new url(EntityReference reference, boolean external) has been added to force returning an external form URL. See Generate a REST URL for a resource for more details.
Miscellaneous
- Objects, attachments and the document's class are now clearly not considered content, but metadata. Thus, any change in these will set the document's (XWikiDocument) metadataDirty flag to true and not touch the document's contentDirty flag unless there is an actual change in the document's content or title fields. This is also in line with the original intent of the contentAuthor document field. The direct impact of this is that the contentAuthor field will be updated only when the content is changed and thus the programming/script rights of a document will be changed much less often than before and much less by accident.
- custom Maven properties which have a special meaning (like xwiki.extension.features) are not duplicated in Extension custom properties anymore.
- standard fields names have been added to org.xwiki.extension.rating.RatingExtension.
- URL configuration now use default ConfigurationSource provider instead of only xwiki.properties one which means it's possible to overwrite properties for each wiki among other things.
- Added ability to set and change the URL scheme to use in the Execution Context. This allows code to dynamically change the generated URLs when Rendering a document (useful when performing an Export for example).
- Started a new filesystem URL Scheme for exporting Resources to the filesystem and generating URLs to them (useful for the HTML Export for example). At the moment, only the webjars Resource Type is using it and all other Resource Types are using the old XWikiURLFactory class.
- A new DocumentModelBridge.getContentAuthorReference() method has been added to allow accessing the content author of a document without depending on oldcore.
- Deprecate XWiki.parseContent(...) since it is was misleading and outdated. Its documentation mentioned that the passed content is parsed as velocity code, but it was actually doing much more than that and had some unwanted side-effect. Instead, use the parse/renderer that is specific to the type of content you have. See more details in XWIKI-12299.
- A new script service is available to retrieve the status of a specified job or the status of the currently running job from a specified group. See the Job Module documentation for details.
- Custom displayers are now executed with the Rights of the user who wrote them (i.e. author of the class document or content author of the displayer document), and not the Rights of the user who wrote the script that uses them (i.e. current context document's content author). See XWIKI-12306 for more details.
- In the Active Install Extension, a new Velocity Macro has been introduced to compute the number of Active Installs having a specific Extension. Example usage:{{include reference="ActiveInstalls.ExtensionCount"/}}
{{velocity}}
#set ($extensionIds = [
'org.xwiki.contrib:xwiki-totem-application',
'jsimard:event-reporter-application',
'mouhb:likeapplication'
])
|=Extension Id|=Count
#foreach($extensionId in $extensionIds)
#countActiveInstallsUsingExtension($extensionId $count)
|$extensionId|$count
#end
{{/velocity}} - Better support of non-DOCUMENT EntityReferences in DocumentReferenceConverter. It now behaves like XWiki#getDocument(EntityReference).
- The Copy/Rename/Delete UI actions are now using the Refactoring Module's Script Services.
- You can see the children and backlinks of any document with the new parameters ?xpage=children and ?xpage=backlinks to add to the document URL. To get the children according to the parent/child mechanism, you can use ?xpage=children&hierarchy=parentchild.
- The features are also available as viewers: ?viewer=children and ?viewer=backlinks
- A new "siblings" viewer has been added, accessible both with ?viewer=siblings and ?xpage=siblings.
- For this viewers, a displayHidden parameter has been added. By default, the hidden pages are not displayed unless the user's configuration overwrites this.
- You can now reuse the velocity hierarchy macros defined in the Flamingo Skin's hierarchy_macros.vm template to display the breadcrumbs for a particular document. See XWIKI-12408.
- In JavaScript, the class XWiki.Document has been modified to handle nested spaces. A new constructor have been created, and the old one is deprecated.
Deprecated and Retired projects
- The OSCache-based Cache Extension has been moved to xwiki-contrib since we've been using the Infinispan implementation for a while now and the XWiki Core developers don't intend to continue supporting the OSCache-based one (it can be maintained by the Community, by whoever's interested in supporting it).
Upgrades
The following dependencies have been upgraded:
- Bootstrap 3.3.5
- Cssparser 0.9.16
- Commons-compress 1.10
- Groovy 2.4.4
- Hibernate Validator 4.3.2
- HSQLDB 2.3.3
- Httpclient 4.5
- Httpcore 4.4.3
- Infinispan 7.2.5
- Jackson 2.6.1
- JGroups 3.6.6
- Joda-Time 2.8.2
- JRuby 1.7.21
- Less4j 1.14.0
- Tika 1.10
Translations
The following translations have been updated:
Tested Browsers & Databases
Failed to execute the [velocity] macro. Cause: [The execution of the [velocity] script macro is not allowed in [xwiki:TestReports.ManualTestReportSummaryXWiki72]. Check the rights of its last author or the parameters if it's rendered from another script.]. Click on this message for details.
Here is the list of browsers we support and how they have been tested for this release:
Browser | Test Result | |
---|---|---|
Google Chrome 45 | Jira Tickets Marked as Fixed in 7.2, Jira Tickets Marked as Fixed in 7.2RC1 | |
Mozilla Firefox 39 | Jira Tickets Marked as Fixed in 7.2M1 | |
Mozilla Firefox 40 | Jira Tickets Marked as Fixed in 7.2M2, Jira Tickets Marked as Fixed in 7.2M3 + Full test in 7.2M3 | |
Internet Explorer 10 | Not Tested | |
Internet Explorer 11 | Not Tested | |
Safari 5 | Not Tested |
Here is the list of databases we support and how they have been tested for this release:
Database | Test Result | |
---|---|---|
HyperSQL 2.3.2 | Jira Tickets Marked as Fixed in 7.2M1, Jira Tickets Marked as Fixed in 7.2RC1 | |
MySQL 5.5.44 | Jira Tickets Marked as Fixed in 7.2M2, Jira Tickets Marked as Fixed in 7.2M3 + Full test in 7.2M3 | |
Oracle 11.2 | Jira Tickets Marked as Fixed in 7.2 | |
PostgreSQL 9.4.1 | Not Tested |
Performances tests compared to 6.4.5
There hasn't really been much performance work on this version (it will most probably start again in 7.3 and 7.4) which was dedicated to nested spaces support so we get mostly the same results than in 7.1. The important point here was to check if nested spaces refactoring had much impact on performances.
Summary
"similar": difference is lower than 10%
"slightly": difference is lower than 20%
Note hat most of the speed related values are an average of very moving results, a lot of things is happening during a HTTP request and it's far from stable duration (that's why 10% may sounds a lot for something called "similar" but the variable can go up and down around 5% sometimes so 10% average is really not that much of a clear win).
Speed
Actions | Difference | |
---|---|---|
Jetty startup | similar | |
First access | not existing page without UI | similar |
not existing page with UI | similar | |
Reload | not existing page without UI | similar |
not existing page with UI | 20% faster | |
Main.WebHome with UI | 20% faster | |
Main.WebHome without UI | 30% faster | |
SOLR | Full SOLR reindex | similar |
SOLR sync when index is empty | similar | |
SOLR sync when there is nothing to do | similar | |
Result of search finding lots of results | 25% faster | |
Result of search finding one result | 20% faster | |
Rendering | Page with 1000 macros without UI | /34 |
Page with 1000 html macros without UI | /6 |
Memory
Actions | Difference |
---|---|
Heap Memory after jetty startup | similar |
Heap Memory after full SOLR index | +50MB |
More details on performance comparison on single wiki between 7.2 and 6.4.5.
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.2
Nested spaces
See previous Nested spaces section for details on what changes in the way some API and the database are dealing with the Document Space.
Note that some existing Extensions are impacted and may break slightly: Extensions taking some user input and creating Spaces based on that will most likely display "\.", "\:" and "\\" in the UI. Unless they already clean the user input and remove ".", ":" and "\" characters. So for example if a user enter a Space name of "my.space":
- before 7.2: the Extension would create/display a Space named "my.space"
- after 7.2: the Extension will create/display a Space named "my\.space"
URLs
In order to support Nested Pages and have the ability that typing a URL such as /A will lead to A.WebHome we have stopped supporting URLs that don't specify the view action (when xwiki.showviewaction=1). Thus URLs such as /xwiki/bin/Something now need to be written as /xwiki/bin/view/Something. If xwiki.showviewaction=0 then you can still write /xwiki/bin/<something> provided that <something> isn't equal to view. If it is (you have a space named view) then you need to use /xwiki/bin/view/view[...].
Templates
All the templates specific to Colibri Skin had been moved to it. If your skin depends on some of these templates, you should set Colibri as parent of your skin.
Solr Search Index
We made important changes to the Solr schema in this release and unfortunately we don't have support for automatic Solr search index migration at this point. You have to delete the 'solr' folder from the configured permanent directory of your XWiki instance. The Solr index will be recreated automatically and the entire wiki/farm will be re-indexed after a server restart.
API Breakages
The following APIs were modified since XWiki 7.1.2:
- New configuration option to change the size of the Job statuses cache:org.xwiki.job.JobManagerConfiguration: Method 'public int getJobStatusCacheSize()' has been added to an interface
- Added missing methods to the DocumentModelBridge class, which are already implemented by XWikiDocument:org.xwiki.bridge.DocumentModelBridge: Method 'public org.xwiki.model.reference.DocumentReference getContentAuthorReference()' has been added to an interface
- AbstractWrappingObject, AbstractSafeObject and ScriptSafeProvider have been moved to xwiki-commons-script:org.xwiki.extension.wrap.WrappingIterableResult: Removed org.xwiki.extension.internal.safe.AbstractSafeObject from the list of superclasses
org.xwiki.extension.wrap.WrappingIterableResult: Removed org.xwiki.extension.wrap.AbstractWrappingObject from the list of superclasses
org.xwiki.extension.wrap.WrappingIterableResult: Parameter 2 of 'public WrappingIterableResult(org.xwiki.extension.repository.result.IterableResult, org.xwiki.extension.internal.safe.ScriptSafeProvider)' has changed its type to org.xwiki.script.internal.safe.ScriptSafeProvider
org.xwiki.filter.script.AbstractFilterScriptService: Changed type of field scriptProvider from org.xwiki.extension.internal.safe.ScriptSafeProvider to org.xwiki.script.internal.safe.ScriptSafeProvider
org.xwiki.extension.script.AbstractExtensionScriptService: Changed type of field scriptProvider from org.xwiki.extension.internal.safe.ScriptSafeProvider to org.xwiki.script.internal.safe.ScriptSafeProvider
- com.xpn.xwiki.XWiki#localStringEntityReferenceSerializer now exists in oldcore, we do not need it in the aspect anymore:com.xpn.xwiki.XWikiCompatibilityAspect: Method 'public org.xwiki.model.reference.EntityReferenceSerializer ajc$interFieldGetDispatch$com_xpn_xwiki_XWikiCompatibilityAspect$com_xpn_xwiki_XWiki$localStringEntityReferenceSerializer(com.xpn.xwiki.XWiki)' has been removed
com.xpn.xwiki.XWikiCompatibilityAspect: Method 'public void ajc$interFieldInit$com_xpn_xwiki_XWikiCompatibilityAspect$com_xpn_xwiki_XWiki$localStringEntityReferenceSerializer(com.xpn.xwiki.XWiki)' has been removed
com.xpn.xwiki.XWikiCompatibilityAspect: Method 'public void ajc$interFieldSetDispatch$com_xpn_xwiki_XWikiCompatibilityAspect$com_xpn_xwiki_XWiki$localStringEntityReferenceSerializer(com.xpn.xwiki.XWiki, org.xwiki.model.reference.EntityReferenceSerializer)' has been removed
- Not a breakage. The legacy method was not in the right place (which mean that it was not available so it actually fix a breakage):com.xpn.xwiki.XWikiCompatibilityAspect: Method 'public java.lang.Object getRenderingEngine()' has been removed
- Young API. ExportURLFactoryContext been renamed to FilesystemExportContext and moved to the Filesystem URL scheme module