Folks, Been chatting off-list with Kevin, who was the original author of the SQL Objectstore. This predated the JDO objectstore but had the same basic intent: to persist domain objects to an RDBMS.
Kevin originally wrote the SQL OS as the backend from apps he developed with Isis and the old HTML viewer. That was in a "previous life"; there hasn't been any development of the SQL OS over the last couple of years. Since graduating we haven't ever released SQL OS as a separate component. Kevin says he is now happy that we mothball (ie remove from the main build) the SQL OS code... if you have a reason to disagree, please speak now. ~~~ Being a home-grown implementation, the SQL OS isn't as sophisticated as the JDO OS, but one advantage it does have is to require no additional annotations/metadata; in other words the mapping is inferred entirely from the Isis metamodel. So the next question is: do we want to enhance the JDO Objectstore so that it too (so far as possible) requires no JDO annotations to be defined? Doing some googling I notice that DataNucleus provides a writeable metadata API [1], so it would be possible to do this to some extent at least. Or, is it better to be leave things as they are, with the Isis and JDO annotations sitting side-by-side? One metamodel for presentation, one for persistence.... For myself, I think that if it were possible to fully specify the DataNucleus metamodel through Isis, then the idea has merit. However, there there are concepts in DataNucleus metadata (such as the mapping of bidirectional relationships, the mapping of inheritance hierarchies, and the mapping of polymorphic references) that have no equivalent in Isis' metamodel. For these, I think we would have to also support the JDO annotations. One would then end up in a situation where some JDO annotations are inferred and implicit, but others must be specified explicitly. I think that'd be quite confusing, myself. Any thoughts on this topic welcome. Thx Dan [1] http://www.datanucleus.org/products/datanucleus/jdo/metadata_api.html
