Someone on IRC asked about JDO (Java Data Objects) this morning: “Why isn’t JDO all that widespread?” Well… that’s a good question. JDO was supposed to be such a great technology that it really should have done much better than it did in the industry.
Let’s be real here: JDO wasn’t bad technology at all. Kodo, for example, was used by TheServerSide.com and it worked quite well. (There was a performance… “problem” in October 2005, that had nothing to do with Kodo and everything to do with a craptastic use case of Kodo. Since then, Kodo’s parent company, SolarMetric, was bought by BEA, and subsequently snapped up by Oracle. I don’t know Oracle’s plans for Kodo; the sort-of-Oracle link to Kodo may or may not work for you, like the links to other products Oracle bought from BEA.)
Kodo wasn’t the only implementation of JDO, either; there were other commercial vendors (I’d name them except I’d be going off of memory and I’m pretty sure I’d get them wrong) and there was even an open source implementation, JPox, if memory serves. It wasn’t availability that killed the JDO star.
It was attitude.
Here’s the thing: Hibernate already existed by the time JDO should have taken over. And Hibernate was, for better or for worse, working and simple and people sort of talked about it. JDO… had a book. A series of books, actually. I tried to read them.
They reminded me of the book I have on JavaSpaces. The JavaSpaces book – which I’ve been rereading lately – is a good reference for someone who’s familiar with the technology. Once you know JavaSpaces, the book’s a wonderful refresher course; knowing JavaSpaces like I do (I’m pretty good at it, if I say so myself), the book is very clear, makes perfect sense, tells me stuff I need to know.
But I know it already, you say! Well… yeah.
There’s the problem. When I started to use JavaSpaces, the book was… interesting. And nothing more. It didn’t even tell me where to find a good implementation! It didn’t tell me how to get started with JavaSpaces – it told me how to keep going once I got started.
Bzzt. There’s the flaw; JDO had the same attitude of “We’ll help you rock once you start rocking, but getting started? You’re on your own.”
Kodo – the JDO implementation with which I’m the most familiar – did a decent job of helping you get started, but it still didn’t give me the warm fuzzies Hibernate or JPA or even db4o did. I don’t know what the quantitative differences were. I’ve tried to figure them out, but I still can’t tell you what the secret sauce was, besides something in the attitude.
All I can tell you is that it’s the same thing for a lot of disruptive, fantastic technologies. JSF managed to fix it, but JDO didn’t; JPA managed to fix it (by being part of a specification, at least), but SDO didn’t; JCache managed to fix it (by being implemented in lots of cache specifications, even if the spec itself is incomplete and has gone nowhere) but JINI and JavaSpaces didn’t.
Ouch.
Author’s Note: This is one of the old blog posts I decided to rescue from the migration to my new site. I don’t remember when it was originally posted; maybe 2008? Anyway, it had some interesting things I thought were worth saving.