Comments
Richard Davies wrote: The UK has a good crop of technology pioneers in cloud computing - for example ElasticHosts, FlexiScale, Flexiant, OnApp - and also some strong government initiatives such as G-Cloud. We will have to see whether this kind of technical leadership converts into swift mass-market adoption or not.
Cloud Expo on Google News


2008 West
DIAMOND SPONSOR:
Data Direct
SOA, WOA and Cloud Computing: The New Frontier for Data Services
PLATINUM SPONSORS:
Red Hat
The Opening of Virtualization
GOLD SPONSORS:
Appsense
User Environment Management – The Third Layer of the Desktop
Cordys
Cloud Computing for Business Agility
EMC
CMIS: A Multi-Vendor Proposal for a Service-Based Content Management Interoperability Standard
Freedom OSS
Practical SOA” Max Yankelevich
Intel
Architecting an Enterprise Service Router (ESR) – A Cost-Effective Way to Scale SOA Across the Enterprise
Sensedia
Return on Assests: Bringing Visibility to your SOA Strategy
Symantec
Managing Hybrid Endpoint Environments
VMWare
Game-Changing Technology for Enterprise Clouds and Applications
Click For 2008 West
Event Webcasts

2008 West
PLATINUM SPONSORS:
Appcelerator
Get ‘Rich’ Quick: Rapid Prototyping for RIA with ZERO Server Code
Keynote Systems
Designing for and Managing Performance in the New Frontier of Rich Internet Applications
GOLD SPONSORS:
ICEsoft
How Can AJAX Improve Homeland Security?
Isomorphic
Beyond Widgets: What a RIA Platform Should Offer
Oracle
REAs: Rich Enterprise Applications
Click For 2008 Event Webcasts
SYS-CON.TV
Top Links You Must Click On


UltraLightClient
by Canoo Engineering AG

Remote Swing or server-side Swing - this is the most concise characterization of Canoo's UltraLightClient library (ULC). ULC offers server-side peer classes for Swing. For each Swing widget, there's a peer ULC class with essentially the same API.

The value added by ULC is the built-in split between client and server: ULC splits each widget into a client part and a faceless server part, and synchronizes these so-called half widgets at runtime.

The result is a client that's rich but thin, an idea that sounds puzzling today, since we associate rich clients with fat clients, and thin clients with HTML-based poor clients.

Minimal Footprint
An important characteristic of ULC is its minimal footprint. Despite the fact that it's a client/server technology, it imposes neither a framework nor an application server onto its user.

All infrastructural tasks are delegated to standard J2EE. The client relies on native Swing, communication is configurable as HTTP(S) or RMI over IIOP, and the server half widgets may run within a servlet or in an EJB container.

Conceptually, ULC is just a smart widget set. Its impact on an application is limited to the presentation layer. Programmers can employ their technology of choice for business objects, persistence, and other software layers. The only constraint ULC imposes is the thin client architecture.

Rich Thin Clients
ULC seeks to combine the benefits of HTML thin client applications and fat client productivity applications. Its starting point is the J2EE architecture with a server-side programming and execution model.

This makes ULC applications conceptually similar to HTML-based J2EE applications: all the business logic and the model of the presentation logic execute on the server. The client is a generic presentation engine, like a browser. The difference between a browser and the ULC engine is that the latter handles descriptions of rich graphical user interfaces instead of HTML.

While not new, the concept of rich thin clients has lost none of its appeal. It promises state-of-the-art usability combined with easy manageability and operation.

Let's see to what extent Canoo's ULC lives up to this promise.

Getting Started
Canoo's offering includes:

  • The core ULC library, currently v. 5.1.3
  • A visual editor for the WebSphere Studio Application Developer IDE, currently v. 1.0 (an Eclipse version is scheduled for Q2004)
  • A load and performance testing tool, currently v. 2.2
Installation is simple: you can either extract the distribution archive or use the platform-specific installer for Windows, Linux, Mac OS X, or Solaris. The distribution contains the ULC libraries for the server container and the presentation engine, a 250-page developer guide, a client/server simulator called DevelopmentRunner that enables executing applications in a single virtual machine, and the source code for six sample applications.

The best way to start is to run the sample applications, some of which are available as online demos on the Web site. To execute them on your own machinery, either double-click their launch scripts or drop one of the WAR Files into your preferred application server and invoke their start page within your Web browser.

The ULC-Set example is a good point of departure. It provides an overview of all widgets available. Each widget sample is a click away from its source code.

