XWiki Enterprise 3.0 Milestone 2

Last modified by Thomas Mortagne on 2023/10/13

Second milestone of the XWiki Enterprise 3.0 version (Roadmap).

New and Noteworthy (since XWiki Enterprise 3.0 Milestone 1)

General UI improvements

  • We have redesigned the administration application providing a new layout and new icons for the administrator sections.

Administration.png

  • Several XWiki forms have been modified in order to be consistent with our form standards: vertical and inline layout (added in this release). 

WYSIWYG content editor improvements

  • XWIKI-5849: Cannot create link to current page
  • XWIKI-5895: Adding an image in the WYSIWYG editor and previewing it without saving the page first makes the XWiki page corrupt
  • XWIKI-5929: Improve the display of "selected color" in WYSIWYG's color picker
    withWhiteCheck.png

PDF export improvements

  • XWIKI-2555: PDF Export fonts are not picked up from WEB-INF/fonts
  • XWIKI-5726: Image does not appear in pdf export
  • XWIKI-5910: PDF export fails with an exception when there are duplicate IDs in the exported XML
  • XWIKI-5921: Default fop.xsl breaks non-FO elements (for example SVG) during PDF export

Miscellaneous

  • XWIKI-5915: Cannot log in using Safari
  • XWIKI-5816: Lock on document lost when using "Save and continue"
  • XWIKI-5897: Office Viewer Macro fails for ppt files on pages with dashes
  • XWIKI-5905: Local admins are unable to import XARs on subwikis
  • XWIKI-5902: Add support for relative links/images in included documents when they are generated by macros
  • XE-820: Livetable actions should be allowed without 'admin right' constraint
  • XAADMINISTRATION-201: Allow users with edit rights on a group's document to edit the group members

For developers

  • XWIKI-4322: Add a "cache" macro
  • XWIKI-5918: Impossible to override XSLT documents used in the PDF export process
  • XWIKI-5923: Page names containing [ or ] break the REST search results
  • XWIKI-4802: Add MetaData Block/Events to allow specifying meta data to XDOM/Listeners
  • XWIKI-5942: Introduce new filesystem based attachment storage
  • XSKINX-42: Deleting an SSX objects from a document prevents skin objects to be used on demand in that document
  • XAADMINISTRATION-212: Move the ConfigurableClass macros in a macro document, so that they can be reused
  • Various upgrades: JAXB 2.2.2, restlet 1.1.10, Groovy 1.7.7, Jython 2.5.2rc3

Translations

  • The following translations have been updated: fr, sv, ca, cs, de, es, gl, lv, ro, ru, sk, uk, vi, zh_tw

Experimental Filesystem Attachment Storage

Storage isn't flashy and it isn't exciting, as a user you only have to think about it when it breaks.
Filesystem attachment storage provides you with a means to store large attachments. All data is streamed
from the upload to the filesystem without being held in memory on the way through.

This means that the only limit on the size of attachments which can be stored is the size of your hard disk.

bigattach.png

Practically, this was tested using a 1GB attachment which uploaded with no problem. A 4GB attachment failed
but the exception message suggests the web browser is to blame.

Set up

To try this out for yourself, you will need a copy of XWiki 3.0M2.
Download the 5 parts of the filesystem storage:

Development is still progressing and these links will always point to the latest versions of the files so check back from time to time. 

Place these files in your xwiki/WEB-INF/lib directory.

Then make the following changes to your xwiki.cfg file:
Under the "Storage" section:

#-# The attachment storage.
xwiki.store.attachment.hint=file

#-# The attachment versioning storage. Use 'void' to disable attachment versioning.
xwiki.store.attachment.versioning.hint=file

#-# Whether the attachment recycle bin feature is activated or not
storage.attachment.recyclebin=0

Then start your wiki and as Admin, open this page:
<your site>/xwiki/bin/edit/XWiki/XWikiPreferences?editor=object

Scroll down until you find:
Maximum Upload Size
and change that number to something huge like:
99999999999999999 emoticon_wink
Press save at the bottom of the page.

Now go on and upload your giant attachments.

