This high-level overview of Clearspace technologies provides links to more information about the pieces themselves.

Architecture Diagram

This illustration includes the key pieces of the Clearspace application.

cs_architecture_2_0.png

Access Points

User Interface

The Clearspace user interface is rendered from FreeMarker or JavaServer Pages that are essentially templates to display user and content data. Here's a description of the pieces:

Supported Browsers

Browsers supported for Clearspace include:

Customizing

People using Clearspace can customize or personalize the UI by using widgets. Developers can customize the user interface through either themes or plugins.

Feeds

Feeds are a data format through which people can keep up with Clearspace without needing to view the application itself. People subscribing to feeds can view the feed information as a list of content in a feed reader or web browser.

Email

Clearspace can send or receive email. It sends email when people choose to receive notifications on particular content, such as when a document has been edited or a discussion has received a new reply.

People can send email to Clearspace by replying to notification messages. For example, if someone receives a notification that a discussion has gotten a new reply, they can reply to the notification message, type their own response, then send the email to have their typed response posted as a new reply to the discussion.

Clearspace can also send email for common reasons, such as to follow up on a request to change a password.

Web Services

Other applications can access Clearspace functionality using web services. Most of Clearspace's features are available this way. Also, developers can write new web services that expose Clearspace features.

Clearspace supports web services in REST and SOAP styles. Support for all three is provided through Apache CXF, an open source framework.

For more on getting at Clearspace via web services, see REST Web Services Reference and SOAP Web Services Developer Guide.

Flow Between UI and Logic

Clearspace is based in part on what's known as a model-view-controller (MVC) framework. In MVC, a controller layer manages interactions between what people do in the user interface (the view) and how the application's logic (the model) responds. In Clearspace, the controller layer is provided by Apache Struts (the view is FreeMarker or JavaServer Pages, while the model is implemented as Java classes). Application logic responds to the user interface through Struts actions that return results that depend on the nature of the request. Struts is an open source framework.

Customizing

Developers can write their own Struts actions, usually accompanying user interface additions. Actions are written as plugins.            

Application Logic

Clearspace logic is implemented as Java classes. This includes classes for representing the various containers (such as projects) and content types (such as documents), as well as managers for handling them, data access objects for interacting with the database, and classes to support services such as web services, feeds, and so on.

Developers can learn more about the classes exposed as part of the API by taking at look at the Javadoc.

Dependency Configuration

Java classes rely on many classes and libraries provided either by Jive or by third parties. These dependencies are resolved at run time by using a model called "inversion of control," or IOC. In Clearspace, IOC is supported by the Apache Spring framework. Through the Spring framework, developers can replace default dependencies with their own implementations. For example, a developer could replace a particular security framework with their own.

Apache Spring is an open source framework.

People can search for content in Clearspace, of course. The search feature can also be configured to search external content sources. An administrator determines which content should be available for external searches.

Content Search

For searches of content inside Clearspace, the application uses the Apache Lucene search engine. Lucene is an open source tool.

External Search

When searching content outside Clearspace, the application uses OpenSearch. Other applications that expose their search engines via OpenSearch can be included in Clearspace searches by an administrator.

Caching

Caching is provided by Coherence.

Clustering

Clustering is provided by Coherence. For more information, see Clearspace Clustering Information.

Database Access

Clearspace stores data about content and users in its database. It can also be configured to use another data source, such as an LDAP database, to authenticate user accounts when people log in.

Clearspace Database

The Clearspace database is designed to store content data (such as content, properties for widgets, application settings, and so on) as well as user data (including the contents of user profiles). Clearspace can optionally use its own database to store credentials for authenticating users.

User Data

When installing Clearspace, you can specify that it should use an external data store for getting the list of users and groups who will be using the application. Clearspace can use this data store to authenticate people when they log in. By default, LDAP and Active Directory are supported, but developers can add support for other sources by adding a custom authentication provider as a plugin.

Note that even if the application is using an external data store for authentication, information about users (profile information and permissions, for example) will be kept in the Clearspace database.

Customizing

Developers can make the following database-related customizations:

Security

Authentication and authorization in Clearspace are based on the Spring Security (formerly Acegi) framework. For details on the Clearspace implementation and information on how to customize it, be sure to see Authentication and Authorization.

Customizing

Developers can customize the security framework by adding J2EE filters through a plugin. Authentication and Authorization describes what you can do and offers sample code.

Customization Points

Developers can customize Clearspace, changing its look and feel, adding new widgets or macros, even adding entire features. Most of this kind of work is done by developing a plugin that's based on the same technologies that Clearspace itself uses.

Themes

With themes, you can restyle the user interface. In this way you can adding a look and feel that identifies the instance with your branding characteristics (logo, colors, and so on). You can also restyle particular parts of the application, such as to give certain kinds of content or certain spaces their own character. Themes don't require a plugin.

When developing themes, you can take one of three approaches: basic changes through the UI, minor changes to code by Customizing UI with the Theme Resource Kit, and Advanced Themes Topics.

Plugins

A plugin is the most common way to customize and extend Clearspace.            

Widgets

Widgets are views on content with which people can customize certain Clearspace pages. Clearspace includes many widgets by default, but developers can build their own using the plugin framework. Building Widgets is a good place to start.

Actions

Building an action plugin is one way to add more involved functionality. For example, a custom action could be behind a feature through which people could choose a number of documents to package into a single PDF file. For more, see Building Actions.

Custom Authentication Provider

A custom authentication provider knows how to authenticate people against a data source that isn't supported by default (in other words, that isn't the Clearspace database, LDAP, or Active Directory). For more on customizing authentication, authorization, and providing single sign-on, see Authentication and Authorization.

Server Components

Application Server

Clearspace supports a number of application servers. For the list, see the Installation Guide.

Database Servers

The installation guide lists details about the database servers supported for use with Clearspace