Recently, after our 2.0 Final release, we have been asked a lot of questions regarding what direction we intend to take our CMS component. I hope to address some of the questions/concerns in this post, and outline what we have been working on thus far in this respect.
JBoss Portal 2.2 (due 11/2005) will leverage the Java Content Repository specification (JSR170), which was recently finalized. As an implementation, we have chosen, at the moment, to use Apache Jackrabbit. Our prototype is, in fact, using jackrabbit. Currently, our prototype is sitting in private CVS. Once it is farther along, Julien and I will discuss how/when to make it available online for all community members (perhaps a simple zip file will do). This will be the case, until the prototype achieves Julien's blessing and can be integrated with JBoss Portal CVS.
Some major points that are planned for the CMS:
- CMS will leverage JCR - As stated for reasons above, and the fact that this buys us a flexible API for both hierarchical and non-hieararchical repository models based on a file system or RDBMS, and even accessible through WebDAV. My own long-run goal is to have the CMS object model be object-agnostic, so anyone creating a forumPortlet/blogPortlet/whateverPortlet can leverage it. This will require more thought and testing on my part.
- A pluggable CMS - Allowing for for our bundled CMS to be replaced by an existing/new CMS backend. This will make it easier for companies like Alfresco to plug their Document Management Systems in to the portal. A Service Provider Interface (SPI) will be provided for this case. Note: This implies that the CMS will no longer be tightly integrated with our portal core.
- Basic workflow - The idea here is to have a (basic) workflow mechanism for supervisor approval of content modification/creation. (This feature may not be in the 2.2 release, and we will most probably not be utilizing jBPM until a later date for more advanced workflow.)
- AdminCMS - The administrative face of our CMS will have to be modified to interact with the new architecture.
- Migration Issues - 2.0 to 2.2 CMS changes will require migration scripts for content.
The new CMS will feature a completely new architecture and object model. To illustrate the new architecture, we have created this Figure:
To elaborate on the above image:
- The CMS service runs as an HA singleton
- The master node uses JCR to read/write to the database
- The other nodes delegate to the master node
- The use of the command pattern enables to execute the command on the master node
- The cache should provide fast access to the data for the read client
- Fetch data from the CMS
- On a read operation
- Use the entry if found in the cache
- Otherwise get the entry from the CMS and put it in the cache, this is a remote operation on slave nodes
- On a write operation
- On slave nodes this translates into a command executed on the master node
- The master node writes the operation to the repository
- The master node updates the entry from the cache which removes it globally
Much of the work in the prototype thus far, has concentrated on the CMS Service, new object model, command pattern concept, and how it all interacts with JCR (nodetypes, session handling, workspaces, etc...). Below, is a UML diagram of some of the work:
So as one can see, the entry-point to this architecture is the CMS Service, which is covered in the first diagram. The rest of the architecture is quite simply a command pattern for common operations (some of which are object-agnostic), and an object model based on the nt:file and nt:folder nodetypes included in JCR.
At the time of this blog, I have not yet implemented the versioning features in the object model or command pattern. This should be done before the end of this week, however. Once this new prototype is completed, the task begins in incorporating it with JBoss Portal, as it is purely a standalone application right now. At that point, any community contributors willing to lend a hand and get their feet wet with the CMS component are more than welcome to take part.