Wiki source code of Release Notes for XWiki Enterprise 4.0
Last modified by Thomas Mortagne on 2023/10/13
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | (% style="font-size:x-large;" %) | ||
2 | |||
3 | {{error}} | ||
4 | We've found an important issue in this release with our automatic data migration when upgrading from a version earlier than 4.0. Specifically the migration may fail when migrating wikis having stats, see [[XWIKI-7976>>https://jira.xwiki.org/browse/XWIKI-7976]] and when migrating DBs that was migrated from MySQL MyISAM previously, see [[XWIKI-7985>>https://jira.xwiki.org/browse/XWIKI-7985]]. In addition we've also realized that the migration process can be slow on large XWiki databases and we have speed up the process. All these issue are fixed in release 4.1.3. | ||
5 | {{/error}} | ||
6 | |||
7 | {{warning}}Before upgrading to this version, be sure to have a working backup of your database(s).{{/warning}} | ||
8 | |||
9 | {{box cssClass="floatinginfobox" title="**Contents**"}} | ||
10 | {{toc/}} | ||
11 | {{/box}} | ||
12 | |||
13 | This is the first release of the 4.x cycle ([[Roadmap>>Main.Roadmap]]). This release brings reduced document database id collision, a new LDAP administration UI and quite a few improvements and bug fixes on Extension Manager, annotations, App Within Minutes and user profiles. | ||
14 | |||
15 | = New and Noteworthy (since XWiki Enterprise 3.5 version) = | ||
16 | |||
17 | Here are notable new features and improvements. For the full list of issues (including statistics) see the [[JIRA Dashboard>>https://jira.xwiki.org/secure/Dashboard.jspa?selectPageId=10891]]. | ||
18 | |||
19 | == Extension Manager improvements == | ||
20 | |||
21 | === Extension Manager === | ||
22 | |||
23 | We improved the way the list of dependencies of an extension is displayed. You can now see the status of each dependency. In the following image you can see for instance that the Commons IO dependency is in conflict with the version of Commons IO bundled with XWiki Enterprise. | ||
24 | |||
25 | {{image reference="ReleaseNotesXWikiEnterprise40M2@EM-dependencies.png"/}} | ||
26 | |||
27 | The extension status is also displayed when you view the extension separately. For instance, if you click on the Commons IO dependency link to get more details, you'll see the incompatibility message displayed as below: | ||
28 | |||
29 | {{image reference="ReleaseNotesXWikiEnterprise40M2@EM-status.png"/}} | ||
30 | |||
31 | We also improved the search bar to allow users to search in different types of extensions. See below the result for searching "html" in core extensions, i.e. extensions bundled with XWiki Enterprise. | ||
32 | |||
33 | {{image reference="ReleaseNotesXWikiEnterprise40M2@EM-search.png"/}} | ||
34 | |||
35 | The install/uninstall plan and log are now displayed in a tab inside the details section of an extension. We plan to make the new Progress tab display the install/uninstall status in real time in the near future. | ||
36 | |||
37 | {{image reference="ReleaseNotesXWikiEnterprise40RC1@EM-progressTab.png"/}} | ||
38 | |||
39 | === XWiki Repository === | ||
40 | |||
41 | * Added a button to update an imported extension | ||
42 | * It's now possible to extend an Extension sheet with custom informations. For example http://extensions.xwiki.org adds "Bundled with" and "Compatibility" fields. | ||
43 | |||
44 | == Annotations merged with Comments by default == | ||
45 | |||
46 | Starting with version 4.0M2, annotations have been merged by default with comments. More specifically, this means: | ||
47 | |||
48 | * You can now reply to an Annotation (threaded annotations) | ||
49 | * The Annotations tab has been removed and annotations are now located in the Comments tab where you can see both annotations and comments | ||
50 | * The default annotation class is now ##XWiki.XWikiComments## instead of AnnotationCode.AnnotationClass. It also means we've modified the ##XWiki.XWikiComments## class by adding new fields to support annotations (See [[Migration Notes>>||anchor="HAnnotationsApplication"]] below). | ||
51 | |||
52 | {{image reference="ReleaseNotesXWikiEnterprise40M2@annotations-merged-with-comments-screenshot.png"/}} | ||
53 | |||
54 | == App Within Minutes improvements == | ||
55 | |||
56 | The actions pane on the application home page now provides a link to edit and delete the application. Of course you need to have the proper rights to be able to see the links. | ||
57 | |||
58 | {{image reference="ReleaseNotesXWikiEnterprise40M2@AWM-appActions.png"/}} | ||
59 | |||
60 | We also added an Actions column to the applications live table to be able to manage applications directly from the App Within Minutes home page. Again, you need to have the proper rights to be able to see the actions. | ||
61 | |||
62 | {{image reference="ReleaseNotesXWikiEnterprise40M2@AWM-appsLiveTable-actionsColumn.png"/}} | ||
63 | |||
64 | == User profile customization == | ||
65 | |||
66 | An admin can now configure which information is displayed in the user profile (the "Profile" tab of a user's profile page). A new section has been added in the Administration where an admin can configure which fields of the ##XWiki.XWikiUsers## class to display. The admin still has to add the new fields to the class the old way, using the class editor for the page ##XWiki.XWikiUsers##, but he no longer needs to write any code. | ||
67 | |||
68 | {{image reference="ReleaseNotesXWikiEnterprise40M2@userProfileCustomizer-screenshot.png"/}} | ||
69 | |||
70 | == User directory improvements and user customized view == | ||
71 | |||
72 | The User Directory can now display, as columns, filterable and sortable properties of users, as opposed to the previous version where you just had a fixed column that displayed a composed name in the form "first_name last_name (profilePageID)". | ||
73 | |||
74 | In addition, each user can now customize his view over the User Directory by adding or removing columns, or resetting it to the default columns. | ||
75 | |||
76 | The default displayed columns are "first_name" and "last_name", and the unmodifiable columns (that will always be displayed as first columns) are "_avatar" and "doc.fullName". | ||
77 | |||
78 | {{image reference="ReleaseNotesXWikiEnterprise40M2@customizableUserDirectory-customize.png"/}} | ||
79 | |||
80 | {{info}} | ||
81 | In the near future, we're planning to allow Admins to customize globally the User Directory for all users too. | ||
82 | {{/info}} | ||
83 | |||
84 | == ColorThemes gradients customizable from ColorTheme Wizard == | ||
85 | |||
86 | In version [[3.4>>xwiki:ReleaseNotes.ReleaseNotesXWikiEnterprise34]] we deprecated the old default bundled ColorThemes (because of incompatible variable mix). In version 4.0 this is no longer the case, old default bundled ColorThemes (like [[Bordo>>extensions:Extension.Bordo ColorTheme]], [[Nature>>extensions:Extension.Nature ColorTheme]], etc.) are now being compatible with the 3.4 Colibri Skin changes. We fixed this by adding new gradient ColorThemes variables. All these gradient ColorTheme variables are now changeble from the ColorTheme Wizard. | ||
87 | |||
88 | {{image reference="ReleaseNotesXWikiEnterprise40M2@ColorThemeWizard.png"/}} | ||
89 | |||
90 | == LDAP administration UI == | ||
91 | |||
92 | An LDAP administration interface is now provided to make it easy to configure LDAP directly from the wiki (you had to edit the XWiki Configuration files before). See [[the module documentation>>extensions:Extension.LDAP Application]] for more information on this topic. | ||
93 | |||
94 | {{image reference="ReleaseNotesXWikiEnterprise40M2@admin-ldap-ui.png"/}} | ||
95 | |||
96 | == New IRC Bot Application == | ||
97 | |||
98 | The IRC Bot Application has been completely rewritten from the grounds up for better maintainability, improved speed and more features as described in the [[Documentation for the new IRC Bot Application>>extensions:Extension.IRC Bot Application]]. | ||
99 | |||
100 | {{image reference="ReleaseNotesXWikiEnterprise40M2@ircbotapplication.png"/}} | ||
101 | |||
102 | == Miscellaneous == | ||
103 | |||
104 | * There's now a link to the [[Getting Started Guide>>Documentation.UserGuide.GettingStarted]] on the XWiki Enterprise home page. | ||
105 | |||
106 | = For developers = | ||
107 | |||
108 | == Extension Manager moved to commons == | ||
109 | |||
110 | Everything not specifically related to XWiki is now part of xwiki-commons. That means that anyone can get all Extension Manager features (easy live JAR installation/uninstallation from remote repositories, dependency management, etc.) in any Java application. | ||
111 | |||
112 | == Classloader module moved to commons == | ||
113 | |||
114 | Mostly been moved as Extension Manager dependency but also useful on it own as a tool to dynamically add new URLs in a classloader at runtime. | ||
115 | |||
116 | == New Job module == | ||
117 | |||
118 | The code to execute a task in background and provide related progress and isolated log has been extracted from Extension Manager and is now in its own module. | ||
119 | |||
120 | See [[Job Module>>extensions:Extension.Job Module]]. | ||
121 | |||
122 | == Component related improvements == | ||
123 | |||
124 | See [[Job Component>>extensions:Extension.Component Module]]. | ||
125 | |||
126 | === Role moved from Class to Type === | ||
127 | |||
128 | In order to support parameterized role like DocumentReferenceResolver<String>, all the APIs of ComponentManager and Component descriptors have been changed to take Type instead of Class. All the old APIs are still available and working, but have been deprecated. | ||
129 | |||
130 | === ComponentRole is deprecated === | ||
131 | |||
132 | You should now use @Role instead of @ComponentRole. The difference is that when using @Role the generic parameters will be taken into account as part of the role while with @ComponentRole the role stays the Class of the component role so be careful when you do this change, it might break everything if you don't want to take into account parameters (that's why a new annotation has been introduced instead of changing the behavior of ComponentRole). | ||
133 | |||
134 | === References resolver/serializer and Provider now support parameter type as part of the role === | ||
135 | |||
136 | This mean that declaring or injecting a such component no longer require any hint unless you want to provide/inject a variant for the same type. | ||
137 | |||
138 | Here are some example. Instead of: | ||
139 | |||
140 | {{code language="java"}} | ||
141 | @Inject | ||
142 | @Named("reference/default") | ||
143 | private DocumentReferenceResolver<EntityReference> resolver | ||
144 | |||
145 | @Inject | ||
146 | @Named("reference/current") | ||
147 | private DocumentReferenceResolver<EntityReference> resolver | ||
148 | |||
149 | @Inject | ||
150 | @Named("sometypeprovider") | ||
151 | private Provider<SomeType> resolver | ||
152 | {{/code}} | ||
153 | |||
154 | you will write | ||
155 | |||
156 | {{code language="java"}} | ||
157 | @Inject | ||
158 | private DocumentReferenceResolver<EntityReference> resolver | ||
159 | |||
160 | @Inject | ||
161 | @Named("current") | ||
162 | private DocumentReferenceResolver<EntityReference> resolver | ||
163 | |||
164 | @Inject | ||
165 | private Provider<SomeType> resolver | ||
166 | {{/code}} | ||
167 | |||
168 | All reference resolver and serializer provide static variables with the Type for both String and EntityReference. For example you can write: | ||
169 | |||
170 | {{code language="java"}} | ||
171 | DocumentReferenceResolver<EntityReference> resolver = componentManager.getInstance(DocumentReferenceResolver.TYPE_REFERENCE, "current") | ||
172 | {{/code}} | ||
173 | |||
174 | == New Velocity tool to serialize Java objects to JSON format == | ||
175 | |||
176 | We introduced a new Velocity tool to be able to serialize Java objects to the JSON format. Checkout the [[documentation>>doc:extensions:Extension.Velocity Module||anchor="HJSONTool"]]. Here's an example that shows how to serialize a Map object: | ||
177 | |||
178 | {{code}} | ||
179 | {{velocity}} | ||
180 | #set($map = {'name': 'xwiki', 'values': [1, 2, 3], 'enabled': true}) | ||
181 | $jsontool.serialize($map) | ||
182 | {{/velocity}} | ||
183 | {{/code}} | ||
184 | |||
185 | The result is: | ||
186 | |||
187 | {{code language="none"}} | ||
188 | {"name":"xwiki","values":[1,2,3],"enabled":true} | ||
189 | {{/code}} | ||
190 | |||
191 | We also refactored ##XWiki.LiveTableResultsMacros## page to generate the live table JSON in memory using a Map, which is serialized in the end using the new JSON tool. This makes it easier to customize the live table JSON. For example this is how the JSON for the AppWithinMinutes applications live table is generated: | ||
192 | |||
193 | {{code}} | ||
194 | {{include document="XWiki.LiveTableResultsMacros" /}} | ||
195 | |||
196 | {{velocity}} | ||
197 | #if($xcontext.action == 'get' && "$!{request.outputSyntax}" == 'plain') | ||
198 | $response.setContentType('application/json') | ||
199 | #set($map = {}) | ||
200 | #gridresult_buildJSON("$!request.classname" $request.collist.split(',') $map) | ||
201 | ## Change the URL and permission for the edit and delete actions: | ||
202 | ## * edit action must trigger the AppWithinMinutes wizard. | ||
203 | ## * delete action must delete the application space. | ||
204 | #foreach($row in $map.get('rows')) | ||
205 | #set($editQueryString = "appName=$escapetool.url($row.get('doc_space'))") | ||
206 | #set($discard = $row.put('doc_edit_url', $xwiki.getURL('AppWithinMinutes.CreateApplication', 'view', $editQueryString))) | ||
207 | #if($row.get('doc_hasdelete')) | ||
208 | ## Deleting an application requires space administration rights. | ||
209 | #set($discard = $row.put('doc_hasdelete', $xwiki.hasAccessLevel('admin', $xcontext.user, "${row.get('doc_space')}.WebPreferences"))) | ||
210 | #end | ||
211 | #set($rowDocRef = $services.model.createDocumentReference($row.get('doc_wiki'), $row.get('doc_space'), $row.get('doc_name'))) | ||
212 | #set($discard = $row.put('doc_delete_url', $xwiki.getURL($rowDocRef, 'deletespace', ''))) | ||
213 | #end | ||
214 | $jsontool.serialize($map) | ||
215 | #end | ||
216 | {{/velocity}} | ||
217 | {{/code}} | ||
218 | |||
219 | See [[extensions:Extension.Velocity Module||anchor="HJSONTool"]]. | ||
220 | |||
221 | == Class reference always local == | ||
222 | |||
223 | The class reference is now stored as a local reference in the BaseObject/BaseCollection which means that like in the storage you can't assign a class coming from another wiki to an xobject which was causing some issue when copying wikis. You can still provide absolute reference but the wiki reference will be automatically removed. | ||
224 | |||
225 | == New Rights Implementation (Experimental) == | ||
226 | |||
227 | A new experimental security authorization module is now available and is aimed to replace the old right service API during the 4.x cycle. This new module provide its public API from the ##org.xwiki.security.authorization.AuthorizationManager## component. The whole authorization API has been rewritten from scratch with the following goals in mind: | ||
228 | |||
229 | * better performance by providing a ##SecurityCache## to cache both security rules and security access decisions. | ||
230 | * allow extending the list of ##Right## by registering new rights with a declarative description. | ||
231 | * allow customising the way the authorization decision are made, by providing a custom ##AuthorizationSettler## component. | ||
232 | * stay independent from ##oldcore## and use proper interfaces to made the authorization process as much as possible independent from the rest. | ||
233 | |||
234 | A bridge between this new security authorization module and the old implementation is also provided in ##org.xwiki.security.authorization.internal.XWikiCachingRightService## which could be used in xwiki.cfg to enable this new authorization manager as the default one. The new module could also be used side by side with the old implementation. | ||
235 | |||
236 | The default implementation of the right settler, being written based on a fully restructured way to evaluate rights declaratively, has some subtle differences in the way security rules (right Xobjects) are interpreted and authorization decisions are made. Apart from improved consistency and yet to be discovered issues, the major differences still needing improvements are: | ||
237 | |||
238 | * on an empty database, the guest user does not receive admin rights, and you need to enable and use superadmin to install an initial XAR. | ||
239 | * in a multiwiki setup, user groups evaluated during decision are limited to those coming from the user wiki and those of the wiki of the targeted entity are not taken into account. | ||
240 | |||
241 | The full documentation of this new module, in particular the way it now evaluate rights declaratively and allow augmenting and customising authorization decision is yet to be written. The new module provide a large Javadoc as a reference in the meantime. For the big picture, the new right service is now named ##AuthorizationManager##. Internally, it manipulates ##SecurityReference## (as well as ##UserSecurityReference## and ##GroupSecurityReference##, to represent entities, user and group), ##SecurityRule## (representing a right object) and ##SecurityAccess## (representing an access level in the old nomenclature), which are stored in a ##SecurityCache## using ##SecurityRuleEntry## (a set of rules) and ##SecurityAccessEntry## (the access of a given user). The ##AuthorizationManager## delegate cache management to a ##SecurityCacheLoader## which loads rules using a ##SecurityRuleLoader##; and delegate itself the access decision for a given user and a set of rules to an ##AuthorizationSettler##. This last one could be overridden to provide specific decision that could not be done in declarative mode. | ||
242 | |||
243 | == New technical content hiding system == | ||
244 | |||
245 | {{warning}} | ||
246 | In this release we have only implemented the content hiding **mechanism**. At the moment, using it will **not have any effect on the default UI** you see (no documents will be filtered). We will gradually update all places listing documents in the UI to use the new mechanism in XWiki Enterprise 4.1. That said, if you're a developer we encourage you [[to test out the new content filtering API>>extensions:Extension.Query Module]]. | ||
247 | {{/warning}} | ||
248 | |||
249 | The basic support for hidden documents introduced in XWiki Enterprise 1.7 has been reimplemented differently (the previous implementation was not allowing anyone, including Admins, to see hidden documents!). The new logic is currently as follows (it'll be discussed and probably modified in XWiki Enterprise 4.1): | ||
250 | |||
251 | * Simple users never see hidden documents | ||
252 | * For advanced users, it is now possible to specify that a document should be hidden when editing the document (only //wiki// or //wysiwyg// edit modes):((( | ||
253 | {{image reference="ReleaseNotesXWikiEnterprise40RC1@hidden.png"/}} | ||
254 | |||
255 | And now there's a new setting in the user profiles, letting users chose if they want hidden documents to appear in search results or not: | ||
256 | |||
257 | {{image reference="ReleaseNotesXWikiEnterprise40RC1@hiddenSettings.png"/}} | ||
258 | |||
259 | {{warning}} | ||
260 | As already mentioned above in warning, setting the Hidden configuration value will currently not have any effect on the default XWiki Enterprise pages since they're not calling the new filtering API yet (you'll need to wait for 4.1 for taht!). However it's supposed to work like this: | ||
261 | {{/warning}} | ||
262 | |||
263 | * If the user doesn't set explicitly the Hidden setting value in his profile, he won't see hidden documents by default. Thus seeing hidden documents is an explicit choice. | ||
264 | ))) | ||
265 | |||
266 | To test this feature do the following: | ||
267 | |||
268 | * Log as Admin on your wiki (or any user having edit rights) | ||
269 | * Create a Page, say in ##Sandbox.HiddenFeatureTest## and put the following content in wiki edition mode:((( | ||
270 | {{code}} | ||
271 | {{velocity}} | ||
272 | #set ($items = $services.query.xwql("where doc.name like 'S%'").setFilter("hidden").execute()) | ||
273 | There are $items.size() documents starting with 'S' | ||
274 | |||
275 | #foreach ($item in $items) | ||
276 | * [[$item]] | ||
277 | #end | ||
278 | {{/velocity}} | ||
279 | {{/code}} | ||
280 | ))) | ||
281 | * It'll print the number of matching documents (31 in a XWiki Enterprise 4.0 RC 1 with the default XAR) and the list of matching documents | ||
282 | * Then go to ##Main.Search## (for example), edit the page and check the Hidden checkbox and save | ||
283 | * Go back to the ##Sandbox.HiddenFeatureTest## page and verify there's one less document printed now (it should say 30 in a XWiki Enterprise 4.0 RC 1 with the default XAR) | ||
284 | * Then go to your user profile and select "Display Hidden Documents" to "Yes" | ||
285 | * Go back to the ##Sandbox.HiddenFeatureTest## page and verify it's listing all documents again (it should say 31 in a XWiki Enterprise 4.0 RC 1 with the default XAR) | ||
286 | |||
287 | == Miscellaneous == | ||
288 | |||
289 | * A new event ##ApplicationReadyEvent## is sent when the Application is ready to service requests. Event Listeners can now listen to this event. | ||
290 | * We've added a new [[Commons Text Module>>extensions:Extension.Text Module]] to contain XWiki-specific APIs related to text. | ||
291 | * We added some new ColorThemes variables: ##$theme.fieldGradientColor##, ##$theme.buttonPrimaryGradientColor##, ##$theme.buttonSecondaryGradientColor##, ##$theme.panelHeaderGradientColor##, ##$theme.panelCollapsedGradientColor##, ##$theme.menuGradientColor##, ##$theme.menuContentBackgroundColor##, ##$theme.menuContentLinkColor##, ##$theme.menuContentGradientColor##, ##$theme.submenuContentBackgroundColor## | ||
292 | |||
293 | == Upgrades == | ||
294 | |||
295 | The following dependencies have been upgraded: | ||
296 | |||
297 | * commons-codec 1.6 | ||
298 | * commons-configuration 1.8 | ||
299 | * commons-io 2.1 | ||
300 | * commons-net 3.1 | ||
301 | * HyperSQL 2.2.8 | ||
302 | * Infinispan 5.1.1 | ||
303 | * Junit 4.10 | ||
304 | * Maven Clover plugin 3.1.4 | ||
305 | * Selenium 2.20 | ||
306 | * Json-lib 2.4 | ||
307 | |||
308 | = Tested Browsers = | ||
309 | |||
310 | 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>>dev:Community.BrowserSupportStrategy]]): | ||
311 | |||
312 | |||
313 | {{browser name="firefox" version="12"/}} | ||
314 | |||
315 | {{browser name="firefox" version="3.6"/}} | ||
316 | |||
317 | {{browser name="chrome" version="18"/}} | ||
318 | |||
319 | {{browser name="iexplorer" version="8"/}} | ||
320 | |||
321 | {{browser name="iexplorer" version="9"/}} | ||
322 | |||
323 | |||
324 | = Tested Databases = | ||
325 | |||
326 | {{database name="hsqldb" version="2.2.8"/}} | ||
327 | |||
328 | {{database name="mysql" version="5.x"/}} | ||
329 | |||
330 | {{database name='oracle' version= '11.x'/}} | ||
331 | |||
332 | {{database name='postgresql' version= '9.x'/}} | ||
333 | |||
334 | |||
335 | = Known issues = | ||
336 | |||
337 | * [[Bugs we know about>>https://jira.xwiki.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=category+%3D+%22Top+Level+Projects%22+AND+issuetype+%3D+Bug+AND+resolution+%3D+Unresolved+ORDER+BY+updated+DESC]] | ||
338 | |||
339 | = Test Report = | ||
340 | |||
341 | You can check the [[manual test report>>TestReports.ManualTestReportXE40M1]] to learn about what was tested and the results on various browsers. | ||
342 | |||
343 | = Backward Compatibility and Migration Notes = | ||
344 | |||
345 | == General Notes == | ||
346 | |||
347 | {{info}} | ||
348 | If you're running in a multiwiki setup you'll also need to define the property //xwiki.store.migration.databases// in your //xwiki.cfg// file if you want to explicitly name some databases to be migrated as the default is now to migrate all databases. Database that are not migrated could not be accessed. | ||
349 | {{/info}} | ||
350 | |||
351 | You may also want to [[import the default wiki XAR>>Main.Download]] in order to benefit from all the improvements listed above. | ||
352 | |||
353 | {{warning}} | ||
354 | Always make sure you compare your ##xwiki.cfg## and ##xwiki.properties## files with the newest version since some configuration parameters were 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. | ||
355 | {{/warning}} | ||
356 | |||
357 | == Migration of database IDs == | ||
358 | |||
359 | You need to enable database migration (//xwiki.store.migration=1//) to upgrade existing databases to the new identifier format. | ||
360 | |||
361 | {{info}} | ||
362 | This is a major migration affecting almost all rows and relations in the database. I may takes a while before the wiki respond to your initial request when you are migrating a large database. The initial request may even timeout but the database migration continues in the background. | ||
363 | {{/info}} | ||
364 | |||
365 | {{warning}} | ||
366 | Avoid interrupting the database migration process, you can check the current progress of the database migration in the console output or the log file. The progress may be slow, so be patient during document id and object id conversion. | ||
367 | {{/warning}} | ||
368 | |||
369 | In case of interruption, the migration procedure could be restarted by restarting XWiki, and it will continue from where it has been interrupted. | ||
370 | |||
371 | {{warning}} | ||
372 | We have taken many precautions to provide a reliable migration procedure, but due to the large changes it made, and this release being an unstable one, you should be really careful and ensure that you keep an appropriate backup until you are sure that your data has been properly migrated. | ||
373 | {{/warning}} | ||
374 | |||
375 | If you have custom mapped classes used externally, be aware that all internal identifier are now full 64bits longs. | ||
376 | |||
377 | == Annotations Application == | ||
378 | |||
379 | After an upgrade, in order to switch to the new ##annotations-merged-with-comments## mode, you will have to update your settings. To do this, go to wiki Administration and: | ||
380 | * change the annotation class in ##Applications > Annotations > Annotation type settings > XWiki class defining annotations structure## from the old default ##AnnotationCode.AnnotationClass## to the new default ##XWiki.XWikiComments## | ||
381 | * disable the Annotations tab by setting ##Look and Feel > Page elements > Document metadata visibility > Show document annotations## to ##No## | ||
382 | |||
383 | If you were/are using a custom annotations class, other than the previously default AnnotationsCode.AnnotationsClass, in the annotations configuration then the merging-with-comments feature will not be available to you. What you can do is to enable back the Annotations tab by going to the Administration > Look and Feel > Page Elements and changing the value of "Show document annotations " from "No" to "Yes". Now you will still be able to use your custom annotations without being affected by the changes. | ||
384 | |||
385 | Also, a migration script will automatically convert all your existing default annotations (that are using the default AnnotationCode.AnnotationClass) to the new default class (XWiki.XWikiComments). After the migration, the new database version will be 40001. | ||
386 | |||
387 | == User profile customization == | ||
388 | |||
389 | If you have a customized user profile tab (you have edited the "XWiki.XWikiUserProfileSheet" page), pay attention when importing the default XAR. If you want keep your customization and don't use the new User Profile Customization UI, just skip the "XWiki.XW | ||
390 | |||
391 | == API Breakages == | ||
392 | |||
393 | The following APIs were modified since version 3.5: | ||
394 | |||
395 | {{code language="none"}} | ||
396 | org.xwiki.bridge.AttachmentName: Class org.xwiki.bridge.AttachmentName removed | ||
397 | org.xwiki.bridge.DocumentAccessBridge: Method 'public java.io.InputStream getAttachmentContent(org.xwiki.bridge.AttachmentName)' has been removed | ||
398 | org.xwiki.bridge.DocumentAccessBridge: Method 'public java.lang.String getAttachmentURL(org.xwiki.bridge.AttachmentName, boolean)' has been removed | ||
399 | org.xwiki.bridge.DocumentAccessBridge: Method 'public java.util.List getAttachmentURLs(org.xwiki.bridge.DocumentName, boolean)' has been removed | ||
400 | org.xwiki.bridge.DocumentAccessBridge: Method 'public java.util.List getAttachments(org.xwiki.bridge.DocumentName)' has been removed | ||
401 | org.xwiki.bridge.DocumentAccessBridge: Method 'public org.xwiki.bridge.DocumentName getCurrentDocumentName()' has been removed | ||
402 | org.xwiki.bridge.DocumentAccessBridge: Method 'public org.xwiki.model.reference.DocumentReference getCurrentUserReference()' has been added to an interface | ||
403 | org.xwiki.bridge.DocumentAccessBridge: Method 'public org.xwiki.bridge.DocumentModelBridge getDocument(org.xwiki.bridge.DocumentName)' has been removed | ||
404 | org.xwiki.bridge.DocumentAccessBridge: Method 'public org.xwiki.bridge.DocumentName getDocumentName(java.lang.String)' has been removed | ||
405 | org.xwiki.bridge.DocumentModelBridge: Method 'public org.xwiki.bridge.DocumentName getDocumentName()' has been removed | ||
406 | org.xwiki.bridge.DocumentName: Class org.xwiki.bridge.DocumentName removed | ||
407 | org.xwiki.gwt.user.client.ui.ListBox: Removed com.google.gwt.event.dom.client.KeyDownHandler from the set of implemented interfaces | ||
408 | org.xwiki.gwt.user.client.ui.ListBox: Removed com.google.gwt.event.dom.client.KeyPressHandler from the set of implemented interfaces | ||
409 | org.xwiki.gwt.user.client.ui.ListBox: Removed com.google.gwt.event.dom.client.KeyUpHandler from the set of implemented interfaces | ||
410 | org.xwiki.gwt.user.client.ui.ListBox: Method 'public void onKeyDown(com.google.gwt.event.dom.client.KeyDownEvent)' has been removed | ||
411 | org.xwiki.gwt.user.client.ui.ListBox: Method 'public void onKeyPress(com.google.gwt.event.dom.client.KeyPressEvent)' has been removed | ||
412 | org.xwiki.gwt.user.client.ui.ListBox: Method 'public void onKeyUp(com.google.gwt.event.dom.client.KeyUpEvent)' has been removed | ||
413 | org.xwiki.query.Query: Method 'public org.xwiki.query.QueryFilter getFilter()' has been added to an interface | ||
414 | org.xwiki.query.Query: Method 'public org.xwiki.query.Query setFilter(org.xwiki.query.QueryFilter)' has been added to an interface | ||
415 | org.xwiki.gwt.wysiwyg.client.plugin.line.IELinePlugin: Removed com.google.gwt.event.dom.client.KeyDownHandler from the set of implemented interfaces | ||
416 | org.xwiki.gwt.wysiwyg.client.plugin.line.IELinePlugin: Removed com.google.gwt.event.dom.client.KeyPressHandler from the set of implemented interfaces | ||
417 | org.xwiki.gwt.wysiwyg.client.plugin.line.IELinePlugin: Removed com.google.gwt.event.dom.client.KeyUpHandler from the set of implemented interfaces | ||
418 | org.xwiki.gwt.wysiwyg.client.plugin.line.IELinePlugin: Removed com.google.gwt.event.shared.EventHandler from the set of implemented interfaces | ||
419 | org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Removed com.google.gwt.event.dom.client.KeyDownHandler from the set of implemented interfaces | ||
420 | org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Removed com.google.gwt.event.dom.client.KeyPressHandler from the set of implemented interfaces | ||
421 | org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Removed com.google.gwt.event.dom.client.KeyUpHandler from the set of implemented interfaces | ||
422 | org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Removed com.google.gwt.event.shared.EventHandler from the set of implemented interfaces | ||
423 | org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Method 'public void onKeyDown(com.google.gwt.event.dom.client.KeyDownEvent)' has been removed | ||
424 | org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Method 'public void onKeyPress(com.google.gwt.event.dom.client.KeyPressEvent)' has been removed | ||
425 | org.xwiki.gwt.wysiwyg.client.plugin.line.LinePlugin: Method 'public void onKeyUp(com.google.gwt.event.dom.client.KeyUpEvent)' has been removed | ||
426 | org.xwiki.gwt.wysiwyg.client.plugin.list.ListBehaviorAdjuster: In method 'public ListBehaviorAdjuster()' the number of arguments has changed | ||
427 | org.xwiki.gwt.wysiwyg.client.plugin.list.ListBehaviorAdjuster: Method 'protected void dispatchKey(com.google.gwt.user.client.ui.Widget, int, org.xwiki.gwt.dom.client.Event)' has been removed | ||
428 | org.xwiki.gwt.wysiwyg.client.plugin.list.ListBehaviorAdjuster: Method 'public org.xwiki.gwt.user.client.ui.rta.RichTextArea getTextArea()' has been removed | ||
429 | org.xwiki.gwt.wysiwyg.client.plugin.list.ListBehaviorAdjuster: Method 'public void setTextArea(org.xwiki.gwt.user.client.ui.rta.RichTextArea)' has been removed | ||
430 | org.xwiki.gwt.wysiwyg.client.plugin.macro.exec.InsertExecutable: In method 'public InsertExecutable(org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroSelector)' the number of arguments has changed | ||
431 | org.xwiki.wysiwyg.server.WysiwygEditorConfiguration: Method 'public java.lang.Integer getHistorySize()' has been added to an interface | ||
432 | {{/code}} |