sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Sling > Module Reorganization Proposal
Date Mon, 07 Feb 2011 10:22:00 GMT
<html>
<head>
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/2036/9/1/_/styles/combined.css?spaceKey=SLING&amp;forWysiwyg=true"
type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://cwiki.apache.org/confluence/display/SLING/Module+Reorganization+Proposal">Module
Reorganization Proposal</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://cwiki.apache.org/confluence/display/~fmeschbe">Felix
Meschberger</a>
    </h4>
        <br/>
                         <h4>Changes (1)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-added-lines" style="background-color: #dfd;">{excerpt:hidden}IMPLEMENTED{excerpt}
<br> <br></td></tr>
            <tr><td class="diff-unchanged" >Status: IMPLEMENTED <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <p>IMPLEMENTED</p>

<p>Status: IMPLEMENTED</p>


<p>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.</p>

<div>[ <a href='#ModuleReorganizationProposal-NamingConventions'>Naming Conventions</a>
] [ <a href='#ModuleReorganizationProposal-TopLevelProjects'>Top Level Projects</a>
] [ <a href='#ModuleReorganizationProposal-SlingCommonsProjects'>Sling Commons Projects</a>
] [ <a href='#ModuleReorganizationProposal-JCRRelatedProjects'>JCR Related Projects</a>
] [ <a href='#ModuleReorganizationProposal-SlingLauncherProjects'>Sling Launcher Projects</a>
] [ <a href='#ModuleReorganizationProposal-MavenPluginProjects'>Maven Plugin Projects</a>
] [ <a href='#ModuleReorganizationProposal-microslingProjects'>microsling Projects</a>
] [ <a href='#ModuleReorganizationProposal-OSGiProjects'>OSGi Projects</a> ] [
<a href='#ModuleReorganizationProposal-ScriptingEngineProjects'>Scripting Engine Projects</a>
] [ <a href='#ModuleReorganizationProposal-SlingMainProjects'>Sling Main Projects</a>
] [ <a href='#ModuleReorganizationProposal-RemovedandReplacedProjects'>Removed and Replaced
Projects</a> ]<!
 /div>

<h2><a name="ModuleReorganizationProposal-NamingConventions"></a>Naming
Conventions</h2>

<h3><a name="ModuleReorganizationProposal-Projects"></a>Projects</h3>

<ul>
	<li><em>groupId</em>: All projects have the same <em>groupId</em>
<tt>org.apache.sling</tt></li>
	<li><em>artifactId</em>: The <em>artifactId</em> is fully qualified
with the <em>groupId</em> plus a name built from the project folder as listed
below with slashes <tt>/</tt> and dashes <tt>-</tt> replaced by dots
<tt>.</tt>. See below for exceptions.</li>
</ul>


<p>The final artifact name - <tt>pom.build.finalName</tt> - is the Maven
2 default consisting of the <em>artifactId</em> and the <em>version</em>.
The <tt>Bundle-SymbolicName</tt> is defined in the parent pom as being just the
<em>artifactId</em>.</p>

<p><b>Exceptions to <em>artifactId</em> rule</b></p>
<ul>
	<li>The parent project's <em>artifactId</em> is <tt>sling</tt></li>
	<li>The <em>artifactId</em> of the projets in the <tt>sling</tt>
folder is just the project name without the parent folder <tt>sling</tt>, e.g
<tt>core</tt> for the Sling core project.</li>
	<li>The Maven 2 plugin projects in the <tt>maven</tt> folder follow the
naming convention for Maven 2 plugins.</li>
</ul>



<h3><a name="ModuleReorganizationProposal-JavaPackages"></a>Java Packages</h3>

<p>Each project consists of a series of Java Packages. To prevent collision between
projects with respect to Java Packages, each project has a root Java Package which is the
fully qualified Maven 2 project name consisting of the <em>artifactId</em> such
that the Bundle symbolic name and the root Java Package are the same.</p>


<h2><a name="ModuleReorganizationProposal-TopLevelProjects"></a>Top Level
Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>parent</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.sling</tt> </td>
<td class='confluenceTd'> Parent Project </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>api</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.api</tt> </td>
<td class='confluenceTd'> Core API </td>
</tr>
</tbody></table>
</div>


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


