Java Plugin Framework (JPF) 0.8 and JPF-Demo 0.6 released
New version of JPF is available for download. This release features many improvements to make Framework usage much more simple and comfortable.

The major changes are:

* Introduced UniqueIdentity interface in the registry API to mark all plug-in elements that may have unique identifier (plug-in descriptor, plug-in fragment, plug-in prerequisite, library, extension point and extension).
* Introduced special implementation of PathResolver that transparently makes shadow copy of plug-in before resolving it to the application. Among other things this helps to avoid locking of JAR files by application that prevents "hot updating" of plug-ins. For implementation details and configuration options see javadoc for org.java.plugin.standard.ShadingPathResolver class.
* Introduced "Single File Plug-in" Ant task to package plug-ins as ZIP files that may be executed later directly (part of JPF Tools).
* Introduced "Plug-in Info" Ant task to read plug-in ID and version from manifest file into project properties (part of JPF Tools).
* Introduced "JPF Boot" library to simplify running JPF based applications.
* Added Path and version info elements to jpf*.jar libraries manifests. Version number no longer included into JAR file name.
* Introduced utility class org.java.plugin.util.IoUtil to hold useful I/O, File and URL manipulations.
* Updated project documentation.

Variations of JPasswordField
We've been gathering input from customers on various features they would like to see us implement. At such a meeting one customer requested a variation of JPasswordField. I figured it would be interesting to blog on how you could modify JPasswordField to vary the level of feedback it gives you. I'll cover various pieces of Swing's text architecture in implementing one variation, as well as a demo. If you want to cut to the chase, and have 1.5 installed, here's the demo...

Swing Style Aspect Part 2
Seems a few folks don't get what my previous post about the Swing Style Aspect was all about, so I decied to answer a few of the comments in a post. First and foremost, this is merely a proof-of-concept and means of playing with AOP. Second, aspects provide another way of doing things and the results can certainly be achieved through other means. You don't have to like or use AOP, but I do and I'm simply playing with idea here.

Two folks asked why I couldn't simply use a factory class to vend styled JLabels as such...

An Interview with Scott Violet and Tomas Pavek on Netbeans 5.0 and Matisse
Developing graphical user interfaces (GUIs) used to be a tricky part of Java technology programming. Although Java Foundation Classes/Swing (JFC/Swing) technology has been around for quite a while, designing professional-looking, cross-platform GUIs can be tedious and prone to error. All this has changed with NetBeans IDE 5.0 and Project Matisse.

Project Matisse solves the core problem of GUI creation by making the layout design of visual forms much easier. The project extends the NetBeans IDE 4.1 Form Editor to support a free design paradigm that exposes simple layout rules that are easy to understand and to use quickly.

NetBeans IDE software engineer Roman Strobl interviews Project Matisse creators Scott Violet and Tomas Pavek.

When to use Eclipse RCP
As we start talking more and more about Eclipse RCP, I find it important to be able to describe when someone should consider using Eclipse RCP, instead of alternative technologies. If anything it starts to help people better understand the capabilities of Eclipse RCP.

In the space of platforms for rich user applications there seems to be a number of potential solutions, including Eclipse RCP, AJAX, MS .Net and Flash. (I am sure I am missing other potential solutions, feel free to add a comment.) At the high level, I think there are a couple of decision points that lead you to a different technology alternative...

Using Jython and Swing
Jython is currently, by far the most useful of the the three main Python implementations, Jython, CPython and IronPython. It allows access to the Java standard library which often provides more standard, better defined, and certainly better documented alternatives to much of what is in the Python standard library. It is also more cross-platform than .NET bound IronPython and offers superior multithreading support to CPython.

Its well known within the Jython community that having first-class functions in Python makes development with Swing more productive in Jython than it is with Java, by allowing us to attach functions or methods directly to Swing callbacks such as actionPerformed, without the need for anonymous classes or excessive need for interface implementation. This example taken from What's Good About Jython? shows this in action...

