Project Pad software consists of a Content Service implemented as a Java servlet, Java content classes, and a collection of web-based client programs written in Flash Actionscript 2, Java, and Python (jython). The content service is not itself a content repository but instead functions as a layer over content repositories. The content service provides a number of important services to clients: repository-independent object persistence, remote method invocation by clients, an implementation of the observer pattern, and a common API for data access.
The content service provides access to content objects, each identified by an URI. For example an image annotation document is stored as a persistent object. Content objects are Java objects and include both data and behavior (methods). Content objects are brought into a memory cache when needed and if modified, written back to an external content repository.
The content service implements a simple XML-based protocol for remote method invocation on content objects. A client program obtains information from or modifies a content object by using this mechanism to call methods defined by the content object's class. In effect, each content object class defines a small special-purpose protocol for communicating and coordinating between client programs.
The remote method protocol is also implemented by a matching Flash Actionscript 2 library. The libraries support argument passing and return values via XML serialization. Stubs for server-side content objects are sent to the client and can be used to call methods on the original object.
When a client requests a content object for display it typically registers as an observer on that object. When a method on the content object modifies an object it broadcasts an event to all observers. An event on the server results in calling a method on an stub in the client. In effect this constitutes a reverse remote method call system as server-side events result in calling methods in the client.
The observer pattern lets clients display a shared view of a content object. For example several users may be viewing a single annotated image. As soon as one user adds a new annotation all clients receive an update notification from the server and update their display to show the new annotation.
Project Pad's object persistence mechanism is implemented as a layer that is independent on the system that hosts object storage. Store plug-ins provide a standard interface to a number of different storage systems including file system storage, content storage by a host Sakai system, or storage in a Fedora repository. Additional storage modules will be added at a future date.
Project Pad typically stores data as XML. The libraries provide an very easy way of using reflection to define clean, compact, XML representation formats for content object types. The mechanism also allows special converters to be used to implement existing standard XML formats.
Object storage formats depend on a storage plug-in and need not use XML. Storage modules can use other mechanisms such as relational database systems or binary serialization for object storage.
Project Pad provides support for RDF metadata and uses RDF to store additional information about each content object. Module developers can make use of this RDF implementation.