<!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>jaxme
 - 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='JaxMe+Project+Incubation+status'><img src="../images/redarrow.gif" />JaxMe Project Incubation status
</h2>
<div class="section-content">
<p>This page tracks the project status, incubator-wise. Items marked

        <strong>DONE
</strong>have been completed.

      </p>
<p><span class="graduated">The JaxMe project graduated on 2004-03</span></p>
</div>
        <h2 id='Project+Website'><img src="../images/redarrow.gif" />Project Website
</h2>
<div class="section-content">
<p>The website for JaxMe is at http://ws.apache.org/jaxme/
</p>
</div>
        <h2 id='Identify+the+project+to+be+incubated'><img src="../images/redarrow.gif" />Identify the project to be incubated
</h2>
<div class="section-content">
<ul>
        <li>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.
</li>
      </ul>
<p>On 20-Dec-2003 we have checked for the name JaxMe on
www.nameprotect.com using the free online research form. The domain
name search found the following names, none of which seems to be in
conflict:
</p>
<p>jaxmed.com jaxmetro.(com|net) jaxmetals.com jaxmeier.com jaxmerc.com
jaxmedicalinjury.com jaxmediator.com jaxmedal.com jaxmetrolive.com
jaxmedical.com jaxmedia.com jaxmediaweb.com jaxmenusonline.com
jaxmetroforddealers.com jaxmenus.com jaxmedicalpractice.com
jaxmetal.com jaxmediaonline.com jaxmetroford.com ajaxmetal.com
viajaxmenos.com ajaxmedia.com ajaxmetalstamping.com
krackerjaxmedia.com
</p>
<p>Search for US federal or canadian trademarks found no results.
</p>
<p>DONE
</p>
<ul>
        <li>If request from an existing Apache project to adopt an external
package, then ask the Apache project for the cvs module and mail
address names.
</li>
      </ul>
<p>See http://marc.theaimsgroup.com/?t=106198386600001&amp;r=1&amp;w=2
</p>
<p>
        <strong>DONE
</strong>
      </p>
</div>
        <h2 id='Interim+responsibility'><img src="../images/redarrow.gif" />Interim responsibility
</h2>
<div class="section-content">
<ul>
        <li>Who has been identified as the shepherd for the incubation?
</li>
      </ul>
<p>Davanum Srinivas, dims@yahoo.com
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Are they tracking progress?
</li>
      </ul>
<p>Progress is tracked in
</p>
<p>incubator/site/projects/jaxme.cwiki
</p>
<p>
        <strong>DONE
</strong>
      </p>
</div>
        <h2 id='Copyright'><img src="../images/redarrow.gif" />Copyright
</h2>
<div class="section-content">
<ul>
        <li>Have 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.
</li>
      </ul>
<p>According to

        <a href="http://cvs.sourceforge.net/viewcvs.py/*checkout*/jaxme/JaxMe2/docs/Design.html?rev=1.6#pastvotes">jaxme/JaxMe2/docs/Design.html
</a>the ASF is the legal owner of all sources that have been checked in
initially. New code and updates are produces by committers only who
have signed a CLA.

      </p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Have the files been updated to reflect the new ASF copyright?
</li>
      </ul>
<p>All Java source files have an ASF copyright notice included.
</p>
<p>
        <strong>DONE
</strong>
      </p>
<p>Verify distribution rights:
</p>
<ul>
        <li>For all code included with the distribution that is not under the
Apache license, do we have the right to combine with Apache-licensed
code and redistribute?
</li>
      </ul>
<p>The distribution includes the JaxMe jar files and the following files:
</p>
<p>ant.jar (Ant) junit.jar (Jakarta JUnit) log4j.jar (Jakarta Log4J)
xercesImpl.jar (XML Xerces) xml-apis.jar xmldb-api-*.jar (XML
Xindice) hsqldb.jar
</p>
<p>Proper license files are also included.
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Is all source code distributed by the project 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?
</li>
      </ul>
<p>
        <strong>DONE
</strong>
      </p>
</div>
        <h2 id='Establish+a+list+of+active+committers'><img src="../images/redarrow.gif" />Establish a list of active committers
</h2>
<div class="section-content">
<ul>
        <li>Are all active committers in the STATUS file?
</li>
      </ul>
<p>Active committers are: Davanum Srinivas, dims@yahoo.com Jochen
Wiedmann, joe@ispsoft.de Ias, ias@apache-korea.org Robert Burell
Donkin, rdonkin@apache.org
</p>
<p>
        <strong>DONE
</strong>
      </p>
<p>-*Do they have accounts on cvs.apache.org?
</p>
<p>Yes
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Have they submitted a contributors agreement?
</li>
      </ul>
<p>Yes
</p>
<p>
        <strong>DONE
</strong>
      </p>
</div>
        <h2 id='Infrastructure'><img src="../images/redarrow.gif" />Infrastructure
</h2>
<div class="section-content">
<ul>
        <li>CVS modules created and committers added to avail file?
</li>
      </ul>
<p>The CVS module is ws-jaxme and in active use.
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Mailing lists set up and archived?
</li>
      </ul>
<p>The mailing list is jaxme-dev@ws.apache.org. It receives
notifications from CVS and Bugzilla. Mailing list is archived in
Eyebrowse and on marc.theaimsgroup.com.
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Problem tracking system (Bugzilla)?
</li>
      </ul>
<p>Bugzilla is up and running, a project ws-jaxme and associated
components have been created.
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Has the project migrated to our infrastructure?
</li>
      </ul>
<p>See above.
</p>
<p>
        <strong>DONE
</strong>
      </p>
</div>
        <h2 id='Collaborative+Development'><img src="../images/redarrow.gif" />Collaborative Development
</h2>
<div class="section-content">
<ul>
        <li>Have all of the active long-term volunteers been identified and
acknowledged as committers on the project?
</li>
      </ul>
<p>All active committers and contributors of JaxMe 2 (sf.net) are now
active committers on ws-jaxme. There are active committers left which
are only working on JaxMe 1. It is anticipated, that they migrate at
some point, but so far they have expressed no interest.
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Are there three or more independent committers?
</li>
      </ul>
<p>The active committers indicated above are completely independent.
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Are project decisions being made in public by the committers?
</li>
      </ul>
<p>Yes, for example Ias was accepted as a new committer.
</p>
<p>
        <strong>DONE
</strong>
      </p>
<ul>
        <li>Are the decision-making guidelines published and agreed to by all of
the committers?
</li>
      </ul>
<p>No special guidelines have been published. The Apache style of
development is known to us all and silently accepted.
</p>
<p>
        <strong>DONE
</strong>
      </p>
</div>
        <h2 id='Organizational+acceptance+of+responsibility+for+the+project'><img src="../images/redarrow.gif" />Organizational acceptance of responsibility for the project
</h2>
<div class="section-content">
<ul>
        <li>If graduating to an existing PMC, has the PMC voted to accept it?
</li>
      </ul>
<p>Yes. See http://marc.theaimsgroup.com/?t=106198386600001&amp;r=1&amp;w=2
</p>
<p>
        <strong>DONE
</strong>
      </p>
</div>
        <h2 id='Incubator+sign-off'><img src="../images/redarrow.gif" />Incubator sign-off
</h2>
<div class="section-content">
<ul>
        <li>Has the Incubator decided that the project has accomplished all of
the above tasks?
</li>
      </ul>
</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>
