Monday, December 27, 2004

PHP-based application framework: Horde

Horde is a PHP-based application framework providing backend-independent interfaces for dealing with preferences, logfiles, compression, browser detection, connection tracking, MIME handling, hierarchical data, authentication, data formats, encryption, forms, session handling, file storage, remote procedure calls - and more is on the way.

Horde also makes heavy use of PEAR, the PHP Extension and Application Repository.

Thursday, December 23, 2004

Text formatting and scanning - Java printf package

Henrik Bengtsson's Java printf package implements common C-style printf formatting and scanf text parsing (includes methods sprintf, fprintf, scanf, sscanf and fprintf).

  • True C-style printf() with variable number of parameters.
  • High quality thanks to thousands of users.
  • Can save you hours or even days.
  • Compatible with Java 1.0.2, Java 1.1 and Java 2.
  • Free for non-commercial use.

You can take a look at Guido Krüger´s printf class as well.

Measuring execution times: SpeedTimer

Guido Krueger's SpeedTimer gives us an easy way to measure and compare method execution times.

  • Measures the hardware timer resolution.
  • Measures the overhead of empty loop iteration.
  • Offers a template to help measure the speed of the code by successively running it in a loop until the elapsed time is long enough to give meaningful results.

Tuesday, December 14, 2004


OpenLaszlo is an open source platform for the development and delivery of rich Internet applications on the web.

With Laszlo, you can:

* Develop standards-based rich Internet applications with one code base in XML and JavaScript
* Deploy them from any J2EE application server or Java servlet container running under Linux, UNIX, Windows or Mac OS X
* Display them in any Web browser enabled with the Flash 5 Player or above, reaching 97% of all Web-enabled desktops

Apache´s persistence tool: OJB

ObJectRelationalBridge - OJB supports multiple persistence APIs to provide users with their API of choice:

* A full featured ODMG 3.0 compliant API. (See the ODMG Tutorial for an introduction.)
* A JDO compliant API. We currently provide a plugin to the JDO Reference Implementation (RI). Combining the JDO RI and our plugin provides a JDO 1.0 compliant o/r solution.
A full JDO implementation is scheduled for OJB 2.0. (See JDO tutorial for an introduction to the JDO programming model.)
* An Object Transaction Manager (OTM) layer that contains all features that JDO and ODMG have in common. (See OTM tutorial for details).
* A low-level PersistenceBroker API which serves as the OJB persistence kernel. The OTM-, ODMG- and JDO-implementations are build on top of this kernel.
This API can also be used directly by applications that don't need full fledged object level transactions (See the Persistence Broker Tutorial for details).

More features:

# Transparent persistence: Persistent classes don't have to inherit from a persistent base class or to implement an interface.
# Easy use of multiple databases.
# Extremly flexible design with pluggable implementation of most service classes like PersistenceBroker, ObjectCache, SequenceManager, RowReader, ConnectionFactory, ConnectionManager, IndirectionHandler, SQLGenerator, JdbcAccess, ... and so on.
# Comes along with fully functional demo applications running against HSQLDB.

Monday, December 13, 2004

Real-world persistence: Chameleon Persistence

Chameleon Persistence is a different persistence engine. It can be used for JavaBeans (in a classic O/R style), XML or other formats and is not constrained by traditional O/R requirements. Full native query language and complex query requirements are fully supported.


  • Designed for real enterprise needs
  • Not tied to JDBC-based databases
  • Cross data store retrievals (the object graph is spread across databases)
  • Very flexible data mapping (with or without JavaBeans)
  • Not limited to JavaBean persistence
  • Native data store query language support
  • Minimum configuration for minimum use cases
  • Expressions and scripts for query parameter substitution
  • Client-Server architecture

Friday, December 10, 2004

Fast object persistence: Prevayler

Prevayler is the free-software Prevalence layer for Java.
Ridiculously simple, Prevalence is by far the fastest and most transparent persistence, fault-tolerance and load-balancing architecture for Plain Old Java Objects (POJOs).

Queries with Prevayler are more than 9000 times faster than querying Oracle through JDBC.
Queries with Prevayler are more than 3000 times faster than querying MySQL through JDBC.

