Apache OpenEJB Status



PROJECT STATUS
==============

  OpenEJB is a podling sponsored by Apache Geronimo in the Apache Incubator.
  For information on incubation please visit the project page at
  http://incubator.apache.org/projects/openejb.html

PENDING ISSUES
==============
2006-07-12  Confluence needs to be migrated
2006-07-12  Website needs to be setup
2006-07-12  SVN needs to be migrated
2006-07-12  JIRA needs to be migrated
2006-07-12  CLAs need to be on file

RESOLVED ISSUES SINCE LAST STATUS
=================================
2006-07-12  Mailing lists need to be moved with all subscribers

RELEASE STATUS
==============
None

REFERENCES
==========
Status file     http://svn.apache.org/repos/asf/incubator/openejb/STATUS.txt
User List       openejb-users@incubator.apache.org (will be renamed to -user: see INCUBATOR-24)
Developer List  openejb-dev@incubator.apache.org
Commits List    openejb-commits@incubator.apache.org
Source Code     http://svn.apache.org/repos/asf/incubator/openejb/
Issue Tracking  http://jira.codehaus.org/browse/OPENEJB

Committers (these will be added to asf-authorization for the project)
    ApacheID    CodehausID  Name
    dblevins    dblevins    David Blevins
    gdamour     gdamour     Gianny Damour
    hogstrom    hogstrom    Matt Hogstrom
    jgenender   jgenender   Jeff Genender
    jwhitlock   jcscoobyrs  Jeremy Whitlock
    jlaskowski  jlaskowski  Jacek Laskowski
    brett       brett       Brett Porter
    jvanzyl     jvanzyl     Jason van Zyl
    bayard      N/A         Henri Yandell
    dain        dain        Dain Sundstrom
    dsh         cyberodin   Daniel S. Haischt
    djencks     djencks     David Jencks
    kevan       kevan       Kevan Miller
    adc         maguro      Alan Cabrera
    ammulder    ammulder    Aaron Mulder
    lajos       lajos       Lajos Moczar
    <yourid>    <yourid>    <your name>

Requested accounts:
    Name              Preferred Apache ID(s)      E-mail address on CLA          Status
    Jeremy Whitlock   jwhitlock                   jcscoobyrs@gmail.com           Account Created
    Daniel S. Haischt dsh                         me@daniel.stefan.haischt.name  Account Created
    Lajos Moczar      lajos                       lajos@galatea.com              Account Created
    Paulo M. Lopes    pmlopes                     pmlopes@scratchydreams.com     Waiting for CLA to arrive

Other CodehausIDs: (remove yours if you've added it above - regardless these will be mapped to Apache IDs where they exist)
    chirino (apache: chirino)
    dandiep (apache: dandiep)
    epunzalan (apache: epunzalan)
    jboynes (apache: jboynes)
    jtolentino (apache: jtolentino)
    rmonson_us (never committed post-exolab)
    tim273 (Tim Urberg, apache: none)

Old IDs in the SVN repo (not current committers):
    d_jencks (map to djencks)
    dsundstrom (map to dain)
    gudujarlson (Mike Bresnahan, apache: none)
    iceant (Pizer Chen, apache: none)
    no_author (cvs2svn, can be left alone or mapped to whatever ASF uses for that)
    sreich (Stefan Reich, apache: none)
    uid73143 (r54 only, appears to be dblevins - trunk/openejb0/contrib/dblevins/openejb_lists.rc)
    yatzek (map to jlaskowski)

Pre-SF.net IDs I (dblevins) can remember:
    arkin (Assaf Arkin, apache: assaf)
    jdaniel (Jerome Daniel, apache: none)
    omodica (Olivier Modica, apache: none)
    rmonson (Richard Monson-Haefel, apache: rmonson_us)
    (more i can't remember)

