Some Draft Scenarios for Engage Services Layer

Overview

This section contains some "draft" sketches of some plausible architectures which might meet our requirements.

Free Text Searching

A crucial observation is that there appears at this stage to be no real technological alternative to the use of (Java)-Lucene for providing the user function of full-text search. The PHP-Lucene implementation has been investigated and found very unperformant during indexing – other options are Ferret for Ruby or CLucene which is largely dormant.

Programming Language

The dominant server-side language used to express user (at the institution's staff) modifications and code is a core choice. Two plausible choices for this are Python, or JavaScript itself. Python is attactive as mentioned above for its "quick start" and "dynamic" properties, as well as connecting to a healthy community with a clear upward trajectory. JavaScript is attractive because it offers an even wider potential audience. It's a incredibly ubiquitous language, and allows us to capitalize on our own community's familiarity with JavaScript programming on the client side.

Frameworks

A Python framework that provides minimal features for URL routing such as CherryPy is attractive. Another option is repoze.bfg, because it comes with some IoC thinking built in. Another possible source of IoC functionality, to use in conjunction with CherryPy, might be SpringPython.

JavaScript frameworks, on the other hand, offer practical, as well as conceptual synergies, with our Infusion development on the client-side. Furthermore a persistence framework such as CouchDB is a natural fit for JavaScript, generating JSON traffic that could pass idiomatically through server components to the client.

Server-side JavaScript is a currently immature but rapidly growing area. One such solution is Aptana Jaxer, a solution which essentially embeds an entire Firefox process within the serverside. A closely aligned project to Fluid Engage, CollectionSpace is also developing a JavaScript-oriented configuration layer which it could be productive to align with.