This section provides an overview of the eXist architecture.
Though eXist provides pluggable storage backends (see Figure 3.1), storing documents either in the internal XML store or an external relational database system (e.g., MySQL or PostgreSQL), it has been designed to be a pure native XML database. As a proof of concept for the indexing and storage architecture, the first releases of eXist implemented only the relational backend. These versions served as a testing platform to explore whether the basic design would meet XML database management needs. Beginning with version 0.6, the relational backend has been supplemented by a new native database backend, which has been written from scratch in Java. The pure native backend (which is covered in the following sections) will yield much better performance for many types of applications.
However, the relational backend code has been kept as well. Relational DBMSs provide high reliability and have been investigated for years, which is important for applications that require reliability more than speed.
Backend implementation details are hidden from eXist's core. All calls to the storage backend are handled by broker classes, implementing the DBBroker interface. To use the relational backend instead of the internal native XML store, JDBC connection parameters have to be specified in the configuration file. New storage backends may be added at any time.
The database engine may either run as a standalone server, embedded into an application, or in connection with a servlet container. All three alternatives are thread safe and support concurrent operations by multiple users. Embedding the database into an application without running an external server process is supported by the XML:DB API driver. It is also possible to use eXist from a read-only file system?for example, to deploy an application on a CD-ROM.
Applications may access a remote eXist server via HTTP, XML-RPC (XML Remote Procedure Call), SOAP, and WebDAV (Web-based Distributed Authoring and Versioning) interfaces. Developers programming in Java should have a look at the XML:DB API supported by eXist: It is an API proposed by the XML:DB initiative that tries to standardize common development interfaces for access to XML database services. Using the XML:DB API, you may keep your code unchanged while switching between alternative database systems like Xindice and eXist.
eXist's integration with Cocoon also relies completely on the XML:DB API. Cocoon may use eXist as its data store, reading all XML files from the database instead of the file system. Access to the retrieval and document management facilities of eXist is provided via XSP logic sheets. XSP?eXtensible Server Pages?is Java code inside XML, comparable to JSP?Java Server Pages, which typically embeds Java in HTML.