<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License. 
-->
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="../style/bootstrap-1-3-0-min.css" type="text/css" />
  <link rel="stylesheet" href="../style/style.css" type="text/css" />
  <script src="https://www.apachecon.com/event-images/snippet.js"></script>
        <title>jackrabbit - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row"><div class="span6"><a href="https://www.apache.org/"><img src="http://www.apache.org/img/asf_logo.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span7"><a href="/"><img src="https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png" alt="The Apache Software Foundation Incubator" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span2"><a href="https://www.apache.org/foundation/contributing.html"><img src="https://www.apache.org/images/SupportApache-small.png" height="100" width="100"/></a></div>
</div>
  <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span4">
    <form action="http://www.google.com/search" method="get">
     <input value="incubator.apache.org" name="sitesearch" type="hidden"/>
     <input size="20" name="q" id="query" type="text" value="search..."
      onclick="if(this.value == 'search...') {this.value = ''}"/>
     <input name="Search" value="Go" type="submit"/>
    </form>
          <div class="menuheader">General</div>
    <menu compact="compact">
          <li><a href="../index.html">Welcome</a></li> 
          <li><a href="../cookbook/">Incubator Cookbook</a></li> 
          <li><a href="../policy/incubation.html">Incubation Policy</a></li> 
          <li><a href="../guides/roles_and_responsibilities.html">Roles and Responsibilities</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="http://wiki.apache.org/incubator">Incubator Wiki</a></li> 
          <li><a href="../whoweare.html">Who We Are</a></li> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects">Project List</a></li> 
          <li><a href="../clutch">Clutch Report</a></li> 
          <li><a href="../ip-clearance">IP Clearance</a></li> 
            </menu>
      <div class="menuheader">Entry Guides</div>
    <menu compact="compact">
          <li><a href="../guides/proposal.html">Proposal Guide</a></li> 
            </menu>
      <div class="menuheader">Podling Guides</div>
    <menu compact="compact">
          <li><a href="../guides/committer.html">Podling Committers</a></li> 
          <li><a href="../guides/ppmc.html">Podling PMC (PPMC)</a></li> 
          <li><a href="../guides/mentor.html">Podling Mentor</a></li> 
          <li><a href="../guides/releasemanagement.html">Podling Releases</a></li> 
          <li><a href="../guides/branding.html">Podling Branding/Publicity</a></li> 
          <li><a href="../guides/sites.html">Podling Websites</a></li> 
          <li><a href="../guides/graduation.html">Graduation</a></li> 
          <li><a href="../guides/retirement.html">Retirement</a></li> 
            </menu>
      <div class="menuheader">Other Guides</div>
    <menu compact="compact">
          <li><a href="../guides/participation.html">Participation</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="../guides/chair.html">IPMC Chair</a></li> 
          <li><a href="../guides/lists.html">Mailing Lists</a></li> 
          <li><a href="../guides/website.html">Incubator Website</a></li> 
            </menu>
      <div class="menuheader">ASF</div>
    <menu compact="compact">
          <li><a href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li> 
          <li><a href="http://www.apache.org/dev/">Developer Documentation</a></li> 
          <li><a href="http://www.apache.org/foundation/">Foundation</a></li> 
          <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li> 
          <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> 
            </menu>
    <div id="menuheader">
      <a class="acevent" data-format="square" data-width="135" data-mode="light" data-event="random"></a>
    </div>
   </div>
   
   <div class="span12">
            <h2 id='Jackrabbit+Project+Incubation+Status'><img src="../images/redarrow.gif" />Jackrabbit Project Incubation Status</h2>
<div class="section-content">
<p>Jackrabbit has graduated incubation. For more information,
      please see the 
      <a href="http://jackrabbit.apache.org/">Apache Jackrabbit</a> project.</p>
<p><span class="graduated">The Jackrabbit project graduated on 2006-03-15</span></p>
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description</h2>
<div class="section-content">
<p>The Jackrabbit podling has been formed to develop an open
      source implementation of the Content Repository for Java
      Technology API (JCR), as specified within the Java Community
      Process as 
      <a href="http://www.jcp.org/en/jsr/detail?id=170">JSR 170</a> and 
      <a href="http://www.jcp.org/en/jsr/detail?id=283">JSR 283</a>. 
      <a href="http://www.day.com/">Day Software</a>, the JCR
      specification lead, has licensed an initial implementation of
      the JCR reference implementation for use as seed code for
      this project. JCR specifies an API for application developers
      (and application frameworks) to use for interaction with
      modern content repositories -- content management systems
      that provide content services such as versioning,
      transactions, indexing, workflow, etc.</p>
