June, 2005 Java News

Thursday, June 30, 2005 (Permalink)

The Eclipse Project has released Eclipse 3.1, an open source integrated development environment (IDE) for Java. Eclipse also doubles as a base platform for your own applications, an alternative to the AWT and Swing, and a powerful floor wax and dessert topping. The main new features in 3.1 are improved Ant support including a debugger, quick fixes for serial version IDs, rich client platform (RCP) wizards, and support for Java 1.5.

The release of Eclipse 3.1 inspires me to make public something I wrote privately to Tim Bray, now a Sun employee, a couple of days ago. He had written on his blog, "To be honest, I wondered whether all the NetBeans happy talk you find around blogs.sun.com might be partly comforting Sun-to-Sun cheerleading." Bray thinks no, but I think yes. Here's what I wrote him:

From where I sit on the other coast it very much looks like all the NetBeans happy talk is comforting Sun-to-Sun cheerleading. I think I can confidently say I have not heard from one single person outside of Sun who uses NetBeans in years. In fact the last time I actually remember meeting programmers who used the product was when it was called Forte and the competition was less strong. This goes across mailing lists, blogs I read, people I meet at user groups, consulting clients, students at my university, etc. I have never met one person outside of Sun who has told me they use NetBeans.

The majority of people I know using an IDE use Eclipse. When someone talks to me about their IDE, they talk about Eclipse. I get frequent, unsolicited e-mail about new Eclipse features and plugins. When I ask completely unrelated questions about subjects like profiling or GUI design, I often get answers that involve Eclipse. I never get an answer that involves NetBeans.

I also hear occasionally about IDEA. There clearly aren't as many people using it as there are using Eclipse, but there's a significant community of committed users out there. I don't see anything similar for NetBeans outside of Sun.

I do a lot of work on the Mac and I also know developers using XCode to write Java. I do occasionally hear a few questions on the Mac mailing lists about getting NetBeans to run on the Mac, mostly in frustration after the user has failed to get it working. Few if any of these potential users seem to stick with it. Most switch to Eclipse or XCode very quickly.

I've tried NetBeans several times myself and it strikes me as clearly and obviously not ready. It can't even get the menu bar in the right place. I mean that's the most basic first thing a Mac user looks for. An application that can't do that goes right in the trash bin. But I soldiered on. I have yet to get NetBeans to check a project out of CVS. As near as I can tell the CVS support is completely, absolutely broken; and has been in every version I've tried up through 4.1. Integration with source code control is one of the main reasons I use an IDE in the first place. If you can't do that, you have no chance of getting me to use the product. Eclipse's CVS support isn't great. In fact, I'd classify it as barely functional; but it is usable, if only barely. NetBeans isn't even barely usable yet.

Mostly I give up on each new version of NetBeans after discovering that CVS is still broken, but recently I tried 4.1 on a project on my local hard drive. Within minutes, NetBeans was completely hung and nonresponsive, so I trashed it yet again and went back to Eclipse. Maybe 4.2 will finally become usable enough to consider, but I'm afraid it's very obvious to pretty much everyone outside of Sun that NetBeans isn't worth the struggle. Eclipse isn't perfect, and it may well not be the best IDE you can buy, but it's good enough to get the job done. NetBeans isn't.

Tim tells me he's hearing from others about this too, and will write more on the subject soon.

Bernhard Fastenrath has posted GetOpt 0.94, an open source library that parses command line options such as -d, --help and -version. The command line options and responses can be stored in XML. Version 0.94 removes Mac OS support and changes the license to GPL. Java 1.4.2 or later is required.

Gaudenz Alder has released JGraph 5.6, a free-as-in-speech (Mozilla Public License/LGPL) graph component for Swing that requires Java 1.4 or later. JGraph is accompanied by Graphpad, an open-source diagram editor for Swing that offers Automatic Layout, Printing, Zoom, and much more. It is available in English, German and French. Version 5.6 improves the expand and collapse functionality and fixes bugs.

Wednesday, June 29, 2005

Eric Lafortune has released ProGuard 3.3, an open source Java "class file shrinker, optimizer, and obfuscator. It can detect and remove unused classes, fields, methods, and attributes. It can then optimize bytecode and remove unused instructions. Finally, it can rename the remaining classes, fields, and methods using short meaningless names. The resulting jars are smaller and harder to reverse-engineer." Version 3.3 fixes bugs and adds some more bytecode optimizations. Proguard is published under the GPL.

Tuesday, June 28, 2005

The Legion of the Bouncy Castle has released version 1.29 of the Bouncy Castle Java Cryptography API, an open source, clean-room implementation of the Java Cryptography Extension (JCE). It supports X.509 certificates, PKCS12, S/MIME, CMS, PKCS7, GOST, ISO 7816-4, Whirlpool, and lots of other juicy acronyms. It also includes its own light-weight crypto API that works in Java 1.0 and later, and does not depend on the JCE. Version 1.29 adds support for the GOST-28147-94 MAC algorithm, HMac-SHA224, HMac-SHA256, HMac-SHA384, and HMac-SHA512. It also fixes various bugs. Download it while it's still legal.

