Wiki source code of Architecture

Last modified by Simon Urli on 2023/10/10

Hide last authors
Vincent Massol 4.2 1 {{box cssClass="floatinginfobox" title="**Contents**"}}
2 {{toc/}}
3 {{/box}}
4
Vincent Massol 6.1 5 = What is XWiki? =
Vincent Massol 5.1 6
Simon Urli 21.3 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.
Vincent Massol 5.1 8
Vincent Massol 10.1 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
Vincent Massol 13.2 11 {{image reference="traditional.png" width="650px"/}}
Vincent Massol 10.1 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
Vincent Massol 13.2 15 {{image reference="morphing.png" width="650px"/}}
Vincent Massol 10.1 16
17 This approach has several advantages:
18
19 * Works from day one, immediate feedbacks
Steve Nieves 20.4 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.
Vincent Massol 10.1 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
Vincent Massol 6.3 25 = General Architecture =
Vincent Massol 1.1 26
Vincent Massol 6.1 27 Architecture Concepts:
Vincent Massol 8.1 28
Vincent Massol 1.1 29 * XWiki is a webapp that is deployed into a [[Servlet Container>>http://en.wikipedia.org/wiki/Web_container]].
Vincent Massol 1.2 30 * XWiki is made of [[Extensions>>extensions:Extension.WebHome]].
Vincent Massol 1.1 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.
Vincent Massol 20.2 36 * XWiki Standard is a generic Flavor that allow users to collaboratively author content.
Steve Nieves 21.1 37 * There are 2 types of Extensions (and it's possible to extend Extension Manager to support other types):
Vincent Massol 1.1 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
Vincent Massol 14.3 44 {{image reference="container.png" width="650px"/}}
Vincent Massol 14.2 45
Vincent Massol 1.1 46 = Integrating XWiki =
47
Vincent Massol 2.1 48 There are two options for integrating XWiki into your environment:
Vincent Massol 8.1 49
Simon Urli 21.3 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}}).
Vincent Massol 1.1 52
53 = Extending XWiki =
54
Vincent Massol 3.1 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]].
Vincent Massol 2.1 56
Vincent Massol 3.1 57 However if there's no Extension for what you wish to achieve, here are main options:
Vincent Massol 8.1 58
Simon Urli 21.3 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.
Vincent Massol 3.1 63 * [[Create or modify Skin Themes>>extensions:Extension.Flamingo Theme Application]].
Simon Urli 21.3 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]].
Vincent Massol 3.1 66
Simon Urli 21.3 67 Check the [[Developer Guide>>xwiki:Documentation.DevGuide.WebHome]] to learn about all this and more.

Get Connected