<p>Jackrabbit's implementation began as a proposal within the
      
      <a href="http://jakarta.apache.org/slide/index.html">Jakarta
      Slide</a> project, but has since attracted interest from
      multiple projects with the 
      <a href="http://www.apache.org/">Apache Software Foundation</a>,
      including Slide, Cocoon, Lenya, Graffito, XML
      Indexing, and Derby. We are also looking at integration with
      projects such as Maven and Beehive.</p>
<p>The purpose of this incubation period is to attract
      additional contributors from other Apache projects and from
      the various JSR 170 and 283 expert group companies, learn the
      Apache way of doing things, and allow the developers to focus
      on this interface/implementation rather than all of the
      existing projects that might want to use it. We hope to
      improve collaboration on the code base by moving all of the
      active developers and authors to Apache, bring in as many of
      the Apache veterans as wish to get involved, and open it up
      to all of the 22 expert group companies. Development of the
      JCR RI and TCK will occur in this project -- Day Software
      plans to continue participation in Jackrabbit and use the
      code in the official RI and TCK releases, allowing developers
      to beta test against the open source versions as well as the
      official versions.</p>
</div>
        <h2 id='News'><img src="../images/redarrow.gif" />News</h2>
<div class="section-content">
<ul>
        <li>2006 Mar 15: Incubator PMC approves graduation to new TLP</li>
        <li>2006 Mar 15: ASF Board approves new Apache Jackrabbit project</li>
        <li>2006 Mar 11: Committers vote to request incubator graduation</li>
        <li>2006 Feb 14: Apache Jackrabbit 0.9 released</li>
        <li>2004 Aug 28: Proposal accepted by Incubator PMC</li>
      </ul>
</div>
        <h2 id='Project+info'><img src="../images/redarrow.gif" />Project info</h2>
<div class="section-content">
<table class="colortable" width="100%">
        <tr>
          <th>item</th>
          <th>type</th>
          <th>reference</th>
        </tr>
        <tr>
          <td>Website</td>
          <td>www</td>
          <td>
            <a href="http://jackrabbit.apache.org/jackrabbit/">http://jackrabbit.apache.org/jackrabbit/</a>
          </td>
        </tr>
        <tr>
          <td />
          <td>wiki</td>
          <td>
            <a href="http://wiki.apache.org/jackrabbit/">http://wiki.apache.org/jackrabbit/</a>
          </td>
        </tr>
        <tr>
          <td>Mailing list</td>
          <td>dev</td>
          <td>dev jackrabbit.apache.org</td>
        </tr>
        <tr>
          <td />
          <td>cvs</td>
          <td>commits jackrabbit.apache.org</td>
        </tr>
        <tr>
          <td />
          <td>pmc</td>
          <td>private jackrabbit.apache.org</td>
        </tr>
        <tr>
          <td>Bug tracking</td>
          <td>Jira</td>
          <td>JCR-*</td>
        </tr>
        <tr>
          <td>Source code</td>
          <td>Subversion</td>
          <td>jackrabbit/</td>
        </tr>
        <tr>
          <td>Committers</td>
          <td>tripod</td>
          <td>Tobias Bocanegra</td>
        </tr>
        <tr>
          <td />
          <td>fielding</td>
          <td>
          <a href="http://roy.gbiv.com/">Roy T. Fielding</a> (mentor)</td>
        </tr>
        <tr>
          <td />
          <td>stefan</td>
          <td>Stefan Guggisberg</td>
        </tr>
        <tr>
          <td />
          <td>shuber</td>
          <td>Serge Huber</td>
        </tr>
        <tr>
          <td />
          <td>fmeschbe</td>
          <td>Felix Meschberger</td>
        </tr>
        <tr>
          <td />
          <td>bcm</td>
          <td>Brian Moseley</td>
        </tr>
        <tr>
          <td />
          <td>uncled</td>
          <td>David Nuescheler</td>
        </tr>
        <tr>
          <td />
          <td>dpfister</td>
          <td>Dominique Pfister</td>
        </tr>
        <tr>
          <td />
          <td>ppiegaze</td>
          <td>Peeter Piegaze</td>
        </tr>
        <tr>
          <td />
          <td>edgarpoce</td>
          <td>Edgar Poce</td>
        </tr>
        <tr>
          <td />
          <td>mreutegg</td>
          <td>Marcel Reutegger</td>
        </tr>
        <tr>
          <td />
          <td>angela</td>
          <td>Angela Schreiber</td>
        </tr>
        <tr>
          <td />
          <td>sylvain</td>
          <td>Sylvain Wallez</td>
        </tr>
        <tr>
          <td />
          <td>jukka</td>
          <td>Jukka Zitting</td>
        </tr>
        <tr>
          <td>Emeritus</td>
          <td>stefano</td>
          <td>Stefano Mazzocchi (mentor)</td>
        </tr>
        <tr>
          <td />
          <td>gianugo</td>
          <td>Gianugo Rabellino</td>
        </tr>
        <tr>
          <td />
          <td>prussell</td>
          <td>Paul Russell</td>
        </tr>
        <tr>
          <td />
          <td>treilly</td>
          <td>Tim Reilly</td>
        </tr>
        <tr>
          <td />
          <td>asavory</td>
          <td>Andrew Savory</td>
        </tr>
      </table>