The Jakarta Apache Project has posted the third release candidate of HTTPClient 3.0. New features in 3.0 include:

RC3 fixes assorted bugs.

Monday, June 27, 2005

Once again, I'll be chairing the XML track for Software Development 2006 West in Santa Clara next March. The Call for Proposals for is now live. Besides XML, tracks include Web Services, Java, Emerging Technologies, C++, Requirements & Analysis, Testing & Quality, .NET, Mobile Development, Security, and People, Process, and Methods. We also have one new track this year, the Business of Software. Most sessions are 90 minute classes, but we also have room for half and full-day tutorials (I prefer half-day tutorials in the XML track), birds-of-a-feather sessions, and panels. Submissions are due by August 6th.

For the XML track, we're interested in practical sessions covering all aspects of XML. This is not specifically an XML show, so we tend to find that our audience responds better to more practical, how-to, basic sessions as opposed to more theoretical, high-level sessions. For instance, a simple introduction to XQuery would go over better than a detailed comparison of XQuery optimization techniques. One thing previous attendees have told us is that they'd like to see more new sessions at each show, so we're going to be looking preferentially for talks that have not previously been given at SD West.

Sunday, June 26, 2005

The Apache Software Foundation has posted the third alpha of Maven 2.0, an open source build tool for Java that's more declarative and less procedural than Ant. Maven is also much more authoritarian and less configurable than Ant. I've been using Maven lately as part of my work with the Jaxen project, and it has some nice features but I really can't recommend it. It's too controlling. If your build process doesn't look like what Maven wants it to look like, you're going to be fighting against it. Maven's probably a little easier to set up than Ant for basic tasks like build, test, and deploy. However, as soon as you want to do something a little different than Maven expects, you're S.O.L. It's really Maven's way or the highway. According to the Maven site,

Maven 2.0 will feel very different to a Maven 1.0 user - and perhaps a little strange. But it is a lot simpler to work with! The key changes from Maven 1.0 are:

  • Faster and smaller - The Maven core no longer uses Ant, Jelly or Xerces making it much smaller, has fewer dependencies and is perfect for embedding in other tools.
  • Defined build lifecycle - No more prereqs, preGoals and postGoals. The build is a series of well defined phases. This also means that the normal goal names are not used - compile, test and install work for any project type.
  • Built-in multiple project handling - Use the same goals on a set of projects, and aggregate the results.
  • Improved SNAPSHOT handling - Snapshots are now checked for updates only once per day by default - though can be configured to be once per build, on a particular interval, or never. A command line option can force a check - making it more like updating from an SCM.
  • No more properties files - All plugins are now configured from the POM (which is now called pom.xml).
  • No more maven.xml - Plugins are now easier to build and integrate, and are the only way to script your builds. (Note that additions may later be made to the POM to allow simple things that scripting was used for, such as goal aliasing).
  • No more Jelly - Plugins are primarily written in Java, though there are providers for other scripting languages. This release includes support for Marmalade, a scripting framework that supports an XML syntax similar to Jelly which can be used to integrate Ant tasks and has a Jelly compatibility layer.
  • Improved repository layout - Maven 2.0 supports both the existing layout, and an improved repository layout that has deeper, partitioned structure making it easier to browse.

The elimination of Jelly in favor of Java should be a real improvement. Extending Maven 1.0 was vastly too difficult. If plug-ins existed to do what you wanted, it was no big deal. If not, you really didn't want to try writing your own. For instance, Maven supports the Clover code coverage tool I use for XOM but but not the Cobertura code coverage tool I use for Jaxen. It was easier to write a separate Ant build file just for test coverage than to write a Maven extension to support Cobertura.

According to the web site,

The main new features in this release are:

  • Improved dependency management
  • Build profiles for environment specific settings and dependencies
  • Finalised build lifecycle
  • Proper handling of derived dependency type such as sources, javadocs and ejb clients
  • Beanshell plugin support
  • Improved reporting support, including internationalisation.
  • Improvements to the Ant tasks
  • Better plugin management, with the ability to select specific versions for use
  • Various plugin improvements

This release is very near to being feature complete, and the next release will be a feature complete beta-1.

Saturday, June 25, 2005

Sun has posted the fourth update release for Java 5.0 Tiger with dozens of assorted bug fixes. Also, "J2SE support for Windows 64-bit has progressed from release candidate to final release. This version runs on AMD64/EM64T 64-bit mode machines with Windows Server 2003 x64 Editions." As usual it's available for Solaris, Windows, and Linux.

