Wiki source code of Architecture

Last modified by Simon Urli on 2023/10/10

Show last authors
1 {{box cssClass="floatinginfobox" title="**Contents**"}}
2 {{toc/}}
3 {{/box}}
4
5 = What is XWiki? =
6
7 XWiki is a [[Second Generation Wiki>>xwiki:Main.SecondGenerationWiki]] and as such it's a full-fledged wiki but it's also a **runtime platform for developing collaborative web applications**. It's very versatile and you can modify any part of the XWiki runtime to match your requirements.
8
9 When you use a traditional development language such as Java, Python, Perl, etc you start from scratch and assemble building blocks to create the application you wish:
10
11 {{image reference="traditional.png" width="650px"/}}
12
13 XWiki takes a different approach: it's already a running application (we call it a "runtime platform") and you can tune the various modules it's made of to morph this runtime into your target application: you configure existing modules, you remove some, you add some, till you get what you want.
14
15 {{image reference="morphing.png" width="650px"/}}
16
17 This approach has several advantages:
18
19 * Works from day one, immediate feedbacks
20 * Iterative, Need-based development: You have something working from day one and you can have users using it right away, and modify it as you see needs emerge or as users request features, at the rhythm you wish.
21 * Continuous Delivery: Tuning it, adding new modules, removing some other, are all operations that you can do live on a running XWiki. Of course you could have 2 XWiki instances: a staging one and a production one, and copy from one to another if you want to control your changes (and put changes in a SCM).
22 * Work collaboratively on creating applications: Since everything is done in wiki pages, designers can style while devs create logic.
23 * Efficient: what you get with XWiki is akin to what you get when you edit content in a WYSIWYG editor: fast productivity since you immediately see the results of your actions (no need to compile, deploy, etc).
24
25 = General Architecture =
26
27 Architecture Concepts:
28
29 * XWiki is a webapp that is deployed into a [[Servlet Container>>http://en.wikipedia.org/wiki/Web_container]].
30 * XWiki is made of [[Extensions>>extensions:Extension.WebHome]].
31 * Some Extensions are Core Extensions and they are required for XWiki to execute properly.
32 * Other Extensions can be installed into a running XWiki installation to provide additional features.
33 * The [[Extension Manager>>extensions:Extension.Extension Manager Application]] is a Core Extension that allows installing, upgrading or removing other Extensions.
34 * An XWiki runtime is thus made of Core Extensions + non-Core ones.
35 * A set of Extensions working together to achieve a goal is called a Flavor.
36 * XWiki Standard is a generic Flavor that allow users to collaboratively author content.
37 * There are 2 types of Extensions (and it's possible to extend Extension Manager to support other types):
38 ** Extensions containing wiki pages. They are packaged as XAR files (a ZIP file with some metadata).
39 ** Extensions containing Java classes. They are packaged as JAR files.
40 * An Extension can depend on other Extensions. A Flavor is itself a top level Extension that depends on several other Extensions.
41
42 The full list of available Extensions can be seen on the [[Extensions Wiki>>extensions:Extension.WebHome]].
43
44 {{image reference="container.png" width="650px"/}}
45
46 = Integrating XWiki =
47
48 There are two options for integrating XWiki into your environment:
49
50 * Accessing your environment (other software for example) from XWiki and displaying information inside XWiki's UI. This can be achieved by [[scripting>>xwiki:Documentation.DevGuide.Scripting]] inside Wiki pages or by developing Java code. See also the following [[Integration Extensions>>extensions:Main.Tags||queryString="do=viewTag&tag=integration"]].
51 * Access XWiki's content (wiki pages, user data, etc) from other software by accessing XWiki remotely using [[REST APIs>>xwiki:Documentation.UserGuide.Features.XWikiRESTfulAPI]] (It's also possible to use [[XMLRPC>>extensions:Extension.XML-RPC Integration]] or {{scm path="xwiki-contrib/xwiki-platform-gwt/xwiki-platform-gwt-api/src/main/java/com/xpn/xwiki/gwt/api/server/XWikiServiceImpl.java"}}GWT{{/scm}}).
52
53 = Extending XWiki =
54
55 XWiki being a development platform for web applications there are plenty of ways to extend XWiki. The most obvious one is to [[look for an Extension and install it>>extensions:Extension.WebHome]].
56
57 However if there's no Extension for what you wish to achieve, here are main options:
58
59 * Use [[scripts>>xwiki:Documentation.DevGuide.Scripting]] in wiki pages and access all APIs made available by other Extensions. This allows you to develop Applications in your wiki. Make sure to check the [[FAQ Tutorial>>xwiki:Documentation.DevGuide.FAQTutorial]] which shows how to do this.
60 * Develop some Java code to make available [[Java APIs>>xwiki:Documentation.DevGuide.API]] which can then be accessed from wiki pages using Scripting. [[XWiki uses a Component-approach to develop Java code>>xwiki:Documentation.DevGuide.WritingComponents]]. It's also possible to override any existing XWiki Component with your own implementation, thus changing the default behavior of whatever portion of XWiki that you wish.
61 * [[Create some Macros>>xwiki:Documentation.DevGuide.WritingMacros]] to use in your wiki pages.
62 * [[Create new Skins>>xwiki:Documentation.DevGuide.Tutorials.Skins]] or modify existing one to match your needs.
63 * [[Create or modify Skin Themes>>extensions:Extension.Flamingo Theme Application]].
64 * Use [[Skin Extensions>>xwiki:Documentation.DevGuide.Tutorials.SkinExtensionsTutorial]] to customize the CSS or JavaScript used to display wiki pages.
65 * Configure what is displayed in various locations of the screen by contributing content for existing [[UI Extension Points>>xwiki:Documentation.DevGuide.ExtensionPoint.WebHome]].
66
67 Check the [[Developer Guide>>xwiki:Documentation.DevGuide.WebHome]] to learn about all this and more.

Get Connected