<h2><a name="ModuleReorganizationProposal-SlingCommonsProjects"></a>Sling
Commons Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>commons/json</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.commons.json</tt> </td>
<td class='confluenceTd'> JSON support from json.org </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>commons/mime</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.commons.mime</tt> </td>
<td class='confluenceTd'> Generalized MIME type mapping service </td>
</tr>
</tbody></table>
</div>


<p>These projects in the <tt>commons</tt> 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.</p>


<h2><a name="ModuleReorganizationProposal-JCRRelatedProjects"></a>JCR Related
Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>jcr/api</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.jcr.api</tt> </td>
<td class='confluenceTd'> Bundle-ized JCR/Jackrabbit API + Session Pooling </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>jcr/resource</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.jcr.resource</tt> </td>
<td class='confluenceTd'> JCR based ResourceResolver, Mapping (formerly the <tt>sling-content-jcr</tt>
bundle in the <tt>content</tt> folder) </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>jcr/classloader</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.jcr.classloader</tt> </td>
<td class='confluenceTd'> JCR based ClassLoader </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>jcr/jackrabbit-client</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.jcr.jackrabbit.client</tt>
</td>
<td class='confluenceTd'> Access existing JCR Repository </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>jcr/jackrabbit-server</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.jcr.jackrabbit.server</tt>
</td>
<td class='confluenceTd'> Embedded JCR Repository </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>jcr/jackrabbit-extractor</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.jcr.jackrabbit.extractor</tt>
</td>
<td class='confluenceTd'> Jackrabbit Query Extensions </td>
</tr>
</tbody></table>
</div>


<p>The projects in the <tt>jcr</tt> folder are related to JCR.</p>


<h2><a name="ModuleReorganizationProposal-SlingLauncherProjects"></a>Sling
Launcher Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>launcher/app</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.launcher.app</tt> </td>
<td class='confluenceTd'> Command line Sling launcher (embedded Jetty) (formerly the
<tt>sling-app</tt> project) </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>launcher/webapp</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.launcher.webapp</tt> </td>
<td class='confluenceTd'> Sling launcher Web Application (formerly the <tt>sling-servlet</tt>
project) </td>
</tr>
</tbody></table>
</div>


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


<h2><a name="ModuleReorganizationProposal-MavenPluginProjects"></a>Maven
Plugin Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler </td>
<td class='confluenceTd'> <tt>maven/maven-jcrocm-plugin</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.maven-jcrocm-plugin</tt>
</td>
<td class='confluenceTd'> JavaDoc Tag support for JCR OCM Mapping </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>maven/maven-jspc-plugin</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.maven-jspc-plugin</tt> </td>
<td class='confluenceTd'> JSP Compiler for bundled JSPs </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler </td>
<td class='confluenceTd'> <tt>maven/maven-sling-plugin</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.maven-sling-plugin</tt> </td>
<td class='confluenceTd'> Various helper goals </td>
</tr>
</tbody></table>
</div>


<p>The <tt>maven</tt> folder contains Maven 2 plugin projects which simplify
development of Sling itself as well as applications extending Sling.</p>


<h2><a name="ModuleReorganizationProposal-microslingProjects"></a>microsling
Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>microsling</tt> </td>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> Container for microsling </td>
</tr>
<tr>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> <tt>microsling/core</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.microsling.core</tt> </td>
<td class='confluenceTd'> microsling Core Implementation </td>
</tr>
<tr>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> <tt>microsling/webapp</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.microsling.webapp</tt> </td>
<td class='confluenceTd'> microsling Web Application </td>
</tr>
</tbody></table>
</div>


<p>The <tt>microsling</tt> 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).</p>


<h2><a name="ModuleReorganizationProposal-OSGiProjects"></a>OSGi Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>osgi/log</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.osgi.log</tt> </td>
<td class='confluenceTd'> LogService impl and Log API provider </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>osgi/assembly</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.osgi.assembly</tt> </td>
<td class='confluenceTd'>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) </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>osgi/obr</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.osgi.obr</tt> </td>
<td class='confluenceTd'> OSGi Bundle Repository server </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>osgi/console-web</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.osgi.onsole.web</tt> </td>
<td class='confluenceTd'> Web Based OSGi management console </td>
</tr>
</tbody></table>
</div>