Sebastiano Vigna has released version 4.4.2 of fastUtil, a collection of type-specific Java maps and sets with a small memory footprint and faster access and insertion. The classes implement their standard counterpart interfaces such as java.util.Map and can be plugged into existing code. However, they also contain type-specific methods. For instance, the CharList class has not only the usual add(Object o) method but also an add(char c) method. Version 4.4.2 adds a reset() method to FastBufferedInputStream. fastUtil is published under the GNU Lesser General Public License (LGPL).

Friday, June 24, 2005

In the long history of bad supreme court decisions, this one may not quite equal Dred Scott or Korematsu, but it's up there. The Supreme Court has now ruled that local governments can seize people's homes and businesses to enrich their political cronies. This must be a first: Rehnquist, Scalia, Thomas, and O'Connor getting it right while Stevens, Kennedy, Souter, Ginsburg, and Breyer get it wrong.

The Maven Project has posted the second alpha of Continuum, a "continous intergration server for building Java based projects." Continuum supports projects based on Ant, Maven 1, and Maven 2. It exposes web and XML_RPC interfaces, and provides e-mail notification of build failures. Code can be checked out of CVS and Subversion repositories. Alpha 2 adds asynchronous checkouts, forced builds, and per-project command line arguments. Furthermore, builds are now only added when a build is actually executed because something changed.

Thursday, June 23, 2005

The Eclipse Project has posted the third release candidate of Eclipse 3.1, an open source integrated development environment (IDE) for Java. Eclipse also doubles as a base platform for your own applications, an alternative to the AWT and Swing, and a powerful floor wax and dessert topping. The main new features in 3.1 are improved Ant support including a debugger, quick fixes for serial version IDs, rich client platform (RCP) wizards, and support for Java 1.5.

The release notes for this build haven't been posted yet, but this is only about a week after the last release so one assumes it's mostly bug fixes. The icon has changed a little, at least on Mac OS X. That's the new icon over on the right. I haven't noticed any other obvious changes. I do note that Eclipse still can't remember where my workspace is after I upgrade the application.

Bare Bones Software has released version 8.2.2 of BBEdit, my preferred text editor on the Mac. This is a bug fix release. BBEdit is $179 payware. Upgrades from 8.x are free. They're $49 for 7.0 owners and $59 for owners of earlier versions. Mac OS X 10.3.5 or later is required.

Wednesday, June 22, 2005

Sleepycat Software has released Berkeley DB Java edition 2.0.42. Berkeley DB JE is an open source, non-relational embedded database written in Java. The data is exposed through "a Java Collections-style interface, as well as a programmatic interface similar to the Berkeley DB API." New features in 2.0 include:

Java 1.4.2 or later is required.

Tom Copeland has released PMD 3.2, an open source tool for automatically checking Java code for various classes of bugs. Version 3.2 adds three new rules:

I tested this out on XOM. Surprisingly it found a lot of unread private fields, unused local variables, empty statements, and unnecessary imports that I thought Eclipse was checking for. In one case, an unused private field represented a real bug. On the other hand, the unused private methods check generated a lot of false positives.

Tuesday, June 21, 2005

Novell has released Mono, an open source implementation of Microsoft's .NET framework that runs on Linux, Unix, Mac OS X, and Windows. Mono includes an ECMA Common Language Infrastructure (CLI) runtime engine, a cross platform IKVM Java runtime engine, a C# 1.0 compiler, class libraries implementing the .NET 1.1 profile, the Gtk# 1.0 GUI programming toolkit, GNU Classpath for the CLI and a Visual Basic runtime. Version 1.1.8 adds support for DomainUpDown and NumericUpDown, incomplete DataGrid support, incomplete multiple document interface support, drag and drop for X11 and Win32, clipboard implemented for X11 and Win32, HelpProvider, ErrorProvider, Cursor class, ResXWriter and ResXReader, SWF.Timers and various bug fixes. is a bug fix release.

Gaudenz Alder has released JGraph 5.5.3, a free-as-in-speech (Mozilla Public License/LGPL) graph component for Swing that requires Java 1.4 or later. JGraph is accompanied by Graphpad, an open-source diagram editor for Swing that offers Automatic Layout, Printing, Zoom, and much more. It is available in English, German and French. This release adds a few methods and fixes bugs.

Monday, June 20, 2005

Day Software has released the final product of JSR-170, Content Repository for Java™ Technology API. "As the number of vendors offering proprietary content repositories has increased, the need for a common programmatic interface to these repositories has become apparent. The aim of the Content Repository for Java Technology API specification is to provide such an interface and, in doing so, lay the foundations for a true industry-wide content infrastructure."

Sunday, June 19, 2005

Rob Lougher has released JamVM 1.3.1, a free (GPL) Java Virtual Machine that "conforms to the JVM specification version 2 (blue book). In comparison to most other VM's (free and commercial) it is extremely small, with a stripped executable on PowerPC of only ~100K, and Intel 80K. However, unlike other small VMs (e.g. KVM) it is designed to support the full specification, and includes support for object finalisation, the Java Native Interface (JNI) and the Reflection API." Like most free VMs it relies on the GNU Classpath library. 1.3.1 provides various optimizations and bug fixes. JamVM only interprets code. It does not have a Just-In-Time compiler.

