ava recently celebrated its 10th birthday at JavaOne in San Francisco. It's come a long way in that time, and a decade is a long time in technology. It's a measure of its success, and of its great original design that it hasn't had to change a great deal, language- and architecture-wise, over that time. Of course what you have today may look a lot different from what you had 10 years ago, but these are as a result of evolutionary steps, rather than revolutionary steps.
One place where it was challenged 10 years ago, and is still challenged today is in the presentation layerin the facility to easily develop the richest user experience possible. The original Java had the AWT, which took a lowest-common denominator approach to allow for cross-platform ease. This of course led to problems when users of operating systems wanted functionality that was specific to that operating system, and the lowest-common denominator approach couldn't handle that. For example, Windows users are used to two buttons on their mousethe right button for context menus. But this couldn't be handled in a cross-platform way, as the Macintosh only used one button, and AWT had to handle both.
Through a succession of frameworks such as Swing and AWT, Java certainly improved, but hasn't reached critical mass in the development of rich, performant UIs, which are still the realm of Microsoft developers.
In addition, the trend pendulum has continually swung between the light client, that may have a lesser experience but is easy to deploy and maintain, and the rich client, which is more difficult to deploy and manage, but easier to use. Examples of the former have led to innovations around technology such as DHTML and CSS, and the latter has led to the continued evolution of Visual Basic and ActiveX towards .NET Windows Forms.
|Figure 1. Minding the Storefront: The Canoo ULC implementation of an online store allows lots of nice client-side customization.|
UltraLightClient from Canoo attempts to put Java back into the GUI picture by taking a best-of-all-worlds approach, starkly in contrast to the AWT least-common-denominator approach. In a nutshell, it involves a deployed 'engine' at the desktop that services components that are streamed off a server. This makes it quite similar in scope to XML UI services such as XUL and XAML, but, as it is a pure Java implementation, is potentially easier to manage.
Components are coded and built using Java to create innovative 'half-objects.' The client half of an object provides the display, user interaction and communication with the server. The server half provides the proxies to middleware and business logic. This could lead to a massive productivity boost, and potentially a performance boost relative to the XML UI technologies. No comparison for performance was made as part of this review, but, the architecture is clearly there to allow for some pretty high-performance applications.
But all this architecture isn't really worth anything unless you can create a good-looking GUI to place in front of your clients. This is where the UltraLightClient really excels. Take a look at Figure 1 and you'll see a pure Java implementation of the full UI for an online store.
This GUI comes as part of the samples installed with Canooand as you can see it is pretty rich indeed. All panes may be resized and stretched according to user Preferences, the performance is smooth and quick, and multiple color schemes and mouse operations, such as right-click context menus are supported.