Why use Java for Web 2.0?

There's been a lot of talk lately about Web 2.0, and which technologies are going to take us there. We can debate the exact definition of Web 2.0, but I'd say a rough approximation would be an application which blurs the distinction between desktop apps and web apps. Many feel that the future is ultra-thin browser based client platforms like XUL or Ajax but I think that Java has a place, and will continue to grow in the future.

Traditional C++ desktop applications have had a long life span but only recently started embracing the network at a high level with modern frameworks like .NET. Web-apps have always existed on the network but can't deliver a rich user experience. Something like iTunes could never be written as a web-app (just look at non-success Microsoft's music store). Java, on the other hand, has been network oriented since the beginning, while still providing support for desktop apps. Java is the perfect platform for applications that need rich desktop style interfaces combined with the auto deployment and network centric features of the web.

Java gives you a full UI toolkit (Swing), a rich and fast graphics API (Java 2D), access to desktop services (files, printing, browser control), and a client deployment solution (Java Web Start). All of the pieces are coming together to make great Web 2.0 applications. But there is more we need, I think.

What Java needs to improve to make Web 2.0 apps better:

Embrace web-services on the client: We are definitely doing a lot in this area and Mustang brings even more web-services support. To expand this idea I'd like to make it as easy as possible to write a client that hooks into a webservice. What do you think would be the simplest possible interface for accessing a webservice (from a code perspective)? Visual Netbeans modules? Would XML/XSL/XPath in the language help?

Improve deployment: Sun is doing a lot to get Java onto as many desktops as possible but no technology will have 100% saturation. Detecting the user's current Java version (if any) and deploying a JRE is essential. A lot of this technology exists but it's not as widely understood as it should be. It's often a big mush of applets, javascript, browser detection, and browser controls. What's the best way to make this easier? Should we have a deployment toolkit? An O'Reilly book on Java deployment? Native executable launchers? What would you like to see?

Example apps: If you want to build a Swing app, where do you go? I'm not asking this as a rhetorical question. I'd seriously like to know where you learn how to build your apps. What examples do you look at? Would you like more articles on the whole desktop app development lifecycle? Some high performance example apps?

Make Java apps prettier: The combination of CSS, web design tools, and oodles of free templates makes it pretty easy to spruce the look of your web app. What can we do on the Java side? A Look and Feel gallery? More custom components? An artwork archive? What would make your applications look better?

Support non-Java app development: Java the language is only part of the Java platform. It's also the VM and, most importantly, the rich set of core and third party libraries. Many types of development better lend themselves to languages other than Java (ex: XML + visual tools for layout), but there is no reason to throw away the rest of the platform just because you aren't using the language for your whole app. That's one of the reasons Mustang comes with scripting built it. What else would you like to see to make the Java platform more friendly to programming in languages (or non-language) other than Java?

Java turned 10 recently and (I think) it's still going strong based on the clean language, robust API, and cross-version/cross-platform compatibility. What would you like to see the next decade hold for Java?

- Josh

Talk to me about it on Twitter

Posted November 14th, 2005

Tagged: java.net