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

SYS-CON.TV
Cloud Expo & Virtualization 2009 East
PLATINUM SPONSORS:
IBM
Smarter Business Solutions Through Dynamic Infrastructure
IBM
Smarter Insights: How the CIO Becomes a Hero Again
Microsoft
Windows Azure
GOLD SPONSORS:
Appsense
Why VDI?
CA
Maximizing the Business Value of Virtualization in Enterprise and Cloud Computing Environments
ExactTarget
Messaging in the Cloud - Email, SMS and Voice
Freedom OSS
Stairway to the Cloud
Sun
Sun's Incubation Platform: Helping Startups Serve the Enterprise
POWER PANELS:
Cloud Computing & Enterprise IT: Cost & Operational Benefits
How and Why is a Flexible IT Infrastructure the Key To the Future?
Click For 2008 West
Event Webcasts
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.
    Latest Cloud Developer Stories
    Rackspace Hosting, the service leader in cloud computing, on Thursday announced its acquisition of SharePoint911, an industry leader in SharePoint consulting, training, and "JumpStart" services within SharePoint. The unification of both companies provides capabilities to deliver ...
    With Cloud Expo 2012 New York (10th Cloud Expo) now under 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 techn...
    Nimble, the social CRM platform has announced the launch of Nimble 2.0, billed as the “most social” CRM platform on the market today. Nimble was designed entirely with social CRM in mind and is the first social business platform that empowers companies with the ability to get clo...
    2011 was a year of rapid adoption for public and private cloud services. Instant and on-demand server provisioning was the driving force behind the massive growth. On top, cloud server templates and script automation simplified application installation for simple and pre-defined ...
    "Having been in the IT field for many years, I believe the cloud computing chapter in the industry is an exciting one and I am proud to be a part of it," said National Reconaissance Office (NRO) Chief Information Officer Jill T. Singer Tuesday, as it was announced that she was on...
    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