How does the extension module work?

Hi there,

Currently, Im diving into the XWiki documentation to find out how the system works. I came across this page that explains something about the extension module. I understand that this module combines extensions into a working application, however I do not understand how this works exactly.

Also, what is the difference between components and extensions in XWiki. Both seem to be the “building blocks” of applications created with XWiki.

Thanks in advance!

Hi, cool that you’re diving into this :wink:

Does this help: https://www.xwiki.org/xwiki/bin/view/Documentation/DevGuide/Architecture/ ?

The Extension Manager allows to install, upgrade and remove extensions in a running XWiki instance.

See https://extensions.xwiki.org/xwiki/bin/view/Extension/Extension%20Manager%20Application

An extension can be made of either:

Hi, thanks for the quick answer!
I indeed came across the Architecture page as well, which already explains a lot! However, it is stated that XWiki is a runtime system. Does it mean that the extension module bundles core and non-core extensions during runtime?

Also, from what I understand from your answer and from the component module, I can view XWiki as follows:
XWiki is made of extensions
Extensions are (can be) made of components (or wiki pages).

Then I am a little confused about what the role of the component manager is and what exactly the component manager does in comparison with the extension manager.

Also, the first picture on this page confuses me. This picture namely seems to indicate that the output of the extension manager is used in the component manager. However, I would expect the opposite if the components can be seen as the building blocks of extensions.

Hope that’s clear!
Thanks again!

Essentially yes. However core extensions are provisioned statically (they are located in WEB-INF/lib as JARs. We don’t support Core XAR extensions ATM AFAIK).

Yup

  • Extension Manager: manages extensions (installation, upgrade, removal)
  • Component Manager: manages component (registration, lookup, removal)

Example: When an Extension is installed with the Extension Manager, and that extension contains components, they are registered as components using the Component Manager.

As I mentioned above, the Extension Manager will notice components in the extension and ask the Component Manager to register them.

hi sir
I am Prakash Choure sir I am interested to work on your project about “Set of useful of Marcos”
sir, we can make changes and add a more useful design which is easier for everyone to find out it .

Thanks @vmassol! Your explanation is great, I understand the difference now completely and also the diagrams make sense.

One last thing: is it true that there the existence of the extension manager greatly reduces the number of dependencies between components?

Not sure I understand. This is about doing component-based development. The EM is just there to manage these dependencies so that when you ask it about a given component it’ll instantiate one and instantiate all needed component that are dependencies and inject them as member variables in the component class.

What I mean here is: from what I understand, (non core) extensions should be installable without installing other non core extensions in general. Is this true? Because in that case there are not much dependencies between different non core extensions.

Core extensions work the same way as non core extensions. They also have dependencies. You don’t install a core dependency. They’re packaged by default and are located in WEB-INF/lib.

And yes core deps must absolutely work without having to install non core dependencies. It wouldn’t make sense otherwise.

There are for sure but yes, a lot less than deps on core extensions or 3rd party deps (jars).