YOUR FEEDBACK
andy.mulholland wrote: intriguing !!! We have full scale 'Mashup Factories' in Chicago USA and Utrec...


2008 East
DIAMOND SPONSOR:
Data Direct
Frontiers in Data Access: The Coming Wave in Data Services
PLATINUM SPONSORS:
Red Hat
The Opening of Virtualization
Intel
Virtualization – Path to Predictive Enterprise
Green Hills
IT Security in a Hostile World
JBoss / freedom oss
Practical SOA Approach
GOLD SPONSORS:
Software AG
The Art & Science of SOA: How Governance Enables Adoption
PlateSpin
Effective Planning for Virtual Infrastructure Growth
Fujitsu
Automated Business Process Discovery & Virtualization Service
Ceedo
Workspace Virtualization
Click For 2007 West
Event Webcasts

2008 East
PLATINUM SPONSORS:
Appcelerator
Think Fast: Accelerate AJAX Development with Appcelerator
GOLD SPONSORS:
DreamFace Interactive
The Ultimate Framework for Creating Personalized Web 2.0 Mashups
ICEsoft
AJAX and Social Computing for the Enterprise
Kaazing
Enterprise Comet: Real–Time, Real–Time, or Real–Time Web 2.0?
Nexaweb
Now Playing: Desktop Apps in the Browser!
Sun
jMaki as an AJAX Mashup Framework
POWER PANELS:
The Business Value
of RIAs
What Lies Beyond AJAX?
KEYNOTES:
Douglas Crockford
Can We Fix the Web?
Anthony Franco
2008: The Year of the RIA
Click For 2007 Event Webcasts
SYS-CON.TV
TOP THREE 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.

    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 JAVA STORIES & POSTS
    The one thing that unifies the distributed computing style known as SOA, in most of its manifestations, is self-describing data via the Extensible Markup Language (XML). The benefits of XML over opaque message formats in data interchange are well established. No matter if your fo...
    In the past couple of years, interest in Jetty has surged. Jetty is an open source Java-based web and application server and servlet container, but what else do you know about it? To commemorate the 12th anniversary of Jetty, here are 12 things that might surprise you
    JavaScript is one of the most interesting and misunderstood programming languages in common use today. Most developers will go their entire careers without realizing its full potential. It's not often that you get a language that supports the feature set that JavaScript does, whi...
    JavaScript 2 is becoming increasingly important. Learn how to take advantage of JavaScript 2 while still running in today's browsers. Leverage your current JavaScript and HTML skills to build applications that run in Flash 7-9, DHTML and more with no code changes! OpenLaszlo 4.2 ...
    JavaScript is a language with more than its share of bad parts. It went from non-existence to global adoption in an alarmingly short period of time. It never had an interval in the lab when it could be tried out and polished. JavaScript has some extraordinarily good parts. In Jav...
    Cloud computing is an opportunity for businesses to implement low-cost, low-power and high-efficiency systems to deliver scalable infrastructure. But moving to a cloud infrastructure is not necessarily as nice and clean as the providers would want you to think. With cloud infrast...
    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

    SPONSORED BY INFRAGISTICS
    In every field of design one of the first things students do is learn from the work of others. They ...
    There are many forces that influence technological evolution. After a decade of building enterprise ...
    2008 is going to be an important year for Rich Internet Applications. Most organizations are deliver...
    The OpenAjax Alliance is developing an Ajax industry wishlist for future browsers, using a dedicated...
    Infragistics announced the availability of two Community Technology Preview (CTP) User Interface (UI...
    The YUI development team has released version 2.5.2; you can download the new release from SourceFor...
    ADS BY GOOGLE