Saturday, June 18, 2005

Sun has submitted JSR 277, Java Module System, to the Java Community Process. Essentially this proposes adding versioning to JAR archives so you can ask for XOM 1.0, or 1.1 or 1.0b3 as necessary. This is planned to be part of Dolphin (Java 1.7). Comments are due by June 27.

Friday, June 17, 2005

The Apache Software Foundation has posted the first beta of Maven 1.1, an open source build tool for Java that's more declarative and less procedural than Ant. Maven is also much more authoritarian and less configurable than Ant.

This release focuses on the following objectives:

  • Integration of Maven 2 technologies such as Maven Wagon, Maven SCM and the new model code
  • Apache Ant 1.6.5 support
  • Upgrade to later releases of dependencies, in particular Jelly
  • Significant improvements in memory usage
  • Improved POM layout
  • Bugfixes

With just a few exceptions, Maven 1.1 is backwards compatible with Maven 1.0.

For a full list of changes, please see JIRA.

I've been using Maven lately as part of my work with the Jaxen project, and it has some nice features; but I really can't recommend it. It's too controlling. If your build process doesn't look like what Maven wants it to look like, you're going to be fighting against it. Maven's probably a little easier to set up than Ant for basic tasks like build, test, and deploy. However, as soon as you want to do something a little different than Maven expects, you're S.O.L. It's really Maven's way or the highway.