</div>
        <h2 id='Incubation+status+reports'><img src="../images/redarrow.gif" />Incubation status reports</h2>
<div class="section-content">
<h3 id='Status20060313'>2006/03/13</h3>
<div class="section-content">
<p>Jackrabbit accomplished its first official incubating
        release with version 0.9 of the Apache Jackrabbit reference
        implementation and JCR-RMI tools. Day Software has
        confirmed that the version 0.9 jars have passed the JCR 1.0
        TCK with the current exclude list.</p>
<p>We are now getting reorganized for graduation from the
        Incubator to our own top-level project at the Apache
        Software Foundation. The Jackrabbit committers voted on
        March 11, 2006, to request graduation. In addition, we made
        a call to refresh the list of active committers for an
        accurate presentation to the board; Stefano Mazzocchi,
        Gianugo Rabellino, Paul Russell, Tim Reilly, and Andrew
        Savory have requested emeritus status, meaning that they
        won't be listed on the initial project management committee
        but are welcome to come back if they choose to rejoin the
        project at a later time.</p>
</div>
<h3 id='Status20060118'>2006/01/18</h3>
<div class="section-content">
<p>Jackrabbit added four new committers to the project this
        quarter:</p>
<ul>
          <li>Serge Huber</li>
          <li>Felix Meschberger</li>
          <li>Brian Moseley</li>
          <li>Angela Schreiber</li>
        </ul>
<p>in recognition of their outstanding and sustained
        contributions to the project. Jukka Zitting has volunteered
        to be the RM for our first set of incubating releases. We
        plan to seek graduation from incubator as soon as we have a
        track record for a successful release vote.</p>
</div>
<h3 id='Status20051026'>2005/10/26</h3>
<div class="section-content">
<p>The Apache Jackrabbit podling is slowly recovering from
        the impact of finalizing JSR 170, initializing JSR 283 (the
        next JCR specification revision EG), and the summer holiday
        schedule. We are in the process of reconfiguring our source
        directories for an eventual 1.0 release and Maven 2
        support. No new committers were added this quarter, though
        we expect more to be added soon.</p>
</div>
<h3 id='Status20050715'>2005/07/15</h3>
<div class="section-content">
<p>Jackrabbit has attracted public interest from many
        different projects, both open source and commercial in
        nature, and has over 250 people reading the developer list.
        During the past quarter we added one new committer, Edgar
        Poce, and cleared the minimum threshold of three
        independent committers.</p>
<p>The big news is that JCR, the Content Repository for
        Java Technology 1.0 API, has been completed by the JSR 170
        expert group and received final approval from the J2SE/EE
        executive committee at the end of May. We are currently
        working on restructuring the Jackrabbit project directories
        in preparation of an eagerly anticipated first release
        candidate and passing the official TCK, at which point we
        are hoping to graduate from Incubator to TLP status for the
        1.0 release.</p>
