The common library offers utility classes used by various components of GateIn.
Utility classes to bootstrap Microcontainer
GateIn Portlet Container
The Portlet Container component is an implementation of the JSR-286 (Portlet 2.0) specification.
The component is used by the portal but can also be used standalone as it ships with a simple portal and simple tag library that can be used for prototyping and development.
MOP stands for "Model Object for Portals". It defines how portal objects are modelized to enable enough flexibility.
- Unified Site model
A site is a named collection of resources (which are Page and Navigation). This is borrowed from eXo + JBoss: eXo brings the concept of ownerType / ownerId for portal,group and user and JBoss Portal had the concept of dashboard which is a portal used for a specified user.
- Unified and pluggable Navigation
The Navigation is a nice and obvious concept that simply a way to decouple a page and its appearance in the Site. It is therefore possible to show the same page in various place of the portal, create pages without having to expose them in the portal as they are created. Navigation are now plugable and we can support navigation to page and external URL and we will be able to define new navigation link type if needed in the future.
- Content type plugability
The content type plugability allows to display content in a window page. Usually java portals think in term of "Portlet" since that specification has influenced a lot the design of java portals. The "everything is a portlet" design adds complexity in the portal model when it comes to the notion of content. Indeed a Portlet is an application and when we need to show a content resource (like a CMS content, a wiki entry, a forum post, an RSS feed, a Gadget, etc...) the notion of application at the portal level makes the nature of the content opaque (as content is usually expressed in portlet preferences) to the portal. The idea here is to consider the portal window as a typed pointer to a resource, i.e a content type + a content id. The portal then is configured to use portlets to interprete the target resources.
That idea was developed in JBoss Portal years ago.
- Advanced portlet preferences system
eXo brings the notion of scoping a preference to an entity (for instance a preferences is for the portal classic site) and JBoss Portal brings the notion of customization for an external entity (like the user id). The unification of both gives the concept of customization context.
A customization context is:
- a place where customization can happen that hold the customization state
- we have the concept of workspace customization context which is a portal entity seen as a customization context (the global workspace, the site, the page and the window)
- we have the concept of plugable external customization context that allows to use a for instance the user or group identity for performing customization (the same portlet can be customized for each user), but that could also be a navigation (so for instance a portlet window shown in 2 different navigations could have different preferences).
The customization state depends on the type of content (see point 3/) and for portlet it is naturally the portlet preferences :-)
We have two notions of customizations which are clone and specialization. The clone is an independent customization and its state is computed when the clone is created. The specialization is more powerful as the customization state is computed at runtime by looking at the customization extended by the specialization and perform a runtime blending of the state. The interest of that is to be able to manage easily portlet preferences inheritance and keep control of the customizations.
- UI component tree
Each page holds a simple hierarchy of Container/Window/Body Window comes from JBoss Portal and is the typed pointer to a content resource.
Hierarchical Container are customized by templates, that is from eXo.
- Page inheritance
Now pages are organized in a tree and the sole purpose of the tree is to allow property inheritance between the pages. The idea is to simplify management by defining common properties on common types of pages and therefore have the pages of the same type inherit from a common parent. You should have noticed that this does not affect how pages are shown in the portal as this is done by the navigation concept.
- Advanced template system
This is primarily the eXo template system and the model was was improved recently. Traditionally each portal managed by eXo Portal has its own template layout. The recent idea is the capability to scope a layout at the navigation level and to have the layout inherited among the navigation hierarchy. So the site layout becomes scoped at the root navigation level and it is possible to define a different layout for a subsection of the site navigation.
The Web Container Integration component is in charge of the abstraction on various servers such as JBoss Application Server and Apache Tomcat. Deployment of applications are dependent on the underlying server.
The WSRP component is an implementation of the OASIS WSRP specification.
It enables to produce and render portlets from one container to another. It is then possible to get a portal implementing WSRP to produce content (a portlet) and integrate that part into GateIn.
User and group management with various backend options such as LDAP and Database.
More info here.
eXo JCR is an open source implementation of the Java Specification Request 170, also known as the Content Repository for Java technology API. The main purpose of this standard is to abstract the complexity of the data storage and retrieval, such that you can develop applications fully vendor independent without significant performance degradation.
- Support for structured/unstructured content
- Standard XML Import/Export
- Query using SQL/XPath
- Full Text Search
- Access Control
- Explicit Locking
- Content Observation
- FTP/WebDav Access
- Open Office/Microsoft Office Access
- Audit Service
- Backup Service
- Access Control Extension
- Action Extensions
- Metadata Extension