Eclipse BIRT 2.0 M3 Released
The Eclipse Business Intelligence and Reporting Tools (BIRT) team has released Milestone 3 of BIRT 2.0. This milestone showcases some of the more lofty features of the 2.0 release, including library and template support, a new charting wizard, chart SVG output, a new XML data source and improved PDF and Report generation performance.

Substance 2.1 Released
Substance look-and-feel has reached the 2.1 release, with a lot of new features and a lot of bugs fixed . During the RC stage, all reported reproducible defects have been fixed, including high-priority regression behaviour of tabbed panes and toggle buttons. In addition, the startup time of Substance has been improved by 80%.

The new features in this release include:

  • Plugin infrastructure that provides support for third-party components and allows separation of core classes and add-ons, such as custom themes or watermarks.
  • JGoodies drop shadows on popup windows (menus, tooltips, etc)
  • Optional heap status panel in the title pane
  • Alignment of menu items
  • Indication of frames / tabs with modified and unsaved content
  • Optional close buttons on tabs with listener notification
  • Option for changing the base font of core Swing components
  • Focus ownership indication
  • Additional color chooser panel from Xoetrope XUI
  • Twenty one additional themes in theme pack plugin
  • Brushed metal watermark
  • Support for custom NetBeans components
  • Nine additional button shapers, including the one that draws rectangular buttons with slightly rounded corners (as in Windows XP)

The Quaqua look and feel covered in Chapter 5 of Desktop Java Live has released a new version:

Quaqua Look and Feel 3.5 Released
The Quaqua Look and Feel (Quaqua) is a user interface library for Java applications which wish to closely adhere to the Apple Human Interface Guidelines for Mac OS X.

Version 3.5 provides bug fixes for previous versions as well as the following notable new features:

* Reduced start up latency of the QuaquaLookAndFeel.
* Improved performance and fidelity of FileChooserUI.
* All new SplitPaneUI with "plain" style and "bar" style.
* Slide-in/slide-out transition effects for JSheet components.

Quaqua can be licensed using either a GNU Lesser General Public License (LGPL) or using a Modified BSD license.

Quaqua is free for commercial and non-commercial use. If you want to honour my work on this project, send me a bottle of good wine.

VLDocking 2.0.5 Released
This release contains the following fixes:

* Better support for drag and drop for floating dockables (some NullPointerException occured in 2.0.4)
* Update for better JDIC browser support
* Some properties of DockingDesktop have been promoted from private to protected in order to allow better subclassing of this component
* Fixed an Exception occuring when dropping a tabbed component near it's container borders
* Improved support for custom tab icons.

Before this release, defining the layout of the application was the developer's task, using the provided API to position the dockables relatively (addDockable(), spli(), createTab()). Starting with VLDocking 2.0.5 comes the Workspace Editor, a visual editor for dockables workspaces.

Advanced Installer 3.5 Released
Caphyon LLC is pleased to announce the release of Advanced Installer For Java 3.5, a Windows Installer authoring tool with built-in support for Java applications, integrating them fully into the Windows OS and making them look and feel just like a native application. Advanced Installer for Java runs on Windows 2000/XP, and the install packages it creates run on all Microsoft Windows 9x/ME/NT/2k/XP operating systems. Starting from the version 3.3, building native Mac OS X packages is also supported.

What's new in Advanced Installer for Java 3.5

This new version adds IIS support - the ability to configure and deploy web sites, web applications, virtual directories, ISAPI filters, etc. Also new are the isolated components support, qualified/published components support, extracting registration registry entries from self-reg DLLs, russian localization and more.

- IIS support: configuration and deployment of web sites, web applications, virtual directories, ISAPI filters, etc.
- Isolated components support
- Qualified/Published components support
- Extracting registration registry entries from self-reg DLLs
- Russian localization
- Ability to localize the Updater