These results are obtained even with the Oracle and MySQL databases fully cached in RAM and on the same physical machine as the test VM.

O/R persistence: Hibernate

Hibernate is a powerful, ultra-high performance object/relational persistence and query service for Java. Hibernate lets you develop persistent classes following common Java idiom - including association, inheritance, polymorphism, composition and the Java collections framework. The Hibernate Query Language, designed as a 'minimal' object-oriented extension to SQL, provides an elegant bridge between the object and relational worlds. Hibernate also allows you to express queries using native SQL or Java-based Criteria and Example queries. Hibernate is now the most popular object/relational mapping solution for Java.

Sunday, December 05, 2004

A collection of JVM options

This document is a compilation of all the JVM options for various versions of the JVM on primarily SPARC/Solaris Platform. The descriptions for each option are taken mostly verbatim from the reference documents.

Wednesday, December 01, 2004

Baloon tooltips in Java: jBallon

jBallon is a new LGPL library that allows you to have balloon-style tooltips instead of the standard Java tooltips - and there´s no need to change a single line of Java code from your application. No recompilation is needed, either.
To use JBalloonToolTips in your project you have to add this line to the project's startup script:
You can also mix standard and balloon tooltips in one app if you want.

Monday, November 29, 2004

GUI editor for Thinlet: ThinG

ThinG is a GUI editor for Thinlets. You can write/edit the XML description of your user interface and instantly see how it looks like or you can visually build it, tweak some parameters, and have the XML code automatically updated to reflect your changes.

Creating GUI apps: Thinlet

Instead of using the Swing API to create your graphical applications, you may consider using Thinlet, which allows you to quickly create GUI applications, separating layout in XML files and business logic in Java code - easier than using Swing.

Thinlet is a GUI toolkit in a single Java class (compressed size is less than 40 kB) which runs under Java 1.1 (browser´s default JVM) up to 1.4, Personal Java and Personal Profile.

Monday, November 22, 2004

Java app launcher: JSmooth

JSmooth is a Java application launcher that wraps an existing Jar file so that it becomes an executable Windows binary file (with '.exe' extension).
It makes java deployment much smoother and user-friendly, as it is able to find a Java VM by itself. When no VM is available, it provides feedback to the users, and can launch the default web browser to an URL that explains how to download a Java VM.

Smooth User Experience
  • Your users see and use a standard windows Exe binary. No more technical explanation on .jar, on javaw association, etc.
  • The Jsmooth EXE is smart: if no VM is found, your users are nicely explained how to install Java and/or are redirected to a web site (depending on the selected wrapper).
  • Flexible automatic Java VM detection

Flexible automatic Java VM detection

  • Detects the location of any Sun JVM installed. The wrappers use several strategies to detect all the JVM available on a computer, using windows registry, environment variables, windows path.
  • Detects and uses Microsoft's JView (for 1.0 and 1.1 Java applications), if available.
  • The JVM search sequence is fully customizable using the GUI.
  • If a JVM is bundled with your software, you can force the wrappers to use it.
  • Specify which versions of the JVM are compatible with your software.

Graphical User Interface

  • A Swing-based project editor allows you to easily configure the executable binary for your software.
  • Associate an icon to your executable, using a .ICO, .PNG, or .GIF file (automatic color reduction is done if necessary).

Application configuration

  • Easy java properties configuration: specify the tag=value pairs you want the wrappers to pass to your java application.
  • System environment variable are available in the java properties definition: just use the standard Windows %VARIABLE% syntax in your properties definition.
  • Pass special variables that are not available to Java program, such as the executable path and name, and even the computer name.
  • Specify all the classpath configuration, adding .jar, .zip, or directories, with an intuitive GUI.
  • Want to modify the current directory used by your Java application? The wrappers will handle this for you.


  • Provided with several exe wrappers skeletons, so that you can choose the one that best suits your needs!
  • Use one of the provided wrapper or create your own, and plug-it seamlessly into the jsmooth framework.

Feature-rich installer: VAInstall

