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