As part of finishing up a Shale example app that uses Java Persistence
Architecture (JPA) ... a refinement of the "mailreader" example that I
ported to Shale and JPA for JavaOne but needed to be cleaned up before being
published ... I'm planning on creating a couple of new things in our source
repository:

* A new examle app (shale-apps/shale-mailreader-jpa) that implements
 the MailReader functionality, but uses JPA entity classes.  No real
 issues here, with respect to the repository structure.

* A "sandbox" area, with an initial Maven project that creates the
 entity classes for the USERS and SUBSCRIPTIONS tables themselves,
 plus the JPA persistence unit that defines them.  This should be
 something different than a typical Shale example, because none of
 these classes have any direct dependence on Shale ... they are more
 along the lines of the mailreader-dao project that is part of the Struts
 sandbox, but doesn't have any direct dependence on Struts.

Before doing so, it's probably worth spending some time figuring out how we
want the source repository to be organized -- which, in turn, is directly
affected by our thoughts on what (if any) artifacts we would plan on
releasing separately.  So, let's talk about that question first, and then
figure out how it might affect the overall organization.  Here's what I have
thought about so far (with references to where things *currently* live, not
where they might end up):

(1) The Shale master POM (maven/master-pom).  This needs to be
    separately releasable because it actually needs to be released before
    a Shale release can be done that depends on it.

(2)  The other Shale "parent" POMs (top level, shale-apps, shale-dist,
    and the proposed sandbox).  IIUC, these only need to be separately
    releaseable if we ever want to separately release something that
    depends on them.  For example, a decision to allow ourselves to
    release the example apps independently of the framework would
    require that we release the shale-apps POM separately as well.

(3)  The individual Shale-based example apps.  I've seen many projects
    go through the decision process about whether to actually release
    such things separately, and most of them (so far) have opted not to
    do all the extra work.  I'm leaning that way as well ... the corner
case
    for me is if you want to ship a *new* example app, but I suppose that
    people interested in the samples would be willing to use snapshot or
    nightly build versions (at least until we released an x.y.z update to
the
    framework :-).

(4)  The individual pieces of the framework.  Although we have these
    segregated for reasonable technical reasons (primarily having to do
    with the dependencies that get imposed on end users), I can't really
    see us trying to do releases of these things separately.  But it would
    be technically feasible to do so, if we thought it wise.

What do you think?

Once we have decided what we think we might actually want to release
separately, we can have Wendy guide us into the best overall organization of
the source repository :-).

Craig

Reply via email to