An attachment recycle bin store is in the works but remains unfinished, the existing code should work with the old recycle bin (and it's memory consumption issues) but as of this writing, there exists a bug in the conversion from the new format to the old.
Without a recycle bin store, deletion of attachments is final, rolling back a document will not bring the attachments back.

Known issues

Test Report

You can check the manual test report to learn about what was tested and the results on various browsers.

Backward Compatibility and Migration Notes

General Notes

If you're running in a multiwiki setup you'll also need to define the property xwiki.store.migration.databases=all to your xwiki.cfg file or explicitly name all databases to be migrated as in xwiki.store.migration.databases=db1,db2,....

You may also want to import the default wiki XAR in order to benefit from the improvements listed above.

Always make sure you compare your xwiki.cfg file with the newest version since some configuration parameters were added. Note 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.

API Breakages

The following xwiki-core APIs were modified since XWiki Enterprise 2.7:

ERROR: 7002: com.xpn.xwiki.api.XWiki: Method 'public java.lang.Object getExoPortalService(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWiki: Method 'public java.lang.Object getExoService(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWiki: Method 'public java.lang.Object getPortalService(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWiki: Method 'public java.lang.Object getService(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWikiCompatibilityAspect: Method 'public java.lang.Object ajc$interMethod$com_xpn_xwiki_api_XWikiCompatibilityAspect$com_xpn_xwiki_api_XWiki$getPortalService(com.xpn.xwiki.api.XWiki, java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWikiCompatibilityAspect: Method 'public java.lang.Object ajc$interMethod$com_xpn_xwiki_api_XWikiCompatibilityAspect$com_xpn_xwiki_api_XWiki$getService(com.xpn.xwiki.api.XWiki, java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWikiCompatibilityAspect: Method 'public java.lang.Object ajc$interMethodDispatch1$com_xpn_xwiki_api_XWikiCompatibilityAspect$com_xpn_xwiki_api_XWiki$getPortalService(com.xpn.xwiki.api.XWiki, java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWikiCompatibilityAspect: Method 'public java.lang.Object ajc$interMethodDispatch1$com_xpn_xwiki_api_XWikiCompatibilityAspect$com_xpn_xwiki_api_XWiki$getService(com.xpn.xwiki.api.XWiki, java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public byte[] convertToStrictXHtml(byte[], com.xpn.xwiki.XWikiContext)' has been removed
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public java.lang.String convertToStrictXHtml(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public byte[] convertXHtmlToXMLFO(byte[], com.xpn.xwiki.XWikiContext)' has been removed
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public java.lang.String convertXHtmlToXMLFO(java.lang.String, com.xpn.xwiki.XWikiContext)' has been removed
ERROR: 7005: com.xpn.xwiki.pdf.api.PdfExport: Parameter 3 of 'public void export(com.xpn.xwiki.doc.XWikiDocument, java.io.OutputStream, int, com.xpn.xwiki.XWikiContext)' has changed its type to com.xpn.xwiki.pdf.api.PdfExport$ExportType
ERROR: 7005: com.xpn.xwiki.pdf.api.PdfExport: Parameter 3 of 'public void exportHtml(java.lang.String, java.io.OutputStream, int, com.xpn.xwiki.XWikiContext)' has changed its type to com.xpn.xwiki.pdf.api.PdfExport$ExportType
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public void exportXHtml(byte[], java.io.OutputStream, int, com.xpn.xwiki.XWikiContext)' has been removed
ERROR: 7006: org.xwiki.rendering.macro.box.AbstractBoxMacro: Return type of method 'protected org.xwiki.rendering.internal.macro.box.MacroContentParser getMacroContentParser()' has been changed to org.xwiki.rendering.internal.macro.MacroContentParser
ERROR: 8001: org.xwiki.rendering.block.AbstractFatherBlock: Class org.xwiki.rendering.block.AbstractFatherBlock removed
ERROR: 7012: org.xwiki.rendering.block.Block: Method 'public java.lang.String getParameter(java.lang.String)' has been added to an interface
ERROR: 7012: org.xwiki.rendering.block.Block: Method 'public java.util.Map getParameters()' has been added to an interface
ERROR: 7012: org.xwiki.rendering.block.Block: Method 'public void setParameter(java.lang.String, java.lang.String)' has been added to an interface
ERROR: 7012: org.xwiki.rendering.block.Block: Method 'public void setParameters(java.util.Map)' has been added to an interface
ERROR: 4001: org.xwiki.rendering.block.BulletedListBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.BulletedListBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.DefinitionDescriptionBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.DefinitionDescriptionBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.DefinitionListBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.DefinitionListBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.DefinitionTermBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.DefinitionTermBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 8001: org.xwiki.rendering.block.FatherBlock: Class org.xwiki.rendering.block.FatherBlock removed
ERROR: 4001: org.xwiki.rendering.block.FormatBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.FormatBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.GroupBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.GroupBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.HeaderBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.HeaderBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.LinkBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.LinkBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.ListItemBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.ListItemBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.MacroMarkerBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.MacroMarkerBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.NumberedListBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.NumberedListBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.ParagraphBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.ParagraphBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.QuotationBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.QuotationBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.QuotationLineBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.QuotationLineBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.SectionBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.SectionBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.TableBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.TableBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.TableCellBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.TableCellBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.TableHeadCellBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.TableHeadCellBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.TableRowBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.TableRowBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 4001: org.xwiki.rendering.block.XDOM: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
ERROR: 5001: org.xwiki.rendering.block.XDOM: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
ERROR: 7005: org.xwiki.rendering.block.XDOM: Parameter 2 of 'public XDOM(java.util.List, java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.CompositeListener: Parameter 1 of 'public void beginDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.CompositeListener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.Listener: Parameter 1 of 'public void beginDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7012: org.xwiki.rendering.listener.Listener: Method 'public void beginMetaData(org.xwiki.rendering.listener.MetaData)' has been added to an interface
ERROR: 7005: org.xwiki.rendering.listener.Listener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7012: org.xwiki.rendering.listener.Listener: Method 'public void endMetaData(org.xwiki.rendering.listener.MetaData)' has been added to an interface
ERROR: 7005: org.xwiki.rendering.listener.QueueListener: Parameter 1 of 'public void beginDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.QueueListener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.WrappingListener: Parameter 1 of 'public void beginDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.WrappingListener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.AbstractChainingListener: Parameter 1 of 'public void beginDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.AbstractChainingListener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.BlockStateChainingListener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.ConsecutiveNewLineStateChainingListener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener: Parameter 1 of 'public void beginDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.LookaheadChainingListener: Parameter 1 of 'public void beginDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.LookaheadChainingListener: Parameter 1 of 'public void endDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7005: org.xwiki.rendering.listener.chaining.TextOnNewLineStateChainingListener: Parameter 1 of 'public void beginDocument(java.util.Map)' has changed its type to org.xwiki.rendering.listener.MetaData
ERROR: 7002: org.xwiki.rendering.syntax.SyntaxType: Method 'public java.lang.String toIdString()' has been removed
ERROR: 7012: org.xwiki.bridge.DocumentModelBridge: Method 'public org.xwiki.rendering.syntax.Syntax getSyntax()' has been added to an interface
ERROR: 7005: org.xwiki.properties.ConverterManager: Parameter 1 of 'public java.lang.Object convert(java.lang.Class, java.lang.Object)' has changed its type to java.lang.reflect.Type
ERROR: 7012: org.xwiki.properties.PropertyDescriptor: Method 'public java.lang.reflect.Type getPropertyType()' has been added to an interface
ERROR: 7005: org.xwiki.properties.converter.AbstractConverter: Parameter 1 of 'public java.lang.Object convert(java.lang.Class, java.lang.Object)' has changed its type to java.lang.reflect.Type
ERROR: 7005: org.xwiki.properties.converter.Converter: Parameter 1 of 'public java.lang.Object convert(java.lang.Class, java.lang.Object)' has changed its type to java.lang.reflect.Type
ERROR: 7012: org.xwiki.officeimporter.openoffice.OpenOfficeConverter: Method 'public boolean isMediaTypeSupported(java.lang.String)' has been added to an interface

The following XWiki GWT APIs were modified since XWiki Enterprise 2.7:

ERROR: 6011: org.xwiki.gwt.user.client.ui.rta.RichTextArea: Field DISABLED has been removed, but it was previously a constant
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.RichTextEditorController: Method 'protected void initTextArea()' has been removed
ERROR: 6011: org.xwiki.gwt.wysiwyg.client.plugin.color.ColorCell: Field SELECTED_STYLE_NAME has been removed, but it was previously a constant
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.plugin.color.ColorPicker: Method 'public java.lang.String convertToHex(java.lang.String)' has been removed
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.plugin.color.ColorPlugin: Method 'protected org.xwiki.gwt.user.client.ui.rta.cmd.Executable getBackColorExecutable()' has been removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.color.MozillaColorPlugin: Class org.xwiki.gwt.wysiwyg.client.plugin.color.MozillaColorPlugin removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.color.exec.BackColorExecutable: Class org.xwiki.gwt.wysiwyg.client.plugin.color.exec.BackColorExecutable removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.color.exec.HiliteColorExecutable: Class org.xwiki.gwt.wysiwyg.client.plugin.color.exec.HiliteColorExecutable removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.submit.exec.EnableExecutable: Class org.xwiki.gwt.wysiwyg.client.plugin.submit.exec.EnableExecutable removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.submit.exec.ResetExecutable: Class org.xwiki.gwt.wysiwyg.client.plugin.submit.exec.ResetExecutable removed
ERROR: 6004: org.xwiki.gwt.dom.client.Style: Changed type of field BACKGROUND_COLOR from java.lang.String to org.xwiki.gwt.dom.client.Property

Get Connected