In-Depth
Sun hasn't set yet on Java applets
- By Rick Moore
- December 31, 2002
There was a time, back in the mid-1990s, when a little language called Oak
was being developed by Sun. I recall bumping into it as I surfed the Web one
day. It looked interesting, but I wondered why we really needed another
language. ''That'll be a niche, if anything'' I thought to myself and quickly
moved on.
Of course you probably know how the story goes. A few years later, I started
seeing some interesting Web pages that were downloading things called ''Java
applets'' into my browser and running them automatically. This deserved some
investigation. I quickly learned that this Java language browsers seemed to
understand was the realization of Oak. Naturally, this flipped my opinion around
completely -- suddenly I was fascinated with learning a new language, especially
one that could run inside a browser.
The big surprise was that Java was a complete language that not only
supported applets, but could power standalone applications as well. It
alleviated all the tediousness of memory and pointer management, allowing
developers to focus on the programming problem. Another exciting feature was the
standard APIs available -- which were very complete by their predecessors'
standards -- that supposedly ran unchanged on any Java-enabled platform.
Even Microsoft became caught up in the Java excitement. Their JVM actually
outperformed Sun's at the time, and had some neat integration with COM/ActiveX
that allowed access to the DirectX APIs. Admittedly, Microsoft went a little too
far in their own direction, but at least we could count on applets to run just
about anywhere.
I would not be surprised if most Java old-timers have a similar story.
Intentionally or not, it was applet technology that initially introduced many
developers to Java. It took several years, in fact, before the power of Java as
a language was recognized beyond applets, and we started to see real Java
applications appear on the market.
What we wound up with
Today, Java is more revered as a platform
than it is for applets. Probably the greatest testimonial to this is its
emergence in the server-side arena. Today, you are either with J2EE or with
.NET. But oddly, Java as a language isn't really well suited for server-side
development. Think about it: Oracle, IBM, Microsoft and other leaders in
server-side technologies are constantly fighting over the rights to first place
in performance. That is because, unlike a desktop machine that only needs to
satisfy a single user, a server needs to provide for many users at once -- and
it has to be fast. Java is not known for its speed, so why do server-side
developers embrace it? Because it is a great language to work with, and now
everybody knows it.
But what happened to applets? They never took off, did they? We certainly
heard them touted and saw quite a few of them for a time, but then the
excitement fizzled out. Sun has not done anything to advance the applet API
since its inception. If you go to Sun's JavaSoft Web site, the root page does
not have a single applet on it. Even the applet tutorial does not have applets
directly embedded in it. But Sun is not alone here -- rumors that ''client-side
Java is dead'' are everywhere.
Sun's Microsoft disputes give Java applets another shove toward the cliff of
doom. Microsoft has responded with its own C# technology, which is analogous to
Sun's Java. But Microsoft's Java license from Sun does not allow it to update
its decrepit JVM to Java 2 standards, and the license for that JVM will
eventually expire. I was shocked when Microsoft released Visual J++ for .NET --
talk about a dead-end technology.
As you can see, Microsoft does not have much initiative to promote Java
anymore. Some XP systems shipped without a JVM at all. With these systems, when
you hit a page with a Java applet embedded, Internet Explorer (IE) offers to
download and install the JVM from the Internet. If you choose that option, you
will once again get Microsoft's ancient JVM. (Why on earth doesn't Microsoft
just link to Sun's Java plug-in instead? Please, Microsoft, just let your JVM
die.)
The age of Microsoft's JVM is worth expanding on, because Java 2's GUI
facilities are much more powerful than JDK 1.1, which the MS JVM is based on.
(Let's face it: Applets are all about the GUI experience.) Not only does the
latest IE barely run applets, they limp along without many of the niceties that
modern Java implementations have to offer.
Getting along with today's browsers
In reality, you probably run
either a Mozilla-derivative or MS Explorer as your browser. With IE, you either
get no Java support or Microsoft's tarnished JVM.
Current Mozilla-ites generally use Sun's Java plug, but it does not come with
the package, so you are only going to get Java if you want Java. The
installation process on Linux requires some symbolic links, which is OK for the
techno-geeks, but will not do for the emerging desktop user base. I have noticed
that Sun has been doing some revisions to their so-called open-source programs,
and I remain hopeful that the results will let distributors like RedHat
pre-install Java.
To help IE's Java support, Sun has enabled its latest Java plug-in for the
latest version of IE. Web pages can use the <object> tag to initiate a
download and install of the plug-in, which will allow IE to run the most recent
version of Java available from Sun. The only hitch is that it does not always
work. Serious errors that cause the browser to crash have plagued the plug-in in
the past. Because other IE apps are capable of running without problems, you
have to wonder why Sun does not fix the plug-in. If you dig into Sun's Web site,
it claims the issues lie with IE. Nevertheless, I am not convinced it is a
technology that can be relied upon, although I have had better luck with the
latest version from Sun. Maybe they fixed the bug they never had.
Java applets have their place
Although Sun is making some effort
to revive browser support for Java, the results remain to be seen. In the
meantime, browser vendors seem to have the attitude, ''Sure we can run Java; all
you need to do is install it.'' This is OK, but it kills one of the nice features
of Java applets: the ability to automatically load and run with the rest of the
Web page. On the plus side, once the user finally caves in and installs Java,
applets should run without any further intervention.
This is one of the things that sets Java apart from competing technologies:
security. Java applets run in a sandbox, which, in theory, prevents them from
doing nasty things to your system. They need not bother the user with warnings
and agreements; they just download and run like any other part of the Web
page.
Java applets are not the only technology with sandbox security. Macromedia's
Flash is a good example; by limiting capabilities to innocuous activities,
Macromedia has effectively 'sandboxed' developers. In fact, Java applet
requirements are now on par with Flash in that they both require a one-time
install to run. Flash is pervasive; if you have been browsing the Web for any
length of time, you will likely have installed Flash. This may be Java applets'
salvation as well if they are deployed widely enough to constantly nag users so
that they finally do the installation. It looks like we are heading in the wrong
direction, though, because the use of applets does not seem to be matching the
growth of the Web.
Applets were originally considered to be great at animations, but Flash often
produces much spiffier effects for the amount of effort required. Animated
.gifs, the poor man's Flash, are supported everywhere now, too. I doubt many
folks attribute the decline of applets to the growth of Flash, but I do believe
this is very plausible. It is ironic that earlier versions of Flash supported a
Java Player applet, suggesting that Java was more widespread than Flash. Perhaps
Macromedia's dropping support for the Java Player suggests that the opposite is
true today.
Despite declining enthusiasm and support, Java applets still have their
place. There are a number of roles that applets still fill better than most
other technologies.
First, they offer all the great benefits of the Java language itself,
including portability, faster development, powerful API libraries and so on.
Because this was a selling point for standalone Java applications, it remains a
strong argument for writing in-browser clients in Java compared to other
solutions. Flash offers a Java applet version, presumably for portability
reasons.
Processor-intensive visuals are currently the most common use of applets. The
number one applet download from jars.com at the time of this writing is
PulseText, which falls into this category. The key here is that we can offload
server-side processing to the client to save both CPU overhead and network
bandwidth. Another simple example might be a stock graph. Instead of generating
a large .gif file on the server and downloading it via standard HTML, an applet
could download just the data points and use the processing power of the client
to generate the graphics. This approach pays off if the typical client views
lots of graphs.
Keep in mind that they would not be restricted to displaying a graph; they
could be interactive with scrolling, labels, buzzers and so on, which leads to
another niche for Java applets: heavily interactive graphics. Yes, Flash,
JavaScript and CSS can go some distance, but they do not have the horsepower
Java offers. Games are the most obvious example. Remember those huge PacMan
machines in the arcades? Check out: www.javafile.com/games/pacman/pacman.php?cat=Fun+and+Games. A good example of business
applications is the many applets DigitalThink Inc. uses in its online
courseware.
Perhaps the biggest selling point for Java applets in my mind is persistence.
The astute reader will wonder: ''What? I thought Java had a security model that
surely prevents disk writes.''
This is very true, but most default security managers for Java applets allow
the applets to create a socket connection to the server from which they were
originally downloaded. (Note: For a short time, some of the Netscape 4.xx
releases were a little overly zealous in restricting this activity, but it seems
to be corrected with the newer Mozilla-based releases.) With a little
server-side development, you can stream anything you want between the applet and
the server. Many years ago at Intel's IT, I used this strategy to allow
employees to browse for files on a server from within a Web browser. Selecting a
file would simply redirect their browser to the correct FTP location. For the
record, I should mention that applets can write to the disk (or anything else
they want) if they are digitally signed, but doing so causes an ''Are you sure
you want to run this applet?'' dialog to appear, which pretty much defeats the
automatic nature of applets.
Browser-resident applications can be much more elegant using Java applets. By
this, I mean real applications running within the browser that do complex tasks
like e-mail or word processing. In addition to the persistence and client-side
processing I mentioned earlier, a full-fledged application running within the
browser benefits from the large number of Swing (in Java 2) and JavaBean
controls available. Developers are not limited to the primitive HTML form
elements. Not only that, but the user experience is much better than an HTML
form-based application. There is no waiting for Web pages to load up once the
applet has loaded -- feedback is immediate just like any native application. To
illustrate, check out http://javaboutique.internet.com/CatalogView/
and imagine what this database utility would be like in HTML.
Despite declining industry enthusiasm and support, Java applets still have a
part to play in our Web experience. The language itself is attractive for
developers and fairly portable once client browsers are configured correctly.
This makes Java a strong candidate for intranet applications where development
time is expensive and browser configurations are controlled. For intranets that
support multiple client platforms, Java applets are particularly
advantageous.
Internet apps must be more cautious about leveraging Java because browser
support is so varied. As always, requirements are the best justification. For
example, if both multiplatform support and complex GUI controls are required,
there are few alternatives to Java applets.
It is also reasonable to use applets on the Internet if they are compelling
enough to justify the hassle of installing the Java plug-in. A good example
would be a storefront configuration tool for an electronic shopping mall.
Shopkeepers would benefit from a more sophisticated graphical interface and a
more application-like experience that avoids slow form submissions. Done
correctly, this would be a selling point and new shopkeepers would accept the
one-time plug-in installation requirement without hesitation. The storefront
presented to shoppers could remain pure HTML to maximize visibility and restrict
support requirements.
If history has taught us anything, it is that computing trends act like a
pendulum. Right now the pendulum is angled toward server-side computing, but
perhaps we will see a day when it swings back to the client and the potential
benefits of applets are revisited in a more objective way.