</div>
<h3 id='Status20050425'>2005/04/25</h3>
<div class="section-content">
<p>Jackrabbit is doing well as a project and is attracting
        interest both within other Apache projects (Lenya and
        Graffito in particular) as well as from new folks in the
        Java community. We added two new committers, Jukka Zitting
        and Dominique Pfister, and have received sustained
        contributions from Serge Huber, Edgar Poce, Angela
        Schreiber, Felix Meschberger, and others.</p>
<p>Jackrabbit's only problem right now is continued
        reliance on JCP EG private discussions due to the
        unfinished nature of the JSR 170 Content Repository for
        Java Technology API. JSR 170 is expected to be submitted
        for final draft status in early May, after which all of the
        discussion can be moved to Apache lists. We anticipate
        graduating from Incubator sometime soon after that.</p>
</div>
<h3 id='Status20041117'>2004/11/17</h3>
<div class="section-content">
<p>The Jackrabbit project has completed all of the
        Incubator checklist items in terms of moving to Apache and
        getting the IP transfer done. With the help of Maven, we
        have a full website set up at</p>
<p>
          <a href="http://incubator.apache.org/jackrabbit/">
          http://incubator.apache.org/jackrabbit/</a>
        </p>
<p>with a few link bugs due to the svn/viewcvs integration.
        Our big task from now to graduation is to get the community
        more involved in development, planning features,
        integrating with some of the DB projects, and scoping out
        interesting applications to build on top of the
        interface.</p>
</div>
</div>
        <h2 id='Incubation+work+items'><img src="../images/redarrow.gif" />Incubation work items</h2>
<div class="section-content">
<h3 id='Project+Setup'>Project Setup</h3>
<div class="section-content">
<p>This is the first phase on incubation, needed to start
        the project at Apache.</p>
<p>
          <em>Item assignment is shown by the Apache id.</em>
          <em>Completed tasks are shown by the completion date
          (YYYY-MM-dd).</em>
        </p>
<h4 id='Identify+the+project+to+be+incubated'>Identify the project to be incubated</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2004-09-06</td>
              <td>Make sure that the requested project name does
              not already exist and check www.nameprotect.com to be
              sure that the name is not already trademarked for an
              existing software product. (fielding)</td>
            </tr>
            <tr>
              <td>2004-08-28</td>
              <td>If request from anywhere to become a stand-alone
              PMC, then assess the fit with the ASF, and create the
              lists and modules under the incubator address/module
              names if accepted. (fielding)</td>
            </tr>
          </table>
</div>
<h4 id='Interim+responsibility'>Interim responsibility</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2004-08-28</td>
              <td>Identify all the Mentors for the incubation, by
              asking all that can be Mentors. (fielding)</td>
            </tr>
            <tr>
              <td>2004-08-28</td>
              <td>Subscribe all Mentors on the pmc and general
              lists. (fielding)</td>
            </tr>
            <tr>
              <td>2004-08-28</td>
              <td>Give all Mentors access to all incubator CVS
              modules. (fielding)</td>
            </tr>
            <tr>
              <td>2004-08-28</td>
              <td>Tell Mentors to track progress in the file
              'incubator/projects/{project.name}.cwiki'
              (fielding)</td>
            </tr>
          </table>
</div>
<h4 id='Copyright'>Copyright</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2004-09-03</td>
              <td>Check and make sure that the papers that transfer
              rights to the ASF been received. It is only necessary
              to transfer rights for the package, the core code,
              and any new code produced by the project.
              (fielding)</td>
            </tr>
            <tr>
              <td>2004-09-28</td>
              <td>Check and make sure that the files that have been
              donated have been updated to reflect the new ASF
              copyright. (fielding)</td>
            </tr>
          </table>
</div>
<h4 id='Verify+distribution+rights'>Verify distribution rights</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2004-09-28</td>
              <td>Check and make sure that for all code included
              with the distribution that is not under the Apache
              license, e have the right to combine with
              Apache-licensed code and redistribute.
              (fielding)</td>
            </tr>
            <tr>
              <td>2004-09-28</td>
              <td>Check and make sure that all source code
              distributed by the project is covered by one or more
              of the following approved licenses: Apache, BSD,
              Artistic, MIT/X, MIT/W3C, MPL 1.1, or something with
              essentially the same terms.(fielding)</td>
            </tr>
          </table>
