Release Notes for XWiki Enterprise 4.1 Milestone 2
This is the second milestone of the XWiki Enterprise 4.1 version (Roadmap). This version brings improvements to the Extension Manager's handling of updates to configuration documents, new localization through timezone settings, and customization of chart colors as well as many bug fixes and improvements.
New and Noteworthy (since XWiki Enterprise 4.1 version)
Custom Chart Colors
It's now possible to select custom colors in Chart graphs. For example:
| |X |Y |Z
|Q1|1.2|3.4|1.3
|Q2|4.5|3.4|2.3
|Q3|1.2|4.5|9.0
|Q4|3.4|1.2|1.2
{{/chart}}
Will generate:
Hide Technical Documents
- In the activity stream, events (such as edit or delete) triggered by hidden documents do not appear unless the user chose to "display hidden documents" in his user preferences.
Extension Manager improvements
XWiki Enterprise 4.1 milestone 2 comes with a first version of the Merge Conflict Resolution UI. From now on, when your upgrade a XAR extension and the extension manager fails to automatically merge your changes with the changes from the new version of the extension the extension manager will guide you to resolve the conflict.
In its first iteration the UI only allows you to choose which version to keep. You can compare the versions to make the right decision. Only the document content changes are displayed for the moment. The plan is to show all document changes (including meta data, objects, class, attachments) in 4.1 final and to allow you to edit the diff, i.e. create a custom version, in XWiki Enterprise 4.2.
Other minor improvements of the extension manager UI include:
- Mark 'Show Details', 'Hide Details' and 'Back to list' buttons as secondary buttons
- Display an "upgrade" button instead of an "install" one when an extension is already installed
- Better messages for empty search results
See the Extension Manager Application documentation for more details.
Global and per-user timezone setting
Wiki administrators can now decide to use a specific timezone, without having to take care of the one set on the server. The following setting can be found under Administration > Localization.
Users will find the same setting, allowing them to see dates reflecting their current location. The user setting is accessible through Profile > Preferences > Localization Preferences.
New macro for sending messages
The control which allows users to send messages that is displayed on top of the Activity Stream can now be used outside of the activity macro by calling {{messageSender /}}.
For developers
- There's a new Script Service allowing to access the Component Manager directly from scripts. For example:{{groovy}}
def myComponent = services.component.getInstance(MyComponentRole.class)
{{/groovy}} - We added a new Velocity uberspector that tries to convert method arguments to formal parameter types when the passed arguments don't match the method signature. For example:$obj.someMethod('VALUE')
// will forward to
obj.someMethod(SomeEnum.VALUE)
// if obj has a method with signature someMethod(SomeEnum) and not someMethod(String)But this is not limited to enums. The conversion is done using the Properties Module which means you can create and register custom converters for data types specific to your application domain.
- It's now much easier to share variable between languages. You're now allowed to write (for example):{{groovy}}
var = "toto"
{{/groovy}}
{{velocity}}
$var
{{/velocity}}
Bug fixes and improvements
- Filenames of entries in XAR files are now always decoded using UTF-8 during import. The previous behavior was to use the platform encoding. The filenames have always been encoded using UTF-8 in XAR files, but now also the Unicode extra fields are included, so unpacking XAR files with InfoZIP will result in the filenames beeing properly reencoded with the local filesystems character set.
- Temporary files are now placed in a special sub-directory of the normal temporary directory, this sub-directory called "xwiki-temp" is deleted after each startup of the xwiki system so it is critical that nothing else it placed in it. This improvement means that temporary files such as cached attachments will be removed even if the JVM crashes.
- It is now possible to delete pages and attachments before the initial import of wiki contents.
- The ability to delete messages from the Activity Stream is working again. It had stopped working since 3.5.
See the full list of JIRA issues fixed in this release.
Upgrades
The following dependencies have been upgraded:
- Restlet 2.0.14
- Prior to Restlet 2.0.14, there was a REST bug allowing arbitrary filesystem read access for registered users.
- Reflections 0.9.7
Test Report
You can check the manual test report to learn about what was tested and the results on various browsers.
Tested Browsers
Here's the list of browsers tested with this version (i.e. browsers that we've tested as working - Check the list of supported browsers):
- Firefox
- 12.0.1
Tested Databases
- HyperSQL
- 2.2.8
Known issues
Upgrade Notes
Version-specific Upgrade Notes
- The location where the HSQLDB database is located in the Standalone distribution has changed from database/ to data/database in order to group all data in the same directory. The location of the HSQLDB is specified in hibernate.cfg.xml with a default value of jdbc:hsqldb:file:${environment.permanentDirectory}/database/xwiki_db;shutdown=true. Notice the introduction of the new ${environment.permanentDirectory} variable which points to the directory defined in xwiki.properties in the environment.permanentDirectory property (which defaults to data for the Standalone distribution). When upgrading, make sure the location you have in your hibernate.cfg.xml file matches the location where your HSQLDB database is located.
- The behavior of the justify parameter of the {{container}} macro, and its usage in the {{dashboard}} macro have changed. Initially, specifying justify="true" when using the container macro used to justify all the text inside it, but due to a regression in 3.1, the parameter stopped working as documented. The regression has been remedied, and now the justify parameters works again. However, the dashboard macro doesn't specify this parameter anymore, and so the text inside the dashboard widgets is not justified. If you still want to have justified text in certain widgets, we recommend that you explicitly change the style of those widgets only.
General Upgrade Notes
You may also want to import the default wiki XAR in order to benefit from all the improvements listed above.
API Breakages
The following APIs were modified since version 4.0:
- Breakage in Query module done to support adding several Filters to a Query:org.xwiki.query.QueryFilter: Method 'public java.util.List filterResults(java.util.List)' has been added to an interface
- This method should have been internal from the beginning:org.xwiki.environment.EnvironmentConfiguration: Class org.xwiki.environment.EnvironmentConfiguration removed
- The Job module is new and is still considered a "young API":org.xwiki.job.AbstractJob: Changed type of field status from org.xwiki.job.internal.DefaultJobStatus to org.xwiki.job.internal.AbstractJobStatus
org.xwiki.job.AbstractJob: Return type of method 'protected org.xwiki.job.internal.DefaultJobStatus createNewStatus(org.xwiki.job.Request)' has been changed to org.xwiki.job.internal.AbstractJobStatus
org.xwiki.job.AbstractJob: Method 'protected java.lang.String getId()' has been removed
org.xwiki.job.AbstractRequest: Return type of method 'public java.lang.String getId()' has been changed to java.util.List
org.xwiki.job.Job: Method 'public void join()' has been added to an interface
org.xwiki.job.Job: Method 'public boolean join(long, java.util.concurrent.TimeUnit)' has been added to an interface
org.xwiki.job.JobManager: Method 'public org.xwiki.job.event.status.JobStatus getJobStatus(java.util.List)' has been added to an interface
org.xwiki.job.Request: Return type of method 'public java.lang.String getId()' has been changed to java.util.List
org.xwiki.job.event.JobEvent: Return type of method 'public java.lang.String getJobId()' has been changed to java.util.List
org.xwiki.job.event.JobFinishedEvent: Return type of method 'public java.lang.String getJobId()' has been changed to java.util.List
org.xwiki.job.event.JobStartedEvent: Return type of method 'public java.lang.String getJobId()' has been changed to java.util.List
org.xwiki.job.event.status.JobStatus: Method 'public java.util.Date getEndDate()' has been added to an interface
org.xwiki.job.event.status.JobStatus: Method 'public java.util.Date getStartDate()' has been added to an interface - The Extension module is relatively new and is still undergoing some API tuning:org.xwiki.extension.job.plan.ExtensionPlan: Return type of method 'public java.util.Collection getTree()' has been changed to org.xwiki.extension.job.plan.ExtensionPlanTree
org.xwiki.extension.version.VersionConstraint: Method 'public boolean isCompatible(org.xwiki.extension.version.Version)' has been added to an interface - This class was added in 3.2M2 by error in a user-public package. It's been moved again in the internal package as it should have been. We don't expect many users to be affected by this:com.xpn.xwiki.doc.merge.MergeUtils: Class com.xpn.xwiki.doc.merge.MergeUtils removed
- In 2.2M1 we refactored BaseCollection to add getXClass() but we forgot to add it to the ObjectInterface interface. Even though this could break user we think it's very limited since nobody should implement directly ObjectInterface; instead everyone should extend BaseClass or BaseCollection:com.xpn.xwiki.objects.ObjectInterface: Method 'public com.xpn.xwiki.objects.classes.BaseClass getXClass(com.xpn.xwiki.XWikiContext)' has been added to an interface
- The Autotag plugin has been extracted from the oldcore module and is now a module on its own so the following are not real breakages:com.xpn.xwiki.plugin.autotag.AutoTagPlugin: Class com.xpn.xwiki.plugin.autotag.AutoTagPlugin removed
com.xpn.xwiki.plugin.autotag.AutoTagPluginAPI: Class com.xpn.xwiki.plugin.autotag.AutoTagPluginAPI removed
com.xpn.xwiki.plugin.autotag.FrenchStemmer: Class com.xpn.xwiki.plugin.autotag.FrenchStemmer removed
com.xpn.xwiki.plugin.autotag.Tag: Class com.xpn.xwiki.plugin.autotag.Tag removed
com.xpn.xwiki.plugin.autotag.TagCloud: Class com.xpn.xwiki.plugin.autotag.TagCloud removed - The WYSIWYG Diff and Sync plugins have been extracted into their own modules so the following are not real breakages:org.xwiki.gwt.wysiwyg.client.Images: Method 'public com.google.gwt.resources.client.ImageResource sync()' has been removed
org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String sync()' has been removed
org.xwiki.gwt.wysiwyg.client.diff.AddDelta: Class org.xwiki.gwt.wysiwyg.client.diff.AddDelta removed
org.xwiki.gwt.wysiwyg.client.diff.ChangeDelta: Class org.xwiki.gwt.wysiwyg.client.diff.ChangeDelta removed
org.xwiki.gwt.wysiwyg.client.diff.Chunk: Class org.xwiki.gwt.wysiwyg.client.diff.Chunk removed
org.xwiki.gwt.wysiwyg.client.diff.DeleteDelta: Class org.xwiki.gwt.wysiwyg.client.diff.DeleteDelta removed
org.xwiki.gwt.wysiwyg.client.diff.Delta: Class org.xwiki.gwt.wysiwyg.client.diff.Delta removed
org.xwiki.gwt.wysiwyg.client.diff.Diff: Class org.xwiki.gwt.wysiwyg.client.diff.Diff removed
org.xwiki.gwt.wysiwyg.client.diff.DiffAlgorithm: Class org.xwiki.gwt.wysiwyg.client.diff.DiffAlgorithm removed
org.xwiki.gwt.wysiwyg.client.diff.DiffException: Class org.xwiki.gwt.wysiwyg.client.diff.DiffException removed
org.xwiki.gwt.wysiwyg.client.diff.DifferentiationFailedException: Class org.xwiki.gwt.wysiwyg.client.diff.DifferentiationFailedException removed
org.xwiki.gwt.wysiwyg.client.diff.PatchFailedException: Class org.xwiki.gwt.wysiwyg.client.diff.PatchFailedException removed
org.xwiki.gwt.wysiwyg.client.diff.Revision: Class org.xwiki.gwt.wysiwyg.client.diff.Revision removed
org.xwiki.gwt.wysiwyg.client.diff.RevisionVisitor: Class org.xwiki.gwt.wysiwyg.client.diff.RevisionVisitor removed
org.xwiki.gwt.wysiwyg.client.diff.SimpleDiff: Class org.xwiki.gwt.wysiwyg.client.diff.SimpleDiff removed
org.xwiki.gwt.wysiwyg.client.diff.ToString: Class org.xwiki.gwt.wysiwyg.client.diff.ToString removed
org.xwiki.gwt.wysiwyg.client.diff.myers.DiffNode: Class org.xwiki.gwt.wysiwyg.client.diff.myers.DiffNode removed
org.xwiki.gwt.wysiwyg.client.diff.myers.MyersDiff: Class org.xwiki.gwt.wysiwyg.client.diff.myers.MyersDiff removed
org.xwiki.gwt.wysiwyg.client.diff.myers.PathNode: Class org.xwiki.gwt.wysiwyg.client.diff.myers.PathNode removed
org.xwiki.gwt.wysiwyg.client.diff.myers.Snake: Class org.xwiki.gwt.wysiwyg.client.diff.myers.Snake removed
org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncPlugin: Class org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncPlugin removed
org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncPluginFactory: Class org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncPluginFactory removed
org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncResult: Class org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncResult removed
org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncService: Class org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncService removed
org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncServiceAsync: Class org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncServiceAsync removed
org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncStatus: Class org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncStatus removed
org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncTools: Class org.xwiki.gwt.wysiwyg.client.plugin.sync.SyncTools removed
org.xwiki.wysiwyg.server.plugin.sync.SyncEngine: Class org.xwiki.wysiwyg.server.plugin.sync.SyncEngine removed
org.xwiki.wysiwyg.server.plugin.sync.SyncException: Class org.xwiki.wysiwyg.server.plugin.sync.SyncException removed