Interesting discussion of where/when to validate. I'd argue that validation should be done as an interceptor or in workflow before persistence. Such validation can be associated with domain objects (allowing easy application) while not being directly embedded in them. This approach also doesn't require hard wiring validation to the MVC layer.

Validation Belongs in the Domain Model ... Hmm
n the Java world validation almost always seems to happen in the MVC framework. For example submitting a form causes some validation to occur on the form and then if all checks out the domain objects are populated and saved. I've never been crazy about this approach but Hibernate doesn't really address the validation issue and most of the MVC frameworks do, so that's often the easiest place to put it. The problem is that most applications have numerous paths to load data including web services, web pages, bulk data loading tools, etc... and if your validation is all tied to your MVC framework you can't easily reuse it in the non-web paths.

Using Ruby on Rails has convinced me that putting your validation in the domain model is generally the best approach. With Rails using ActiveRecord that's how it's done and when the object fails to validate those validation errors can be returned in a web form, data loading tool, web service, etc...

Test driving the Eclipse Data Binding framework
Inspite of intense work related year-end pressure, I've had a break this weekend to play around with some technology. And what better way to spend that time than test driving the new data binding framework. I created a very simple interface to allow a user to send an SMS...

InfoNode Docking and TabbedPane 1.4.0 Released
We have released new versions of all our products. InfoNode Docking Windows version 1.4.0, InfoNode Tabbed Panel version 1.4.0 and InfoNode Look and Feel version 1.4.0 are now available. This is the biggest update since the initial release with new features like view title bars, floating windows, heavyweight support and a new L&F; adapting theme.

Tip off Users With JXTipOfTheDay
It's a fairly common usability pattern to help users learn your application via a 'Tip of the Day' dialog. Generally speaking, this is a dialog that comes up when you open the application for the first time, and can then be brought up on subsequent times that the application is opened, or manually by the user; there is usually a setting to have it not automatically open again.

SwingX, an open source project which I have covered many times here before ...ships with a pre-built component for just this task - the org.jdesktop.swingx.JXTipOfTheDay.

JFreeChart 1.0.0
JFreeChart 1.0.0, the first stable release of this very popular free chart library, is now available to download.

Rich Internet Applications and AJAX - Selecting the best product
There are hundreds of criteria for evaluating RIA and AJAX products. So many that it's easy to lose focus and misjudge priorities. This essay proposes a decision tree that leads through an evaluation process. It asks for the most distinctive requirements and product features in a top-down sequence, discussing the essential differences between technology options.

Scenic a Scene Based 2D Graphics Library for Java
Scenic is a scene-based 2D graphics library. Its purpose is to enable the development of graphics intensive applications using the capabilities of modern graphics cards. It aims to be fast and offer high-quality graphics. One possibility that Scenic offers is the development of resolution independent interfaces.

Scenic consists of two parts: the scene graph code, which is written in java and the rendering code which is written in c++ and is accessed using JNI. The rendering code uses either DirectX or OpenGL to access the graphics hardware.

Originally Scenic was a c++ library that run on Linux. The old library is still available at the old homepage. Scenic PDF Viewer is a PDF viewer based on Xpdf and the c++ Scenic library. The rendering code for the java project was written from scratch and does not share any code with the old library (with the exception of some small snippets). In the future the c++ library can be updated to use the same renderer as the Java library.

OpenLaszlo Getting There ... No Cigar
It is looking like the admin tool for JBoss Mail Server will be based on OpenLaszlo. However, I don't think OpenLaszlo is here to stay. I think it is a good first attempt, but no cigar. There just isn't much out there that is really competitive. For all of the bla bla about Ajax, it means spending a great deal of your time drawing HTML via Javascript. That fits my definition of ESAD (Extremely Slow Application Development). Yeah frameworks and bla bla, but these are at an infantile stage of development and frankly the results aren't great. OpenLaszlo is the most functional from what I can tell. However, OL has its problems...