XWiki Architecture

The XWiki Ecosystem

There are various XWiki Products that are part of the XWiki Ecosystem as show on the diagram below.

xwiki-ecosystem.png

In the sections below we will cover the Architecture for XWiki Products that are based on a Container (i.e. excluding XWiki Eclipse, XWiki Office and XWiki OpenOffice).

XWiki Platform's Architecture

The XWiki Platform offers common APIs and common User interface elements. Products cherry pick elements from the Platform and extend them to create a runnable distribution.

xwiki-platform.png

XWiki Platform Core

XWiki Core is a single historic JAR that we are splitting into several distinct modules (see below for modules that have been separated already) and that currently implements the following features:

  • Model: All the classes representing the wiki model, i.e. the following notions: Document, Space, Wiki, Classes/Objects, Attachments and more.
  • Cache: This is the old cache service, which has been replaced by the new Cache Module.
  • XWiki Syntax 1.0 Rendering: This is the old service for rendering XWiki Syntax 1.0 which we keep for backward compatiblity so that existing users can keep using the XWiki Syntax 1.0. For all other syntaxes there's now a new Rendering Module.
  • Localization: Handles translations in various languages. A new Localization module is under development that will replace this old module.
  • Notification: Handles event regsistration and distribution. For example code can subscribe to receive an event when a new document is created. This is under replacement by the new Observation Module (no documentation yet).
  • Exports (PDF, RTF, XAR). In the future this will be done by implementing specific Renderers in the new Rendering Module.
  • Security: Authentication & Authorization handling.
  • User Management

XWiki Platform Plugins

For more information on how to develop Plugins, see here.

Plugins that are in their own JAR:

Plugins that are still located in the XWiki Core JAR:

  • Tag Cloud
  • Captcha
  • Charts
  • Diff
  • Feed
  • File Upload
  • Flickr
  • Google
  • GraphViz
  • Image
  • LDAP
  • Mail
  • Packaging
  • Query
  • Rights Manager
  • SVG
  • User Directory
  • Zip Explorer

In addition to the listed plugins above which are created and maintained by the XWiki development team, others plugins have been contributed and can be installed. The full list of available plugins is available on the Code Zone.

XWiki Platform Modules

A module offers services in a given domain. Modules are the equivalent of Plugins but using the new XWiki component-based architecture. Here's the list implemented modules:

XWiki Platform Applications

In addition to the listed applications above which are created and maintained by the XWiki development team, others applications have been contributed and can be installed. The full list of available applications is available on the Code Zone.

Extending XWiki

As a developer there are various ways to extend the XWiki platform as shown on the diagram below:

  • You can write your own application completely and reuse XWiki services such as Rendering, WYSIWYG editor, Rights management, Versioning, etc (see above for the list of Services). If you choose this path you'll need to provide a UI.
  • You can use XWiki Enterprise or other Products and extend them by extending the Platform as described in the next section.

xwiki-architecture-overall.png

Extending the XWiki Platform

The XWiki Platform can be extended by:

xwiki-extending-platform.png

Extending XWiki Remotely

xwiki-extending-remote.png

If you want to control completely the UI you can call (some) XWiki services remotely using REST, XMLRPC or GWT.

For other services not offering a remote API you can embed them as libraries (JARs) or create new REST/XMLRPC/GWT extensions.

Specific Architecture items

Warning: The sections below will be moved to their own Module in the future.

Understanding how HTTP requests are handled

xwiki-web-request-architecture.png

HTTP Request Analysis

For each HTTP request, during the XWiki initialization phase, XWiki analyses the URL to extract information from it. For example the http://www.xwiki.org/xwiki/bin/view/Main/WebHome URL generates the following information:

  • The URL path contains /view/ and thus the ViewAction.java class is executed (configured in struts-config.xml and called by the Struts Action, itself configured in web.xml.
  • The wiki is the main wiki (since the server name starts by www)
  • The action is "view" and thus the view.vm will be rendered using Velocity
  • The space asked is Main and the document's name is WebHome
Tags:
Created by on 2004/07/09 14:58
Last modified by Caleb James DeLisle on 2010/03/11 05:45

This wiki is licensed under a Creative Commons license
2.2.1.27354