Ultra Light Client (ULC) for Java is a widget set that enables a Swing Look and Feel for Servlets.
The presentation client of ULC is called UI Engine. It connects to the server part of a ULC application and displays the user interface of such an application. The UI Engine is implemented in Java and uses the Swing library for displaying the user interface and handling user input. The UI Engine is fairly small (~280 KB) and can be run as a Java application or a Java applet. The UI Engine itself is stateless. The entire presentation state is maintained entirely on the server side, although the UI Engine caches the presentation state in order to improve performance. Traditional "hand-crafted" thin clients, by contrast, still tend to have parts of the application logic on the client, which in the long run makes it hard to keep client and server in synch.
The server side consists of a framework for developing and deploying applications which use the UI Engine to handle display and user input management. A ULC application is run as a server process and can serve many client UI Engines. The framework provides a set of user interface widgets which are customized for thin client applications. From a development perspective the application programmer interface (API) resembles the Swing library, although the widgets have been streamlined for distribution and minimizing network traffic. Experience has shown that developers familiar with Swing become productive in a very short time, usually less than a week. From a software development perspective the distributed architecture is transparent and therefore resembles the implementation of a fat client.
For more information go to http://www.canoo.com/ulc/. Check out the trial version!
There is another important difference: while in X all the logic is on the server, the UltraLightClientJava has specialized parts of the presentation logic on the client! There are for example validations of text entries that can be evaluated locally without server roundtrip. 'Enablers' allow you to set the 'setEnabled()' state of a widget based on the state of other enabling widgets. Again locally without server roundtrip. The trick is here to set some kind of constraints that are evaluated by the UI Engine. -- DierkKoenig
I like Java a lot, use it every day, and recommend it for many purposes. But... There are Java clients, and there are ultra-light clients, but there are not ultra-light Java clients, at least not in the absolute sense. A Java runtime alone (before you run anything at all, light or otherwise) is pretty heavy compared to complete applications written in various other languages. An interesting illustration of this is the Opera browser. The Java support add-on is considerably larger than the browser itself. -- KyleCordes