Given the rich set of examples, the familiar Swing API and the comprehensive developer guide, a Java engineer will learn quickly. My experience is that a programmer who knows Swing and the basics of client/server computing will be fully productive after a few days.

IDE Integration
A nice feature of ULC is that it fits into your preferred IDE. The only additional tool you need is the DevelopmentRunner that comes with the library.

The DevelopmentRunner executes the client and the server in a single virtual machine, shortening the edit-compile-test cycle. Using this tool is simple: just call it in the main method of your application class:

public static void main(String[] args) {
DevelopmentRunner.setApplicationClass(<Your ULC Main Class>);
DevelopmentRunner.main(args);
}

Since you can execute a ULC application entirely within your IDE, debugging and testing is easy. Your IDE's debugger and your favorite tools will all work.

For the purpose of monitoring interaction between client and server, the DevelopmentRunner offers a dialog window:

DevelopmentRunner.setUseGui(true);

This window displays the messages exchanged and allows simulating different bandwidths (see Figure 1). I like this latter option because it enables me to test the real-life behavior of my application within my IDE.

If your favorite IDE is Eclipse or WebSphere Application Developer, use the drag-and-drop visual editor that comes as an add-on product (see Figure 2). This editor corresponds almost exactly to the Swing-based editors available for these platforms. It generates Java and reflects code changes back to the user interface.

The somewhat privileged positioning of Eclipse and WebSphere is also documented by the fact that the DevelopmentRunner's user interface is integrated in their workbench.

Working with ULC
We've been working with ULC for two years now and have developed two applications. One of them is WÜRTHPHOENIX CIS (www.wuerth-phoenix.com), a company information system that is shown in Figure 3. WÜRTHPHOENIX CIS supports profit centers in their financial reporting, planning, and projection. It was created by three developers within 18 months, and has been rolled out as a standalone application and in a hosting datacenter where it's serving over 280 companies worldwide.

The second application we developed is WÜRTHPHOENIX ERP-Basic, an enterprise resource planning (ERP) application for small and medium-sized companies. WÜRTHPHOENIX ERP-Basic supports purchasing, planning, order management, and logistics, including inventory accounting as well as reporting and statistics. Ten developers completed it within 14 months.

For development, we use PCs with Windows 2000, running Eclipse 2.2.1, JDK 1.3.1, and ULC's DevelopmentRunner. An integration server and testing server round off our setup. They're running Windows 2000 and Linux Red Hat AS 2.1, respectively, with Jakarta Tomcat 4.1.29.

Our experience is that developing with ULC is indeed similar to working with Swing. The benefit as compared to Swing is that you essentially get a J2EE-compliant client/server application for free. The only client/server-related issue you need to remember is that your application runs in a multiuser and multithreaded environment:

  1. Avoid using static variables, because they're not thread-safe. Instead, manage objects in your server session, like in HTML/servlet applications.
  2. There is the option to communicate between sessions. You can, for example, realize a notification mechanism that propagates data changes to all sessions.
  3. When opening a modal dialog window, the thread won't wait as in Swing. As a consequence, set up a listener that reacts to the action closing the dialog.
A positive surprise for us was the scalability of ULC's thin client solution: the built-in minimization of client/server communication and the economic use of memory on the server work well for us. They enable our users to work over a worldwide VPN or over the Internet, sometimes connecting with slow modem lines, and to use a cost-effective server infrastructure.

A further important point for us is manageability of releases and production. Our applications run on a variety of platforms, for different customers. On the client side, the 350K presentation engine runs under Windows NT, 2000, and XP as an applet and a standalone Java application distributed with JNLP. On the server side, the applications run on Windows 2000, NT, XP, and Linux AS 2.1. ULC's J2EE compliance and the fact that it runs on any JDK from 1.2 upward enable us to support this wide variety with a single code base.

Extending ULC
It's possible to extend ULC to support new kinds of widgets and data objects. Example extensions are special value formatters for text fields, specific enabling strategies that are needed on the client, or widgets supporting graphic functions. There's an extension API that we've used to develop a special table widget. Unfortunately, the code samples of the distribution contain only one such extension. I wish that Canoo included more of them, or, better, offered a community service for the exchange of add-ons and code snippets.

Performance
ULC employs a number of techniques to minimize round-trips and communication, including local validation, lazy loading, caching, and compression of messages. Yet, the performance of an application never depends on its presentation layer alone. What counts is end-to-end performance, and this has to be measured individually for each application.