VAInstall is a multi-platform installer generator written in Java. Using a simple config file, it allows the packager to pick files and directories from various places on disk (unlike other installers which only use one root dir). The packager can completely reorganize the files and dirs on the destination host. The installation mode for the destination host can be graphic, xtra, text or ansi.
VAInstall doesn´t write any large temporary file on disk, and has an easy and powerful uninstallation procedure.
  • Multi-platform installation of applications (Java or not), or other data
  • 6 formats possible for the auto-installable packaged archive: executable Java class, executable Jar, JavaWebStart JNLP, Windows exe, Linux-i386 exe and Unix/Linux executable shell script
  • Easy uninstall process
  • Version control: upgrades apps from existing versions or installs new versions
  • Forced-update mode: for differential updates or module/plug-in installation in existing apps
  • Four possible user-interfaces: graphic-classic, graphic-xtra, text-only or coloured ansi text
  • Easy configuration: a config file and a file listing
  • Integration with Ant thru an Ant task
  • Powerful archiving: you can archive files from different locations, and reorganize them as you want in your auto-install archive.
  • Java launch scripts generation
  • Windows registry management
  • Shortcuts generation (for Debian/Gnome targets only)
  • Support for choosable language during installation

Application deployment with Ant: ROXES ANT Tasks

ROXES ANT Tasks are a collection of 16 Ant tasks for simplifying application deployment.

  • - provides access to special Windows directories like desktop, program menu, program files and many more.
  • win32.registry - lets you create/read/write/delete windows registry subtrees and entries.
  • win32.shortcut - is able to create Windows Shortcuts. Both Windows Shortcut file formats (.url and .lnk) can be read and written.
  • sfx - creates native self extracting executables out of ZIP archives. Currently supported target platforms are Windows, MacOS X, almost any Unix and self executable JAVA Jar files. For Windows the executable command may contain placeholders for registry, enviroment and executable filename which are evaluated at runtime. The icon for the windows executable can be defined by the task.
  • jstub - jstub creates native executables for Windows, MacOS X and almost any Unix System out of a working JAR archive. For Windows the executable command may contain placeholders for registry, enviroment and executable filename which are evaluated at runtime. The icon for the windows executable can be defined be the task.
  • jnlp - simplifies the creation of JNLP files for JAVA Web Start. The jnlp task is able to handle ANT Filesets as resources. This feature makes jnlp file creation using the jnlp Task much more easier.
  • preferences - lets you access the JAVA Preferences API. You can read, write, import, export and test preferences data and nodes. Using this task is very useful for configuring applications.
  • properties - The properties task is able to write Java property files. This task can merge existing properties files with custom properties defined in the ant build file. The custom property definition can be used in conjunction with conditions. properties can be used to store user input during build for later use.
  • find - The find task is able find files using a pattern. This task is especially useful when you use libraries which name contain version/build information which may vary over the time. Using the find task you can use the file of your choice without changing the build file again and again.
  • compare - This task can compare 2 values either numerical ore aplanumerical and set customziable properties depending of the result.
  • execute - executes a block of tasks one ore more times depending of a condition.
  • call - executes a task one ore more times depending of a condition.
  • - creates properties containing informations about the underlying os.
  • - makes important properties of the underlying unix system available as ant properties. espcially common kde directories like program menu, desktop etc. are supported.
  • - creates a unix soft link. works only under unix.
  • unix.kde.shortcut - creates a kde shortcut file used to create desktop or program menu entries.
  • unix.kde.directoryshortcut - creates a kde directory shortcut file used to create desktop or program menu entries.

Accessing the system tray: SysTray for Java

SysTray for Java enables Java applications to create an icon in the system tray under Windows and KDE 3. It supports the creation of submenus, multiple independent menus, checkable menus, and everything can be changed at runtime.
The JAR and the DLL needed to run systray4j on Windows are LGPL. The code for KDE is GPL.

Running Java apps as services

Java Service Wrapper allows a Java application to be run as a Windows service or a Unix daemon. It works under FreeBSD, GNU-Linux, MacOS X, Solaris, AIX, Windows NT/2000/XP/2003, Irix, HP-UX and DEC OSF1.

