Pop the champagne cork, JDOM Beta 10 has been released! OK, perhaps it's a little premature to bring out the champagne for a Beta release, but just barely. This Beta is a major milestone because it's the last scheduled Beta before the official 1.0 release, and things are in good enough shape that 1.0 should ship in mid-March.
It's hard to believe it's been nearly four years since Brett and I met at the O'Reilly Enterprise Conference on Java in Santa Clara and sat on the grass sharing our frustrations with DOM and SAX and planning an API that we'd prefer to use. According to my Palm Pilot calendar, we laid out the vision for JDOM on March 28th, 2000. I figure we'll ship before March 28, 2004. If we can ship 1.0 before it's been a full four years, I can just round down and call it three. :-)
What took it so long? Several things. I discovered XML is "fractally complex". At the highest level it appears only slightly complicated, but as you dig deeper you discover increasing complexity, and the deeper you go the more complicated it continues to become. Trying to be faithful to the XML standards while staying easy to use and intuitive was a definite challenge.
Another issue, perhaps even more important, was that JDOM long ago satisfied all my own use cases. It simply did everything I needed. I started the project because I had an itch to scratch, but the itch had gone away. Why not call JDOM finished at that point? Because there were gaps in areas like encoding internationalized text and XSLT processing and round tripping -- things I don't personally care much about but which needed to be done right. Turns out it's much less motivating to solve other people's problems than your own, so development on my end slowed a lot. Brett had already dropped his involvement in late 2000, so he couldn't lead the project, and others who were active in the project didn't want to take the mantle of leadership.
(Side note: As we got closer to the four year mark, JDOM began to be my own problem again. It wasn't that I had different use cases, I just didn't want to be the guy who never finished JDOM. There's nothing like a little face saving as a motivating factor.)
The third reason for our delayed development was JDOM's involvement in Sun's JCP as JSR-102. When I proposed that JSR, I didn't fully appreciate all the legal roadblocks going against an open source JSR. As Apache's representive to the JCP Executive Committee I fought to clear the roadblocks and in the end was successful (see my past blog posts) -- but that process took two years of wrangling with Sun, ate up much of what you could call my "volunteer energy", and fully exhausted my patience with the JCP. In the end, we haven't pursued JSR-102.
Looking at JDOM 1.0 now, it's going to be the best, most solid, most tested, and most polished 1.0 product I've ever seen. It feels like a version 5.0 product. In fact, it probably should be. Perhaps we shouldn't have worried so much about breaking backward compatibility after 1.0. We could have shipped Beta 7 as "1.0", and called Beta 8 "2.0". That's what happens in the commercial world, and had there been revenue to collect I'm sure we would have done the same thing. There's a "gotcha" with open source -- you don't always feel the same pressure to ship final releases. In some ways that's good because a 1.0 release is truly solid. In others it's bad because the 1.0 release can be too solid.
Whatever the reasons, we're about to ship and I'm thrilled. I want to thank everyone, from users to bug finders to bug fixers to redistributors, whose contributions have made JDOM what it is. I also want to thank by name a few of the core contributors. These are the people I rely on and without whom JDOM wouldn't be half as cool: Jon Baer, Laurent Bihanic, Jools Enticknap, Elliotte Rusty Harold, Brad Huffman, Bob McWhirter, Philip Nelson, and Alex Rosen.