Canoo offers a tool for end-to-end testing, called ULC Load. With this tool you can record user interactions and replay scenarios in parallel to simulate any number of users. You can then measure response time and bandwidth. Furthermore, you can export the results for analysis. We found this tool to be simple and useful. It allowed us to test efficiently, and helped in the sizing of the production environment. Regarding performance, in our experience ULC was never the bottleneck in an end-to-end test run.

Canoo Engineering AG
Kirschgartenstrasse 7
CH-4051 Basel, Switzerland
Phone: +41 61-228-9444
Web: www.canoo.com

Specifications
Platform:
Any platform that supports the Java Runtime Environment 1.2.2 or later
JVM: Java Runtime Environment 1.2.2 or later
Java Application Server: Any J2EE compliant servlet and EJB container

Pricing:

  • ULC Library: $1,495 per developer. Includes an unlimited runtime license and all configuration options (deployment in servlet, EJB container, or standalone, with HTTP(S) or RMI/IIOP).
  • Visual Editor: $499
  • ULC Load: $3,000

    Test Platform
    Sun JRE 1.2.2/1.3.1/1.4.1/1.4.2.
    Windows 2000/XP, Red Hat Linux, and Solaris.
    BEA WebLogic, IBM WebSphere Application Server, JBoss, and Tomcat

    Snapshot
    Target Audience:
    Software developers
    Level: Intermediate to advanced
    Pros:

  • Simplifies rich client development for client/server apps
  • Small footprint, optimized client/server communication
  • Deploys easily in many configurations
  • Standards-based (J2EE, J2SE)
  • Integrates with existing Web infrastructure
  • Attractive pricing; no runtime license fees

    Cons:

  • Few out-of-the-box widgets beyond those of Swing
  • Use of third-party graphics libraries possible but requires integration

    Summary
    ULC is a lean but effective technology: you develop as if Swing widgets were running on the server. You have a homogeneous, server-side programming model, and get a scalable client/server application you can deploy in any J2EE environment.

    This is doubtlessly one of the most efficient ways to realize rich client business applications, in particular if you can share the J2EE infrastructure with HTML-based applications, thereby eliminating the need for developing a separate solution for functions like security, logging, load balancing, or monitoring.

    There are, of course, limitations. If an application needs more than the standard widgets offered by Swing, there is no out-of-the-box solution. For such cases ULC needs to be extended, typically by integrating third-party widgets or components.

  • About Peter Leitner
    Peter Leitner is a team leader and senior software engineer at Würth Phoenix. He has 10 years of experience developing object-oriented ERP systems and online/offline sales support systems.

    In order to post a comment you need to be registered and logged in.

    Register | Sign-in

    Reader Feedback: Page 1 of 1

    UltraLightClient reminded me of Droplets that were reviewed in the February issue. So I tried to figure out what the differences are. Here?s the result: 1) ULC integrates into J2EE servers while Droplets need their own application server, 2) ULC uses Swing on the client while Droplets uses AWT, 3) ULC?s server-side API is Swing-like while the Droplet widgets come with their own API, 4) the ULC client is pure Java while the Droplet client has some native code. 5) ULC uses J2EE communication infrastructure (HTTPS or RMI and IIOP) while Droplets use tunneling. Any other comments on this ?

    Yes, the first three versions of ULC were done by Erich Gamma, André Weinand and their team at OTI (Object Technology International). It was an OTI/IBM internal product at that time. Canoo licensed it in 2000, productized it and took it forward, integrating it to J2EE etc.

    This sounds like a product Erich Gamma and his friends have developed in the late nineties. Is there a connection ?

    I agree with Ray.

    ULC has API and programming model similar to Swing. The widget names and API names have been kept similar to Swing. So it is as if one is programming a fat client Swing GUI on the Server. In ULC, unlike in a Swing fat client, the client server distribution and communication is entirely handled by the framework.

    As a programmer one doesn''t have to worry about
    - sending/receiveing messages,
    - distributing and synching object models,
    - interfacing with middleware,
    - optimising client server round trips,
    - devising messy caching strategies
    - dealing with multiple languages and technologies (JSP, Java Script,...)

    and yet you get Rich Swing GUIs with an application independent thin client that deploys as an applet or through JNLP.

    Moreover, seamless containment of ULC applications in the J2EE containers saves the pains of proprietary application servers and additional infrastructure.

    There is an impliciation with the Canoo approach that was not readily apparent: this tool let''s one develop web applications in a manner much closer to regular Java/Swing style, with a regular compile/run/debug cycle.

    In particular the contortions one needs to endure in a JSP/Java Script/HTML environment just go away.


    Your Feedback
    Richard Ballestero wrote: UltraLightClient reminded me of Droplets that were reviewed in the February issue. So I tried to figure out what the differences are. Here?s the result: 1) ULC integrates into J2EE servers while Droplets need their own application server, 2) ULC uses Swing on the client while Droplets uses AWT, 3) ULC?s server-side API is Swing-like while the Droplet widgets come with their own API, 4) the ULC client is pure Java while the Droplet client has some native code. 5) ULC uses J2EE communication infrastructure (HTTPS or RMI and IIOP) while Droplets use tunneling. Any other comments on this ?
    Jeff Dawkins wrote: Yes, the first three versions of ULC were done by Erich Gamma, André Weinand and their team at OTI (Object Technology International). It was an OTI/IBM internal product at that time. Canoo licensed it in 2000, productized it and took it forward, integrating it to J2EE etc.
    Holger Wegeleit wrote: This sounds like a product Erich Gamma and his friends have developed in the late nineties. Is there a connection ?
    Smriti wrote: I agree with Ray. ULC has API and programming model similar to Swing. The widget names and API names have been kept similar to Swing. So it is as if one is programming a fat client Swing GUI on the Server. In ULC, unlike in a Swing fat client, the client server distribution and communication is entirely handled by the framework. As a programmer one doesn''t have to worry about - sending/receiveing messages, - distributing and synching object models, - interfacing with middleware, - optimising client server round trips, - devising messy caching strategies - dealing with multiple languages and technologies (JSP, Java Script,...) and yet you get Rich Swing GUIs with an application independent thin client that deploys as an applet or through JNLP. Moreover, seamless containment of ULC applications in the J2EE containers saves the pains of proprietary application serve...
    Ray Blaak wrote: There is an impliciation with the Canoo approach that was not readily apparent: this tool let''s one develop web applications in a manner much closer to regular Java/Swing style, with a regular compile/run/debug cycle. In particular the contortions one needs to endure in a JSP/Java Script/HTML environment just go away.
    Enterprise Open Source Magazine Latest Stories . . .
    Apache Deltacloud, the Red Hat-contributed ReSTful API that abstracts differences between clouds so services on any cloud can be managed – provided of course there’s a driver – has graduated from the Apache Foundation’s incubator and is now a full-fledged Top-Level Project (TLP). The...
    With Cloud Expo 2012 New York (10th Cloud Expo) just four months away, what better time to start introducing you in greater detail to the distinguished individuals in our incredible Speaker Faculty for the technical and strategy sessions at the conference... We have technical and st...
    AMD said late Tuesday that its chief sales officer Emilio Ghilardi had left the company and that CEO and president Rory Read is going to do his job while a replacement is sought. AMD didn’t say why Ghilardi left but it’s assumed Read wants his own people. Read is relatively new to th...
    During the lifespan of M3 (Monitis Monitor Manager) there has always been something lacking – timers. M3 execution procedure was outlined in this previous article. The execution mentioned in the latter was a one-time-execution, whereas server monitoring requires periodic invocati...
    Red Hat is putting its bought-in Gluster scale-out NAS storage technology, acquired in October, on the Amazon cloud. It’s styled Red Hat Virtual Storage Appliance for Amazon Web Services and other clouds are supposed to follow in short order.
    A new episode of the screencast series is now available at the OpenNebula YouTube Channel. This screencast demonstrates the new easily-customizable self-service portal for cloud consumers. Its aim is to offer a simplified access to shared infrastructure for non-IT end users. The scree...
    Subscribe to the World's Most Powerful Newsletters
    Subscribe to Our Rss Feeds & Get Your SYS-CON News Live!
    Click to Add our RSS Feeds to the Service of Your Choice:
    Google Reader or Homepage Add to My Yahoo! Subscribe with Bloglines Subscribe in NewsGator Online
    myFeedster Add to My AOL Subscribe in Rojo Add 'Hugg' to Newsburst from CNET News.com Kinja Digest View Additional SYS-CON Feeds
    Publish Your Article! Please send it to editorial(at)sys-con.com!

    Advertise on this site! Contact advertising(at)sys-con.com! 201 802-3021


    SYS-CON Featured Whitepapers
    ADS BY GOOGLE