You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

In issue SLING-83 Betrand proposes to improve our project layout to make it easier to developers to find their way through the projects making up Sling. On this page, I would like to propose a new structure for further discussion.

Top Level Projects

Folder

Group.Artifact ID

Description

parent

org.apache.sling.sling

Parent Project

api

org.apache.sling.api

Core API

The Sling parent project and the Sling API projects are the only remaining projects at the top level of the repository.

Sling Commons Projects

Folder

Group.Artifact ID

Description

commons/json

org.apache.sling.commons.json

JSON support from json.org

commons/mime

org.apache.sling.commons.mime

Generalized MIME type mapping service

These projects in the commons folder contain common functionality used by multiple other projects and may be either referred to by way of OSGi package import or by inlining the respective packages/classes into the bundle.

JCR Related Projects

Folder

Group.Artifact ID

Description

jcr/api

org.apache.sling.jcr.api

Bundle-ized JCR/Jackrabbit API + Session Pooling

jcr/resource

org.apache.sling.jcr.resource

JCR based ResourceResolver, Mapping (formerly the sling-content-jcr bundle in the content folder)

jcr/classloader

org.apache.sling.jcr.classloader

JCR based ClassLoader

jcr/jackrabbit-client

org.apache.sling.jcr.jackrabbit-client

Access existing JCR Repository

jcr/jackrabbit-server

org.apache.sling.jcr.jackrabbit-server

Embedded JCR Repository

jcr/jackrabbit-text-extractors

org.apache.sling.jcr.jackrabbit-text-extractors

Jackrabbit Query Extensions

The projects in the jcr folder are related to JCR.

Sling Launcher Projects

Folder

Group.Artifact ID

Description

launcher/app

org.apache.sling.launcher.app

Command line Sling launcher (embedded Jetty) (formerly the sling-app project)

launcher/webapp

org.apache.sling.launcher.webapp

Sling launcher Web Application (formerly the sling-servlet project)

Launchers for Sling are located in the launcher folder. Two projects currently exist. The app project which launches Sling from the command line and the webapp project which is a web application which launches Sling as a web application in a servlet container.

Maven Plugin Projects

Folder

Group.Artifact ID

Description

maven/maven-jcrocm-plugin

org.apache.sling.maven-jcrocm-plugin

JavaDoc Tag support for JCR OCM Mapping

maven/maven-jspc-plugin

org.apache.sling.maven-jspc-plugin

JSP Compiler for bundled JSPs

maven/maven-sling-plugin

org.apache.sling.maven-sling-plugin

Various helper goals

The maven folder contains Maven 2 plugin projects which simplify development of Sling itself as well as applications extending Sling.

microsling Projects

Folder

Group.Artifact ID

Description

microsling

Container for microsling

microsling/core

org.apache.sling.microsling.core

microsling Core Implementation

microsling/webapp

org.apache.sling.microsling.webapp

microsling Web Application

The microsling folder contains the microsling projects which is a very simple implementation of the Sling API. microsling is only statically extensible (as opposed to Sling, which is extensible dynamically at run time).

OSGi Projects

Folder

Group.Artifact ID

Description

osgi/log

org.apache.sling.log

LogService impl and Log API provider

osgi/assembly

org.apache.sling.assembly

Assembly packaging (this project will be removed in the future because it provides a subset of the functionality of the new Deployment Package Service contained in the OSGi Compendium Service Specification R 4.1)

osgi/obr

org.apache.sling.obr

OSGi Bundle Repository server

osgi/console-web

org.apache.sling.console.web

Web Based OSGi management console

The projects in the osgi folder are used to extend the functionality of an OSGi framework. These projects are used to implement running Sling instances but do not directly influence Sling itself.

Scripting Engine Projects

Folder

Group.Artifact ID

Description

scripting/resolver

org.apache.sling.scripting.resolver

ScriptResolver implementation and Engine support

scripting/jsp

org.apache.sling.scripting.jsp

JSP (includes Jasper)

scripting/jsp-taglib

org.apache.sling.scripting.jsp.taglib

JSP TagLib for Sling

scripting/rhino

org.apache.sling.scripting.rhino

JavaScript using Rhino (includes ESP support)

scripting/velocity

org.apache.sling.scripting.velocity

Velocity Templating

scripting/freemarker

org.apache.sling.scripting.freemarker

Freemarker Templating

scripting/ruby

org.apache.sling.scripting.ruby

Ruby Templating

scripting/???

org.apache.sling.scripting.???

more scripting engines, e.g. JSR-223

One of the most notable extensions of the Sling API compared to the Component API is the better definition of implementing scripting. Formerly scripting was supported as just a special way of a Component requiring more or less complex setup in the repository. The projects in the scripting folder implement the new SlingScriptingEngine interface for various script languages. The resolver project implements the SlingScriptResolver interface for Sling.

Sling Main Projects

Folder

Group.Artifact ID

Description

sling/core

org.apache.sling.core

The Core Sling engine. See note below.

sling/cache

org.apache.sling.cache

Output caching of response data (currently empty)

sling/event

org.apache.sling.event

Distributed Eventing using JCR

sling/sample

org.apache.sling.sample

Sample Servlets and JSPs

sling/scheduler

org.apache.sling.scheduler

Quartz-based Scheduler for Sling

sling/servlets-standard

org.apache.sling.servlets.standard

Standard Servlets, e.g. nt:file, nt:folder

The projects in the sling folder are the core Sling API implementation projects. In addition added value projects such as scheduling and distributed eventing projects are also located in this folder.

Note on sling/core: The core project is currently almost a complete implementation of the Sling framework. Only the JCR Repository access and Object Content Mapping functionality is not part of the core. This project should be broken apart such that only the bare minimum of the functionality is contained. This is to be further analyzed.

Removed and Replaced Projects

  • The component-api project defining the old Component API is replaced by the new api project defining the Sling API. Therefore the component-api project is removed.
  • The project JSP compiler (Jasper plus Eclipse Java Compiler) project jasper-sling is not a standalone project any more. It has been integrated into the project implementing the SlingScriptingEngine for JSP script/jsp.
  • No labels