|By Robert Eckstein, September 27, 2005|
Thinking of migrating to the Java 2 Platform, Standard Edition (J2SE) 5.0, code-named Tiger? You're not alone. Thousands of companies all over the world are giving J2SE 5.0 a try, and they like what they see. New language features, enhanced class libraries, better tool support, and desktop enhancements are just some of the reasons why many companies are making the switch.
In this article, we talk with Li Moore, software engineer at Google, Inc., about his company's switch from J2SE version 1.4 to 5.0.
Thanks for talking with me today, Li. Google is, of course, the worldwide search engine of choice. How does Google use Java technology?
Google makes extensive use of the Java platform. Large parts of popular Google products are written in Java. We also use Java in many internal systems and products under development.
Which core and enterprise APIs or technologies are critical to your work?
We make heavy use of core Java APIs including the Collections API,
java.nio. We also make heavy use of the Servlet API.
Did you expect that any changes with the 5.0 version of the JDK might be detrimental to your Java applications at Google?
Nope. Everyone was excited about the new language features, the new concurrency libraries, and the new monitoring and management facilities.
Were there any Tiger features that made you say, "Oh, this is great! We needed this a while ago"?
enums and generics at Google for years. Like everyone else, we wrote our own thread pool and work queue classes years ago.
Tell us about the migration process. What sort of issues and surprises did you encounter?
I learned about Tiger in the fall of 2004. I liked what I saw and took it upon myself to convert all of our Java development to JDK 5.0. I worked on the migration as a 20 percent project: Google lets its engineers devote 20 percent of their time to any project that they think is cool and in the company's interest.
We migrated to Tiger in stages. First, we tried it on existing code without using any of the new features. Of course, we ran into the same problem that everyone does --
enum is now a reserved word. That's an easy, if tedious, one to fix. Then we tested the performance of some key applications. We were pleasantly surprised when they ran significantly faster on the new release.
"When it came time to make the actual switch, we had no problems. We were pleasantly surprised by how easy it was. Developers were enthusiastic about the transition and quickly followed ... with changes that upgraded existing code to use the new language features."
I met with key people from various projects and got buy-in for the transition. We came up with a schedule that culminated in a flag day, when everyone felt comfortable switching. I mapped out a transition plan for each project and created documentation to help people with the transition. We had a little difficulty getting all the tests to pass. We discovered a few minor compatibility issues with the new release, which we reported back to Sun, which has since fixed them.
When it came time to make the actual switch, we had no problems. We were pleasantly surprised by how easy it was. Developers were enthusiastic about the transition and quickly followed flag day with changes that upgraded existing code to use the new language features.
If you could make one change to the Java core or enterprise APIs right now, what would it be? If you could add one feature, what would it be?
It would be nice to add a
clone() method to
Cloneable, but unfortunately that's not possible at this point. Also, it would be nice to make the
byte type unsigned. More realistically, I'd like to see a pluggable file system API like the one that Sun proposed in JSR 203.
Have you tested your applications against the prerelease of Java SE 6?
No, but we have started using some of the forthcoming concurrency utilities that are already available for use on the JSR 166 interest site.
Is there anything you would like to add?
Our developers were already excited about J2SE 5.0 several weeks before the transition. As soon as we switched, use of the new features just took off. Even something as simple as the new
for-each loop makes it so much more fun to write Java programs.
This release is purely an improvement, in terms of language features, libraries, stability, performance, and tools. I can't imagine why anyone would use the 1.4 release at this point.