<p>The projects in the <tt>osgi</tt> 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.</p>


<h2><a name="ModuleReorganizationProposal-ScriptingEngineProjects"></a>Scripting
Engine Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> In Progress </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>scripting/resolver</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scripting.resolver</tt> </td>
<td class='confluenceTd'> ScriptResolver implementation and Engine support </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>scripting/jsp</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scripting.jsp</tt> </td>
<td class='confluenceTd'> JSP (includes Jasper) </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler/fmeschbe </td>
<td class='confluenceTd'> <tt>scripting/jsp-taglib</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scripting.jsp.taglib</tt>
</td>
<td class='confluenceTd'> JSP TagLib for Sling </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler </td>
<td class='confluenceTd'> <tt>scripting/javascript</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scripting.javascript</tt>
</td>
<td class='confluenceTd'> JavaScript using Rhino (includes ESP support) </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler </td>
<td class='confluenceTd'> <tt>scripting/velocity</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scripting.velocity</tt> </td>
<td class='confluenceTd'> Velocity Templating </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler </td>
<td class='confluenceTd'> <tt>scripting/freemarker</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scripting.freemarker</tt>
</td>
<td class='confluenceTd'> Freemarker Templating </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler </td>
<td class='confluenceTd'> <tt>scripting/ruby</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scripting.ruby</tt> </td>
<td class='confluenceTd'> Ruby Templating </td>
</tr>
<tr>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> <tt>scripting/<em>???</em></tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scripting.<em>???</em></tt>
</td>
<td class='confluenceTd'> more scripting engines, e.g. JSR-223 </td>
</tr>
</tbody></table>
</div>


<p>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 <tt>scripting</tt> folder implement the new <tt>SlingScriptingEngine</tt>
interface for various script languages. The <tt>resolver</tt> project implements
the <tt>SlingScriptResolver</tt> interface for Sling.</p>


<h2><a name="ModuleReorganizationProposal-SlingMainProjects"></a>Sling Main
Projects</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status </th>
<th class='confluenceTh'> Who </th>
<th class='confluenceTh'> Folder </th>
<th class='confluenceTh'> Artifact ID </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>sling/core</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.core</tt> </td>
<td class='confluenceTd'> The Core Sling engine. See note below. </td>
</tr>
<tr>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> &#8211; </td>
<td class='confluenceTd'> <tt>sling/cache</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.cache</tt> </td>
<td class='confluenceTd'> Output caching of response data (currently empty) </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler </td>
<td class='confluenceTd'> <tt>sling/event</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.event</tt> </td>
<td class='confluenceTd'> Distributed Eventing using JCR </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>sling/sample</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.sample</tt> </td>
<td class='confluenceTd'> Sample Servlets and JSPs </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> cziegeler </td>
<td class='confluenceTd'> <tt>sling/scheduler</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.scheduler</tt> </td>
<td class='confluenceTd'> Quartz-based Scheduler for Sling </td>
</tr>
<tr>
<td class='confluenceTd'> OK </td>
<td class='confluenceTd'> fmeschbe </td>
<td class='confluenceTd'> <tt>sling/servlets-standard</tt> </td>
<td class='confluenceTd'> <tt>org.apache.sling.servlets.standard</tt> </td>
<td class='confluenceTd'> Standard Servlets, e.g. <tt>nt:file</tt>, <tt>nt:folder</tt>
</td>
</tr>
</tbody></table>
</div>


<p>The projects in the <tt>sling</tt> 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.</p>


<p><b>Note on <tt>sling/core</tt></b>: 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.</p>


<h2><a name="ModuleReorganizationProposal-RemovedandReplacedProjects"></a>Removed
and Replaced Projects</h2>

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


    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;">
            <a href="https://cwiki.apache.org/confluence/users/viewnotifications.action"
class="grey">Change Notification Preferences</a>
        </div>
        <a href="https://cwiki.apache.org/confluence/display/SLING/Module+Reorganization+Proposal">View
Online</a>
        |
        <a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=70121&revisedVersion=31&originalVersion=30">View
Changes</a>
                |
        <a href="https://cwiki.apache.org/confluence/display/SLING/Module+Reorganization+Proposal?showComments=true&amp;showCommentArea=true#addcomment">Add
Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message