Friday, November 19, 2004

Javadocs knowledge base: JDocs

JDocs is a comprehensive online resource for Java API documentation. All the javadocs for a variety of popular packages are loaded into our db-driven system, and users can contribute their own notes to virtually any class, field, method.

JDocs features:
  • HUGE collection of APIs
  • Familiar "javadocs" interface
  • Annotated with user notes
  • Fully indexed and searchable

(For an example, see the Javadocs for JasperReports)

User authentication against WinNT: Tagish JAAS Modules

If your Java application needs to authenticate users against a Windows NT or Windows 2000 domain, take a look at JAAS Modules from By installing a small DLL - NTSystem.dll - in your system (the computer which is running your app) and a jar file - tagishauth.jar - you can authenticate users as easily as the following example:

public static void checkAuth(String userName, char[] password, String domainName) throws {

com.tagish.auth.win32.NTSystem ntSystem = new NTSystem();
ntSystem.logon(userName, password, domainName);
System.out.println("User validated using domain login");


You just have to pass the user name, password, and the NT domain to perform the authentication. When the authentication fails, a LoginException is thrown.

Creating distributed applications: TRMI

Transparent RMI (TRMI for short) is a Java library based on RMI that simplifies the design of distributed applications. It has two distinct advantages:
  • Allows invoking a method remotely by using any interface, not just those that extend java.rmi.Remote;
  • Provides a mechanism for recovering from RemoteExceptions in a centralized location.

Wednesday, November 17, 2004

Complete reporting solution: OpenReports

OpenReports is a complete web based reporting solution that provides the ability for users to view dynamically created PDF, HTML or XLS reports in a browser. It is developed in Java and uses JasperReports as the reporting engine. The goal of OpenReports is to provide a web based reporting solution built upon open source technologies that will compete against
complex and expensive reporting tools such as Crystal Reports and Cognos.
  • The ability to create groups of reports, and grant users access to reports by group.
  • The ability to generate reports as PDF, XLS, HTML, and CSV files
  • The ability to generate bar, pie and xy charts for inclusion in reports.
  • The ability to schedule and email PDF reports.
  • The ability to define reusable report parameters. Available parameter types include Date, Text, Query Parameters.
  • The ability to create multiple Datasources for use in generating reports. Support for JNDI Datasources and internal connection pooling via Commons-DBCP is included.
  • The ability to upload and hot deploy new reports.
  • Web based administration of users, groups, reports, parameters, and datasources.
  • Cross platform database support via Hibernate based persistence layer.
  • Available in a preconfigured bundle with Apache Tomcat.

This solution also has a visual report designer, OpenReports Designer, with the following features:

  • Edit, design, preview, and view Jasper reports.
  • Visual report designer.
  • XML editor with syntax highlighting.
  • Dialogs for editing report properties and elements.
  • View and print compiled Jasper reports.
  • Export compiled Jasper reports to PDF, HTML, XLS, and CSV files.
  • Includes a wizard for creating database driven reports.

Java-based build tool: Ant

Apache Ant is a cross-platform, Java-based build tool, resembling make somewhat. Unlike make, which can be extended with shell-based commands, Ant is extended using Java classes, and instead of writing shell commands, Ant's configuration files are XML-based, calling out a target tree where various tasks get executed. But if you really need to, you can execute a shell command by using Ant's <exec> task, which allows different commands to be executed based on the host OS.

Logging framework: Log4j

Log4j is an essential logging framework for Java. It helps you debug your application (with minimal impact on performance) by means of logging statements inserted in specific points of your code. Logging can be configured or even turned off at runtime via method calls or with a configuration file, all without changing the application binary.
Logging equips the developer with detailed context for application failures, thus it gets easier to correct them.

Unit testing framework: JUnit

JUnit is THE unit testing framework for Java. Writing unit tests for your Java classes with JUnit becomes a snap. Check it out if you've never heard of it before - it's quite easy to learn and it will save you a lot of headaches in the future.
(You may be interested to know that there´s a Javascript unit testing framework as well)

Java instant messenger: JIM

JIM, by Jeffrey Ketterer and Austin Click, is a Java server/client instant messaging program. Both the client and the server are free, and anyone can run a server.

Tuesday, November 16, 2004

Barcode generation: Krysalis Barcode

Krysalis Barcode is a free, flexible barcode generator written in Java.


* 1D barcode implementations:
  • Interleaved 2 of 5
  • Code 39
  • Codabar
  • Code 128
  • UPC-A and UPC-E (with supplementals)
  • EAN-13 and EAN-8 (with supplementals)
* Support for multiple output formats:
  • SVG
  • EPS (Encapsulated PostScript)
  • Bitmap images (such as GIF, PNG or JPEG)
  • Java2D (AWT)
  • Text (for testing and debugging only)
* Servlet with support for SVG, EPS and bitmap output

* Command-line interface

* Plug-ins/extensions for third-party products:

Java API To Access Microsoft Format Files: Jakarta POI

Jakarta POI consists of APIs for manipulating various file formats based upon Microsoft's OLE 2 Compound Document format using pure Java. In short, you can read and write MS Excel files using Java. Soon, you'll be able to read and write Word files using Java.

PDF file creation: iText

iText is a free Java class library to create PDF files.


Below is a simple bar code example taken from the documentation:

PdfContentByte cb = writer.getDirectContent();
BarcodeEAN codeEAN = new BarcodeEAN();
Image imageEAN = codeEAN.createImageWithBarcode(cb, null, null);
document.add(new Phrase(new Chunk(imageEAN, 0, 0)));

There´s also an iText ant task (from the Fopps project) which takes an XML file as input and generates a PDF file (HTML and RTF are also supported).
Below is an example, which builds a pdf document out of plain.xml. Every page contains the header 'My header' and the footer 'Page x of y':

header="My header"

Chart generation library: JFreeChart

JFreeChart is a free Java class library for generating charts, including:
  • Pie charts (2D and 3D);
  • Bar charts (regular and stacked, with an optional 3D effect);
  • Line and area charts;
  • Scatter plots and bubble charts;
  • Time series, high/low/open/close charts and candle stick charts;
  • Combination charts;
  • Pareto charts;
  • Gantt charts;
  • Wind plots, meter charts and symbol charts;
  • Wafer map charts;

Visual report builder: iReport

iReport is a powerful, intuitive and easy to use visual report builder/designer for JasperReports written in java. This tool allows users to visually edit complex reports with charts, images, subreports.

Java reporting tool: JasperReports

JasperReports is a powerful open source Java reporting tool that has the ability to deliver rich content onto the screen, to the printer or into PDF, HTML, XLS, CSV and XML files.
Its main purpose is to help creating page oriented, ready to print documents in a simple and flexible manner.

Lightweight installer generator: IzPack

IzPack is an installers generator written in Java. It produces lightweight installers that can be run on any operating system where a Java virtual machine is available. Depending on the operating system, it can be launched by a double-click or a simple 'java -jar installer.jar' on a shell. The most common use is to distribute applications for the Java platform, but you can also use it for other kinds of projects.

  • XML-based installer descriptors
  • Uses the maximum Jar archive compression level
  • Jakarta Ant integration
  • Great flexibility and modularity, it is very easy to extend IzPack
  • No native code is required, but you can extend IzPack with native code
  • Shortcut creation system
  • Flexible and powerful user input panel
  • Automatic uninstaller creation
  • Easy localization with XML langpacks: 16 langpacks are provided by default
  • Variable substitution system
  • OS-specific scripts interaction
You can read more on the IzPack homepage

Tuesday, November 09, 2004

Installer generator for Java applications: Lift Off

  • Only Java 1.1 & AWT are required on the target platform.
  • Swing application for creating distributions.
  • Runs with Linux and Solaris, Windows support will be added soon. Support for other platforms may be available in the future (Contributors?)
  • You can place your Software inside a self extracting Java class that can be extracted on any platform that can run Java applications, no system specific binaries anymore!
  • The Software is open source (GPL), you can modify it fit your needs.
  • Localization support (only German and English yet)-
  • The installer can fill out template files with system dependend values.
You can read more on the Lift-Off home page.