The Apache Marmotta Platform is implemented as a light-weight Service-Oriented Architecture (SOA) using the CDI/Weld service framework (i.e. the core components of Java EE 6). It does not need a Java EE container or similar to run, any web application container is sufficient.

Architecture Overview

The following diagram gives an overview over the Apache Marmotta Platform Architecture:

As is illustrated in the diagram (click for big version), the Marmotta Platform consists of a collection of modules. Each module consists of several layers:

  • the user interface layer is always implemented in HTML5 and Javascript and accesses the server via REST Webservice calls; since Marmotta is a server application, the user interface mostly consists of admin and development interfaces and is not intended for end users
  • the webservice layer offers REST webservices to access most of the server functionality; the REST webservices typically consume and produce JSON and/or different RDF formats; Apache Marmotta uses RESTEasy and JAX-RS to implement its webservices
  • the service layer offers CDI services inside a Java environment that can be called directly from Java; usually you will not need to use this except if you develop custom Java applications based on Marmotta; please see the CDI documentation
  • the model layer offers persistence and data access functionality; this is in most cases provided by normal Java libraries (kiwi, ldcache, ldclient, commons from Marmotta, Sesame Repository, etc)
  • the persistence layer is outside the Apache Marmotta Platform; Marmotta can use a number of Open Source database systems for persistence, including PostgreSQL, MySQL and H2

The Apache Marmotta modules communicate on different levels using different means: on the persistence level, the system uses the KiWi Transactions to send notifications about triple store updates; on the service level, CDI service injection and event notification is used to send messages.

For the most basic configuration (plain Linked Data Server), only the core module is needed. In most configuratins, you’ll however want to add additional modules. To enable/disable a module in your configuration, simply add the jar file to the classpath of the web application (in WEB-INF/lib).