The Apache Commons Project has released Jelly 1.0. "Jelly is a Java and XML based scripting engine. Jelly combines ideas from JSTL, Velocity, DVSL, Ant and Cocoon all together in a powerful scripting engine. This is the first stable release of Jelly. It can be used as a standalone application to run scripts, or incorporated into your Java applications." I looked at Jelly when I was trying to integrate Cobertura into the Jaxen build process, but gave up fairly quickly. There are simply too many scripting languages out there today. Even if each of them has their own nice features (and it's not clear that Jelly does), one person can only learn so much. At last count besides Java I was also struggling with AppleScript, Python, Ruby, Perl, JavaScript, JSP, PHP, XSLT, VBA, and probably a few others I've lost track of. I don't know why language design seems to be such a tempting target to so many developers. Can't we resist the urge to create yet more languages with ever diminishing shares of an increasingly fragmented market?

Apparently not. One fork of the Groovy Project has posted a new version of their scripting language, jsr-02 or some such. I suppose creating an incompatible, unfamiliar language isn't exciting enough. They also need to use a new versioning scheme too. I have no idea how this relates to previous versions of Groovy or an eventual 1.0 release that may or may not ever happen. According to Guillaume Laforge, jsr-02 "is a very important milestone, I should probably say a quality-focused release. We've reached 1000 test cases, and counting... But apart from the usual user support, bug fixes, applied patches provided by our active and vibrant community, we particularly focused our efforts on two main quality factors: better error reporting and improved compile-time checks." 1000 test cases really doesn't impress me. XOM has over 1300 test cases, and it's a much less ambitious project. If Groovy's only got a thousand tests, no wonder it's having trouble.

Thursday, June 16, 2005

jutils.com has released lint4j 0.8.2, a free-beer "static Java source code analyzer that detects locking and threading issues, performance and scalability problems, and checks complex contracts such as Java serialization by performing type, data flow, and lock graph analysis." Version 0.8.2 fixes bugs and detects unnecessary declarations of interfaces and methods already implemented by superclasses/interfaces.

I tested lint4j on the XOM code base, but it didn't find anything new. At this point, that's down to the same batch of false positives I get every time I run this. I then ran it on Jaxen. These results were a little more interesting, including some isseus found by the new detectors such as "The method getText [in the LocationPath class] is already required by the extended interface Expr and can be removed." It also reported a lot of places where "This switch statement should be refactored to an if statement or inlined." For instance it flagged this method:

    public BinaryExpr createAdditiveExpr( Expr lhs,
                                          Expr rhs,
                                          int additiveOperator ) throws JaxenException
        switch( additiveOperator )
            case Operator.ADD:
                    return new DefaultPlusExpr( lhs,
                                                rhs );
            case Operator.SUBTRACT:
                    return new DefaultMinusExpr( lhs,
                                                 rhs );
        throw new JaxenException( "Unhandled operator in createAdditiveExpr(): " + additiveOperator );

lint4j classifies this as a pathological switch statement. According to the documentation, "A switch statement with less than three branches is better expressed as an if statement, and may be a result of incomplete coding, or a branch that has been commented out." I'm not sure I believe that. Is there any strong reason to prefer an if statement in methods like this? And what does it mean to inline a switch statement anyway?

David Hovemeyer and Bill Pugh have posted FindBugs 0.9.1, an automated open source tool for finding potential bugs in Java code. This release cures an accidental dependence on Java 1.5 in 0.9.0.

The Blackdown Project has released their version of the Java 2 Standard Edition for Linux 1.4.2-02. This includes a software devlopment kit, runtime environment, and Java plug-in for Linux on x86 and Sparc. It's based on Sun's source code for JDK 1.4.2_08. It is not open source. This release plugs a major security hole. All users should upgrade.

Andrei Kouznetsov has released Unified I/O 2.4, an open source (BSD license) class library that "allows random access to any data or stream (even over HTTP), and gives a clear difference between read only and read/write access." This release adds support for memory management.

Websina has released BugZero 4.1.1, a $1299 payware (+$300 for maintenance) Web-based bug tracking system that supports multiple projects, group-based access, automatic bug assignment, file attachment, email notification, and metric reports. Bug Zero is written in Java and can run on top of various backend databases including MySQL. 4.1.1 is a bug fix release.

Wednesday, June 15, 2005

Sun has released version 1.4.2_08 of the Java 2 Software Development Kit and JRE 1.4 and 1.5.0_03 of the Java 2 Software Development Kit and JRE 1.5 These versions plug two major security holes, as well as fixing a few dozen other assorted bugs. All users are strongly encouraged to update. It's available for Windows, Linux, and Solaris.

The Jakarta Apache Project has released Commons Lang 2.1, a "a host of helper utilities for the java.lang API, notably String manipulation methods, basic numerical methods, object reflection, creation and serialization, and System properties. Additionally it contains an inheritable enum type, an exception structure that supports multiple types of nested-Exceptions, basic enhancements to java.util.Date and a series of utlities dedicated to help with building methods, such as hashCode, toString and equals." Classes include:

Besides bug fixes and improved compatibility with Java 1.5, new and updated features in this release include:

A few classes and methods have changed in incompatible ways, so read the release notes before upgrading. There's a lot of good stuff here. Everyone should check it out, at least for the ideas even if you don't want to use the library.

Tuesday, June 14, 2005

The Eclipse Project has posted the second release candidate of Eclipse 3.1, an open source integrated development environment (IDE) for Java. Eclipse also doubles as a base platform for your own applications, an alternative to the AWT and Swing, and a powerful floor wax and dessert topping. The main new features in 3.1 are Ant 1.6, quick fixes for serial version IDs, and support for Java 1.5.

The release notes for this build haven't been posted yet. However I did notice that some of the menus have been reorganized a bit, and when I put the cursor in an identifier in Java code, Eclipse highlights that identifier in yellow, and all other occurrences of the same thing. It was a little distracting at first. I'm not sure if I like this feature or not. Maybe it will grow on me. If it doesn't I suppose there's a checkbox to turn it off somewhere. This release also feels faster than M7/RC1, which felt quite slow to me compared to earlier versions. This is all subjective. No hard numbers here.

Monday, June 13, 2005

ej-technologies GmbH has released version 4.0 of JProfiler, a $698 payware profiler based on the Java virtual machine profiling interface (JVMPI that can report on CPU usage, memory size, threads, and "VM telemetry" (whatever that is). New features in 4.0 include:

JProfiler is a useful tool, but mostly I'm pretty happy with my old 2.x version. The "exclusive deep size feature" sounds interesting. If it's what I think it is (details were lacking) just maybe it will convince me to pay the $179 to upgrade; but first I'll probably try some of the open source profilers that have been released in the last couple of years before deciding.

Matthias Kempka has released Coverlipse 0.9.0, an open source (Common Public License) Eclipse 3.0.x plugin for code coverage visualization of JUnit tests. Interestingly, the code coverage can be shown right in the Java editor in Eclipse. If this tool works (I haven't tried it yet, but I plan to) this would make it quite a bit easier to fill in holes in test coverage.

Svetozar Misljencevic and Dusty Lefèvre have released Yet Another Java Profiler 1.0, a free-as-in-speech (GPL) profiler based on the JVMTI.

Vlad Roubtsov has released EMMA 2.0.5312, an open source code coverage tool for Java. One interesting feature I haven't seen in other tools of this type: Emma can measure code coverage even when you don't have the source code for a package.

The Big Faceless Organization has released the Big Faceless PDF Library 2.4.2, a $700 payware (more if you want support) Java class library for creating PDF documents. The $1300 Extended Edition adds the AcroForms support, digital signatures, and the ability to import and edit and existing PDF documents. Version 2.4.2 improves supoprt for TIFF and JPEG and fixes bugs. Java 1.2 or later is required.

Sunday, June 12, 2005

David Hovemeyer and Bill Pugh have posted FindBugs 0.9.0, an automated open source tool for finding potential bugs in Java code. This release includes several new detectors including:

Furthermore, FindBugs can now be launched from Java Web Start. This release now requires Java 1.5.

As usual I tested this release on XOM. It found one problem that definitely looked like a bug: a next() method in a non-public Iterator that didn't throw NoSuchElementException when iterated too far. I'm not sure this could be triggered from the public interface, but I fixed it anyway. It also indicated what I'm pretty sure are some bugs in the Unicode canonicalization code. That really needs some more test cases.

Then I ran it across Jaxen. Jaxen doesn't have as long a history of being used as a test case for static code analysis tools, so this found a few more issues including some overbroad catch blocks. However, one of the big advantages of using these sorts of tools is that it helps you see the code in a new light. Even if the tool itself doesn't find the bugs, you may discover them on your own while looking at the issues it does find. Sometimes these are the most important problems. This time I found several of those including:

Finally I tested it on unreleased project that I haven't previously used static code analysis on. Here it found some real bugs, including a couple of particularly nasty ones. Bottom line: if you haven't ever used FindBugs before, it will find bugs in your code. And if you haven't used it lately, it's time to use it again.

Saturday, June 11, 2005

Sun's posted a beta of JavaMail 1.3.3. JavaMail is a basic library for performing POP, SMTP, and IMAP. I wrote about this in the final chapter of Java Network Programming. According to Sun, the "1.3.3 Early Access release contains over 20 bug fixes and enhancements, including support for more protocol-specific features and significant performance enhancements for base64 encoding and decoding."

Friday, June 10, 2005

From the "It's about time" department, I note with relief that IBM has finally released the Java USB API specification in the Java Community Process. This should have been done five years ago. Maybe now they can start thinking about Firewire.

The Apache Commons Project has released Commons Transaction 1.1, an open source Java class library that "provides utility classes commonly used in transactional Java programming. Version 1.1 aims at polishing (interface) oddities, improving locking and making the file store more flexible. Locking now is much more flexible, extensible and allows for rudimentary transaction management. There is a new lock manager that hides locks from the user and keeps track of all of them allowing for deadlock detection and more convenient management."

Mike Cannon-Brookes

Atlassian has released version 3.2 of JIRA, a $1200-$4800 payware J2EE-based bug tracking and project management server application. Version 3.2 improves search performance and adds support for multiple Subversion repositories. I've been using Jira lately with Jaxen and Apache. It's a definite improvement over Bugzilla. I'm not sure it really does anything that Bugzilla doesn't do (at least not anything I use) but the user interface is about a hundred times cleaner.

Michael Fuchs has posted version 0.64.2 of his DocBook Doclet that creates DocBook SGML and XML documents from JavaDoc. This release fixes some bugs.

Thursday, June 9, 2005

The Object Refinery has posted the first release candidate for JFreeChart (1.0.0-rc1), a free chart library for the Java platform. This release contains improvements to the legend mechanism, some API fixes, and many bug fixes. JFreeChart is licensed under the terms of the GNU Lesser General Public License (LGPL).

Wednesday, June 8, 2005

Beck et al Projects GMBH has released gui4j 1.1, an open source Java framework for writing Swing GUIs in XML. "The graphical user interface is created dynamically based on the XML definitions. Each GUI window is associated with exactly one top-level XML file. Each XML file can dynamically include other XML files to support complex GUI definitions. Each XML file is associated with a java object that acts as both a Controller and a Model for the GUI. There is a strong layer separation between the GUI and the Controller: GUI definitions in the XML files can access all Java methods of the Controller, but Java methods cannot access any GUI elements directly. Events are used to trigger changes in the GUI." Java 1.4 or later is required.

I've seen a few things like this before. I probably should have used something like this for my latest project but I was lazy and just went with straight Swing code written by hand instead. I'll have to remember this for next time. On the other hand, I am learning quite a bit about test driven GUI programming, some of which I'll be discussing at SD Best Practices in Boston in September.

David Flanagan has released Jude 1.0, an interactive Java documentation browser program that runs as a web server. However, only Mozilla derived browsers (including Firefox) are supported as clients. Jude is $32 payware.

The Eclipse Foundation has posted a preview of BIRT (Business Intelligence and Reporting Tools). "BIRT is an Eclipse-based open source reporting system for web applications, especially those based on Java and J2EE. BIRT has two main components: a report designer based on Eclipse, and a runtime component that you can add to your app server. BIRT also offers a charting engine that lets you add charts to your own application. BIRT is currently in community review for release 1.0."

Tuesday, June 7, 2005

Interesting Steve Jobs keynote at WWDC yesterday. I'm listening to it now through QuickTime. I wish they'd broadcast it live but better late than never. As usual though, it takes about a day for Steve Jobs' reality dissipation field to dissipate. For Java developers, the situation is not as rosy as it may have first sounded (or as Jobs claimed). Here's what seems to have been deduced so far:

On a non-Java note, I'm not sure yet but it seems likely that the new X86 PowerMacs will not be able to run Classic apps. That's a problem for me. I still have quite a few classic applications I need to run on a regular basis and several more I need to run occasionally. Some of them go back 15 years or more. I don't expect this to change.

Potential platinum lining I haven't heard anyone else speculate on yet: Someone, somewhere (VMWare?) is going to figure out how to make one box run Mac OS X, Windows, and Linux at the same time without the overhead of emulating processors.

Apple has released version 2.1 of Xcode, "Apple's tool suite and integrated development environment (IDE) for creating Mac OS X Universal Binaries that run natively on PowerPC and Intel-based Macintosh computers. The IDE provides a powerful user interface to many industry-standard and open-source tools, including GCC, javac, jikes, and GDB. Xcode is designed to fully support the Carbon and Cocoa frameworks and Java. It contains templates for creating applications, frameworks, libraries, plug-ins, Java applications and applets, and command-line tools. Developers can use Xcode to construct a user interface, test code performance, and perform many other common development tasks." It's a free download for ADC members. Xcode and its updates are free beer. With Mac OS X Apple wisely stopped charging for developer tools. You'll still need an ADC membership (including the free membership) to get a copy.

Monday, June 6, 2005

I'm as mad as hell, and I'm not going to take this anymore!

Sunday, June 5, 2005

Dan Creswell has released version 2.1.21 of the Blitz JavaSpaces Server Edition and version 1.0.9 of the pure Java edition. Blitz is an open source (BSD license) implementation of JavaSpaces that is Jini 2.0 enabled and implements smart indexing, tuneable persistence, and active/passive lease cleanup. These are bug fix releases.

Enterprise Distributed Technologies has released edtFTPj 1.5.0, a free (LGPL) FTP library for Java. A $1999 payware version adds support for FTP over SSL. 1.5.0 fixes bugs and improves compatibility with some servers.

Saturday, June 4, 2005

The Eclipse Project has posted the first release candidate of Eclipse 3.1, an open source integrated development environment (IDE) for Java. Eclipse also doubles as a base platform for your own applications, an alternative to the AWT and Swing, and a powerful floor wax and dessert topping. The main new features in 3.1 are Ant 1.6, quick fixes for serial version IDs, and support for Java 1.5. Changes since the last milestone release are mostly bug fixes.

I've been using 3.1M7 for a couple of weeks now, and it's a reasonable improvement over 3.0. The one new feature I really don't like is how it automatically hides a lot of your comments and code from you. It thyen further violates user interface principles so basic they often remain unstated to support this code hiding. For instance, if you select all and press delete, it doesn;t actually delete everything in the window. Instead it unhides all the pieces of code it had hidden from you before and you have to press delete a second time. I'm sure there's a checkbox somewhere deep in the preferneces to turn this off but so far I haven't found it. However, this is a minor quibble. Overall, 3.1 is a nice upgrade, especially if you're using Java 1.5.

Friday, June 3, 2005

In response to yesterday's challenge, Todd Ditchendorf has written a RatioFrame class that maintains a constant ratio. The basic trick seems to be a ComponentListener that sets the size of the frame on resize events:

    protected void addListener() {
        addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent evt) {
                int w = getWidth();
                int h = getHeight();
                if (w > h)

I'd already tried something similar to this myself, but for whatever reason mine didn't work nearly as smoothly as his does. So far his code only maintains the ratio of the frame, not the ratio of the component within the frame, which is what I really need; but it may be possible to fix it so it does that instead. Ditchendorf also reports that this has problems running in Java 1.4 and on Windows. Fortunately, for this project I can actually accept a solution that only runs in Java 1.5 on the Mac, at least for now. On the other hand, so far when I add this listener to my own program, it locks up so hard I have to reboot the machine (and this on Mac OS X, normally a relatively crash-resistant OS). This might require a lower level solution that doesn't rely on setSize.

The Apache Project has released version 1.6.5of Ant, the popular open source build tool. Version 1.6.5 fixes a bug related to the Move task.

Thursday, June 2, 2005

Here's a problem that's been bugging me for a while. I need a resizable Swing JFrame, but only at a fixed ratio based on one of its components That is, if the height of the component is doubled the width must be exactly doubled as well. Imagine, for instance, that the window contains a picture. The user should be able to click and drag the usual grow box to expand or shrink the window. As the user does this, the picture in the window should grow or shrink accordingly. However, the user cannot increase the height of the window without increasing the width proportionately and vice versa. In other words the ratio of the component restricts how the user can grow the window. A couple of key points:

Any ideas? I'll offer a free copy of Java Network Programming (or another one of my books of your choosing) to the first reader who responds with a real solution to the problem.

R. Rawson-Tetley has posted SwingWT 0.87, an open source, "100% pure Java library which very closely resembles the interface of Swing. The difference is that instead of using the Swing library, it drives native peer widgets from SWT" (the Eclipse GUI toolkit). With this library, Java/Swing applications can be compiled natively under Linux using gcj. It also allows Swing apps to use native widgets. This release improves JFileChooser and DefaultTreeCellEditor, adds many compatibility methods, improves font support, and fixes many bugs. SwingWT is dual licensed under the Common Public License and the LGPL.

Andrei Kouznetsov has posted a beta of Unified I/O 2.3, an open source (BSD license) class library that "allows random access to any data or stream (even over HTTP), and gives a clear difference between read only and read/write access." 2.3 adds support for explicit memory management.

Wednesday, June 1, 2005

CapTech Ventures has submitted JSR 275, Units Specification, to the Java Community Process. According to the JSR,

This JSR specifies one or more Java packages for the programmatic handling of physical quantities and their expression as numbers of units. The specification includes:
  • Interfaces and abstract classes with methods for unit operations:
    • Checking of unit compatibility
    • Expression of a quantity in various units
    • Arithmetic operations on units
  • Concrete classes implementing the standard types of units (such as base, supplementary, and derived) and unit conversions.
  • Classes for parsing unit specifications in string form and for formatting string representations of quantities.
  • A database of predefined units.

This is based on the withdrawn JSR 108. Comments are due by June 13.

Sun has posted a second proposed final draft of JSR 208, Java Business Integration (JBI). According to the draft,

JBI does not define a traditional application programming model. Instead, it embraces a service-oriented approach to structuring enterprise functions, where JBI plug-in components function as service providers and consumers. The APIs and SPIs defined in this specification are for the use of developers of service engines and binding components that “plug in” to the JBI infrastructure, as described above.

The term Service Engine (or SE) is used to refer to plug-in components that provide business logic, transformational services, etc. Service engines can take a wide variety of forms, depending on needs. In particular, some SEs can function as “containers,” presenting a unique programming model to users. For example:

  • An XSLT XML transformation engine can support multiple transformation types. In this case, the programming interface is essentially the XSLT language itself.
  • A WS-BPEL 2.0 business process execution engine. In this case, the programming interface is WS-BPEL itself.
  • An EJB container. In this case, the API is Java that conforms to the appropriate EJB specification.

Binding components provide the ability to use communications protocols to both access remotely provided services, and allow remote service consumers to access services provided within the JBI environment. Protocols can be as varied as the integration problems being solved require, but typical examples include

A Binding Component may choose to implement one or more communications protocols thus offering connectivity services to SEs and thereby enabling SEs to expose their services to remote consumers as well as enabling the consumption of remote services.

Vodafone has posted the public review draft of JSR 209: Advanced Graphics and User Interface Optional Package for the J2ME Platform. "The Advanced Graphics and User Interface (AGUI) Optional Package migrates many of the core APIs for advanced graphics and user interface facilities from the J2SE(tm) platform to the J2ME(tm) platform. These facilities include much of the functionality from Swing, Java 2D Graphics and Imaging, and Image I/O. Applications can use this functionality to develop advanced applications for consumer devices such as mobile terminals and home devices." Comments are due by July 18.

Teodor Danciu's posted version 0.6.8 of JasperReports, an open source (LGPL) Java library for generating reports from XML templates and customizable data sources (including JDBC). The output can be displayed on the screen, printed, or written to XML or PDF files. Version 0.6.8 a few various bugs.

Gaudenz Alder has released JGraph 5.5.1, a free-as-in-speech (Mozilla Public License/LGPL) graph component for Swing that requires Java 1.4 or later. JGraph is accompanied by Graphpad, an open-source diagram editor for Swing that offers Automatic Layout, Printing, Zoom, and much more. It is available in English, German and French. This appears to be mostly a bug fix release.

Older news:

January, 2005 January, 2004 January, 2003 January, 2002 January, 2001 January, 2000 January, 1999 January, 1998
February, 2005 February, 2004 February, 2003 February, 2002 February, 2001 February, 2000 February, 1999 February, 1998
March, 2005 March, 2004 March, 2003 March, 2002 March, 2001 March, 2000 March, 1999 March, 1998
April, 2005 April, 2004 April, 2003 April, 2002 April, 2001 April, 2000 April, 1999 April, 1998
May, 2005 May, 2004 May, 2003 May, 2002 May, 2001 May, 2000 May, 1999 May, 1998
June, 2005 June, 2004 June, 2003 June, 2002 June, 2001 June, 2000 June, 1999 June, 1998
July, 2005 July, 2004 July, 2003 July, 2002 July, 2001 July, 2000 July, 1999 July, 1998
August, 2005 August, 2004 August, 2003 August, 2002 August, 2001 August, 2000 August, 1999 August, 1998
September, 2005 September, 2004 September, 2003 September, 2002 September, 2001 September, 2000 September, 1999 September, 1998
October, 2005 October, 2004 October, 2003 October, 2002 October, 2001 October, 2000 October, 1999 October, 1998
November, 2005 November, 2004 November, 2003 November, 2002 November, 2001 November, 2000 November, 1999 November, 1998
December, 2005 December, 2004 December, 2003 December, 2002 December, 2001 December, 2000 December, 1999 December, 1998

[ Cafe au Lait | Books | Trade Shows | FAQ | Tutorial | User Groups ]

Copyright 2005 Elliotte Rusty Harold