</div>
<h4 id='Establish+a+list+of+active+committers+%21'>Establish a list of active committers !</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2004-09-13</td>
              <td>Check that all active committers have submitted a
              contributors agreement. (fielding)</td>
            </tr>
            <tr>
              <td>2004-09-13</td>
              <td>Add all active committers in the STATUS file.
              (fielding)</td>
            </tr>
            <tr>
              <td>2004-09-13</td>
              <td>Ask root for the creation of committers' accounts
              on cvs.apache.org. (fielding)</td>
            </tr>
          </table>
</div>
<h4 id='Infrastructure+%21'>Infrastructure !</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2004-09-14</td>
              <td>Ask infrastructure to create source repository
              modules and grant the committers karma.
              (fielding)</td>
            </tr>
            <tr>
              <td>2004-09-08</td>
              <td>Ask infrastructure to set up and archive Mailing
              lists. (fielding)</td>
            </tr>
            <tr>
              <td>2004-09-14</td>
              <td>Decide about and then ask infrastructure to setup
              an issuetracking system (Jira). (fielding)</td>
            </tr>
            <tr>
              <td>2004-09-28</td>
              <td>Migrate the project to our infrastructure.
              (stefan)</td>
            </tr>
          </table>
</div>
<h4 id='Project+specific'>Project specific</h4>
<div class="section-content">
<p>
            <em>Add project specific tasks here.</em>
          </p>
</div>
</div>
<h3 id='Incubation'>Incubation</h3>
<div class="section-content">
<p>These action items have to be checked for during the
        whole incubation process.</p>
<p>
          <em>These items are not to be signed as done during
          incubation, as they may change during incubation.</em>
          <em>They are to be looked into and described in the
          status reports and completed in the request for
          incubation signoff.</em>
        </p>
<h4 id='Collaborative+Development'>Collaborative Development</h4>
<div class="section-content">
<ul>
            <li>Have all of the active long-term volunteers been
            identified and acknowledged as committers on the
            project? 
            <b>Yes</b></li>
            <li>Are there three or more independent committers?
            (The legal definition of independent is long and
            boring, but basically it means that there is no binding
            relationship between the individuals, such as a shared
            employer, that is capable of overriding their free will
            as individuals, directly or indirectly.) 
            <b>Yes</b></li>
            <li>Are project decisions being made in public by the
            committers? 
            <b>Yes</b></li>
            <li>Are the decision-making guidelines published and
            agreed to by all of the committers? 
            <b>Yes</b></li>
          </ul>
</div>
<h4 id='Licensing+awareness'>Licensing awareness</h4>
<div class="section-content">
<ul>
            <li>Are all licensing, trademark, credit issues being
            taken care of and acknowleged by all committers? 
            <b>Yes</b></li>
          </ul>
</div>
<h4 id='Project+Specific'>Project Specific</h4>
<div class="section-content">
<p>
            <em>Add project specific tasks here. 
            <b>None</b></em>
          </p>
</div>
</div>
<h3 id='Exit'>Exit</h3>
<div class="section-content">
<p>
          <em>Things to check for before voting the project out.</em>
        </p>
<h4 id='acceptance'>Organizational acceptance of responsibility for
          the project</h4>
<div class="section-content">
<ul>
            <li>If graduating to an existing PMC, has the PMC voted
            to accept it? 
            <b>n/a</b></li>
            <li>If graduating to a new PMC, has the board voted to
            accept it?
            <b>Yes</b></li>
          </ul>
</div>
<h4 id='Incubator+sign-off'>Incubator sign-off</h4>
<div class="section-content">
<ul>
            <li>Has the Incubator decided that the project has
            accomplished all of the above tasks?
            <b>Yes</b></li>
          </ul>
</div>
</div>
</div>
       </div>
   </div>
  
   <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span16 footer">
     Copyright &#169; 2009-2024 The Apache Software Foundation<br />
     Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
     Apache Incubator, Apache, the Apache feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
     
     
    </div>
  </div>
 </div> 
 </body>
</html>
