Yeah. But to have truly pluggable persistence, then we end up having to
pick LCD features. For isntance, if we want JDO, iBatis, and
JPA/Hibernate as possible approaches, then our design has to pretty much
ignore transparent relationship manifestation that JPA/hibernate/Toplink
provide. True, the Store API could be common, but the assumptions about
the objects returned will be different.
For example, if we were using a JPA/Hibernate approach, then we could
have something in the style of:
ProjectGroup group = store.get(ProjectGroup.class,"myGroup");
for (Project project : group.getProjects().iterator()) {
do stuff;
}
But we would have to do a lot more work to get that for iBatis, for
example, which merely maps the tables/queries to classes, without any
assumptions about relationships. So we couldn't have the same object
model persisted and manifested from the same store impl, and get hte
same behavioural assumptions. If we went with the LCD features, then we
could implement it with iBatis, spring-jdbc, hibernate, jpa or anythign,
but we aren't really dealing with an articulated object model any more,
but an objectified set of tables. Our code would be highly
functional/relational, rather than OO. On the other hand, if we wanted
to go the higher road, we could still provide abstractions that could be
implemented using Hibernate/Toplink/WebObjects-EOF/JPA, since they all
share transparent mapping and manifestation of relationships.
So the choice here is what level of abstraction do we want, and what
functionality do we want to have to implement in our model, and what do
we want to implement via the persistent store mechanism.
We also need to ask ourselves what we gain by over-abstraction. What are
the actual benefits if swapping store implementations. What are the
expected scenarios where this would happen. I honestly don't think
we're going to find many. At most, I think we're going to move between
an O/R mapping framework to a pure OO database. But even that I doubt.
If it's just swapping in/out new RDBMS back-ends, most of the above
transparent persistence mechanisms already support a large variety of such.
Having said all of that, my vote (which no one need care about, since I
haven't had much time to actually contribute code here) is to support
hibernate with slight abstraction on top of it (modeled on JPA's entity
manager), so we get the benefits of transparent persistence without
requiring Java 5.0 - at least until we get to the point where we can run
in java 5 but execute maven/ant in java 1.4 and earlier. Once we are at
that point, maybe we can move to JPA (which is a small delta), or at
least update the abstraction some.
If we were to decide that, hey, screw jdk 1.4, let's just go with java5,
then I'd just suggest going for JPA as the abstraction. It's got
problems, but everything does, and it's an increasingly adopted standard
with some decent implementations.
Christian.
Rahul Thakur wrote:
These buzzwords have been making rounds on IRC and dev list :-), and
after slight digging around I found a reference to a similar
discussion here:
http://www.mail-archive.com/ibatis-user-java@incubator.apache.org/msg01251.html
Agreed that the store implementation for Continuum should be
pluggable, and if we are rethinking JPOX, then IMHO it might be worth
taking into account JPA and Java 5.0.
What do others think?
Cheers,
Rahul
--
*christian** gruber + process coach and architect*
*Israfil Consulting Services Corporation*
*email** [EMAIL PROTECTED] + bus 905.640.1119 + mob 416.998.6023*