Aqris Software has posted an early access release (i.e. a beta) of RefactorIT 2.0 , a $295 payware tool that can read Java source code and rewrite it by means of automated refactorings such as Rename Field/Method/Variable/Class/Package, Extract Method or Move Type. RefactorIT can be run standalone or installed as an add-in to IDEs like NetBeans, Forte, JDeveloper, and JBuilder (but apparenlty not Eclipse or IDEA). New refactorings in version 2.0 include:
RefactorIT can also perform static analysis of code and calculate various metrics.
Nathan Fiedler has released version 2.22 of JSwat, a graphical, stand-alone Java debugger built on top of the Java Platform Debugger Architecture. Features include breakpoints, source code viewing, single-stepping, watching variables, viewing stack frames, and printing variables. Version 2.22 adds several new commands including copysession, loadsession, rmsession, capture, and logging. JSwat is published under the GPL.
Sun has posted a maintenance draft review for the Java Servlet 2.4 Specification. This just looks to incorporate various errata, all but one of them typos. Comments are due by March 29.
Dimitry D'hondt and Edwin Mol have posted Smile 0.32, an open source implementation of Java Server Faces (JSF). "This minor release includes improved demo applications, and an example component (toolbar)." Smile is published under the Gnu Lesser General Public License.
Comporsys has released the Comporsys Code Generation Tool 1.0, a €399 Eclipse plug-in that generates J2EE Connector Architecture CCI Record classes from Cobol Copybooks. Eclipse 2.1 or 3.0M7 is required.
Platespiller, Inc. has posted the first beta of
Massive 1.1, a web browser based on Swing's JEditorPane
component. Personally I don't think JEditorPane
is robust enough to be used as the basis for a full browser, but perhaps they'll prove me wrong. Licensing and pricing has not been announced.
Howard Spector has released
bwbUnit 1.0, a unit testing library that provides a
PrivateProxy
class that uses reflection to allow unit tests to access private, protected, and package variables and methods.
Julien Ponge has released IzPack 3.5.0, an open source tool for building cross-platform installers in Java. This release adds an updating feature, an 'sudo' panel, and enables operating system specific constraints. It's published under the GPL.
The Gnu Project has released version 3.3.3 of GCC,
the GNU Compiler Collection.
GCC contains frontends for C, C++, Objective C, Chill, Fortran, Ada, and Java as well as libraries for these languages.
GCC is a clean room implementation of Java that doesn't use any Sun code,
so it doesn't always exactly match Sun release versions, but this is roughly at the Java 1.4 level with some omissions. From a Java perspective, this is pretty much a bug fix release.
Timothy Wall has posted version 0.12 of the Abbot GUI testing framework has been released. This release adds an Eclipse plug-in, makes various enhancements to the GUI, and improves component lookup from the GUI unit tests. Abbot is published under the LGPL.
Linus Tolke has posted ArgoUML 0.15.3, an open source UML modelling tool written in Java. This release adds support for the XML based XMI and PGML file formats. ArgoUML is published under a BSD license.
Gentleware has released Poseidon for UML 2.2 a Unified Modeling Language CASE tool based on the open source ArgoUML. Poseidon for UML integrates with NetBeans/Forte/SUN One Studio, and features generation and import of Java code. This release The new version adds association classes in class diagrams, an enhanced property panel for actors, and the UML 2.0 standard save format. There's a free beer community edition and several payware editions depending on which features you want that range in price from $149 to $599. Upgrades from 1.x range from $49 to $229. Upgrades from 2.x are free.
Is anyone still using Tomcat 3.x? If so, the Jakarta Apache Project has a new beta for you to check out. They've posted the first release candidate of
Tomcat 3.3.2, an open source servlet container for the Apache web server
and the official reference implementation of
the Java Servlet API and Java Server Pages (JSP).
Tomcat 3 implements version 2.2 of the Java Servlet API
and version 1.1 of Java Server Pages.
There are quite a few changes relative to Tomcat 3.2 in this release, including:
Wenzel Jakob has released the Beryl XML GUI Library 1.0, an open source class library that enables developers to store Swing layouts as XML documents. It's published under the LGPL.
Version 0.9 of AspectWerkz, an open source aspect oriented programming framework for Java, has been released. According to the AspectWerkz web page, "AspectWerkz utilizes runtime bytecode modification to weave your classes at runtime. It hooks in and weaves classes loaded by any class loader except the bootstrap class loader. It has a rich join point model. Aspects, advices and introductions are written in plain Java and your target classes can be regular POJOs. You have the possibility to add, remove and re-structure advices as well as swapping the implementation of your introductions at runtime. Your aspects can be defined using either an XML definition file or using Runtime Attributes." AspectWerkz is published under the LGPL.
Subversion 1.0 is out. Subversion is an open source version control system designed to replace CVS, the open source version control system we've all learned to hate. My personal problems with CVS include:
Subversion 1.0 fixes five out of six of my complaints about CVS. Completely nuking a file apparently remains to be done in the future. To be honest, this is such a critical need, I'm amazed it hasn't been addressed yet. Imagine, for example, you've accidentally checked in some source code you don't own the license for into a public repository on SourceForge or java.net. It's basically impossible to remove. Before I checked XOM into CVS on java.net, the admins promised me I could permanently remove files, but they lied. Once a file is in the repository, it's there forever, and it can't be removed. SourceForge has the exact same problem, but at least they never told me they didn't have this problem.
David A. Hall has posted the first beta of jga, an open source collection of generic algorithms for Java "roughly analogous to the portions of the C++ STL library that are not already provided by java." jga is licensed under the Gnu Lesser general Public License.
The Jakarta Apache Project has released
Tomcat 5.0.19 and 4.1.30, the servlet container for the Apache web server
and the official reference implementation of
the Java Servlet API and Java Server Pages (JSP).
Tomcat 5.0 implements version 2.4 of the Java Servlet API
2.4 and version 2.0 of Java Server Pages.
Tomcat 4.0 implements version 2.3 of the Java Servlet API
2.4 and version 1.2 of Java Server Pages.
These releases seems to mostly fix bugs and update various supporting software like Xerces.
Websina has released BugZero 3.4.2, a $999 payware 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. 3.4.2 is a bug fix release.
Joda-Time 0.95, an open source class library for date and time manipulation and formatting more sophisticated than java.util.DateFormat
, has been posted. "The 'default' calendar system implemented will be the ISO8601 standard. This specifies a framework for date and time independent of locale. Thus, in the standard, the first day of the week is Monday, and this has the index 1. This avoids any ambiguity across national boundaries.
Additional calendar systems supported are Gregorian, Julian, GregorianJulian (GJ) and Buddhist. The design is flexible and pluggable, so adding additional calendar systems should be easy. "
I found several more bugs in XOM yesterday. Two of them were of a form the code coverage tool could have caught but didn't. Consider this fragment:
if (a >= b) {
// do something...
}
Clover was testing that both the positive and negative cases were being exercised; i.e. that I was testing both when a >= b was true and when a >= b was false. The bug, however, only occurred when a == b was true. The code coverage tool could have verified that the tests covered all three cases (a > b, a == b, and a < b). Instead it treated this as a binary condition.
Version 1.1.4 of the Kaffe open source Java virtual machine for various Unixes has been released. According to developer Jim Pick, "Although not as fully tested as the current "production" 1.0.7 release, most users will find it to be much more functional and complete. We are planning to update the production release later this year. As this is a development release, it is essentially a snapshot of what's happening in CVS, with limited testing." New features since since 1.1.3 include:
Has anyone else noticed that the voice timings on FX's Buffy repeats seem a little off lately? I don't notice it when watching the DVDs. Is FX perhaps using Bill Hendershot's Time Machine for chopping frames out of shows and speeding up the voices so they can squeeze in more commercials?
IBM's alphaWorks has posted the Abstract User Interface Markup Language (AUIML) Toolkit. This tool allegedly enables "developers to write an application once and run it in Java Swing or on the Web without any changes. The AUIML Toolkit includes the AUIML VisualBuilder, which is an Eclipse-based visual panel editor built on top of the Eclipse Visual Editor Project. The AUIML VisualBuilder allows developers to easily build user interfaces and generate Java data and event-handling code for them. Additional Java code can be written to AUIML's API to control application flow, data validation, and to listen for events. Once the application is implemented, it can be deployed as a Java Swing application or as an HTML servlet without changing the application's code."
Excelsior has posted the fifth beta of JET 3.5, Professional Edition, for Linux. Excelsior JET is a Java virtual machine that uses a combination of a traditional native code compiler amd just-in-time compilation from byte code. JET costs start at $750 and run up to $2300 depending on how much support you want.
Support is available by e-mail and Web site only. Personally, if I'm paying over $2000 for support, I expect to be able to pick up the phone and talk to someone NOW when I have a problem, rather than being dumped in an e-mail queue. E-mail support is fine, and should be offered too for those times where it's more convenient, but it should not be the only means of support. One more time: I don't mind paying for software, but if a company expects me to buy their product instead of using a free-beer or open source alternative, they MUST provide significantly better support than I can get from a Usenet newsgroup. In most cases including Java VMs, the quality difference between the payware products and and the free-beer and open source alternatives has dwindled to next to nothing. Almost the only differentiator a software company can add to justify their product is excellent support. When software companies cut their costs by limiting support, I cut my costs by not buying their products.
YourKit, LLC has released YourKit Java Profiler 2.0.1, a 295€ payware tool for detecting memory leaks and memory consumption bottlenecks. It features Automation of memory leak detection, an object heap browser, JUnit integration, IntelliJ IDEA Borland JBuilder integration. Version 2.0.1 is a bug fix release. Upgrades from version 1.0 (when it was called the YourKit Memory Profiler) are 140€. The tool runs on Windows or Linux.
William Ready has released JWizardComponent 1.2.2, an open source Swing component that presents information to the user in a step-by-step manner such as those used in many installers. JWizardComponent is published under the LGPL.
Nathan Fiedler has released version 2.21 of JSwat, a graphical, stand-alone Java debugger built on top of the Java Platform Debugger Architecture. Features include breakpoints, source code viewing, single-stepping, watching variables, viewing stack frames, and printing variables. Version 2.21 adds launcher scripts for Unix and Windows. It also fixes several bugs. JSwat is published under the GPL.
To everyone who's written me asking about the analog ripper program, I'm still looking. There've been several suggestions, but so far none of them have come close to meeting my criteria. There are many programs for ripping analog input to MP3s or other formats. However, automatically splitting the tracks and filling in the metadata seems to be beyond what anyone's attempted, even though it's been proved possible to do. I think there's a real market opportunity here. If I do find anything, I'll let you know.
The Jakarta Apache Project has released HTTPClient 2.0. "Although the java.net package provides basic functionality for accessing resources via HTTP, it doesn't provide the full flexibility or functionality needed by many applications. The Jakarta Commons HttpClient component seeks to fill this void by providing an efficient, up-to-date, and feature-rich package implementing the client side of the most recent HTTP standards and recommendations....Designed for extension while providing robust support for the base HTTP protocol, the HttpClient component may be of interest to anyone building HTTP-aware client applications such as web browsers, web service clients, or systems that leverage or extend the HTTP protocol for distributed communication." A few bugs have been fixed since the last release candidate.
Michael Clark has posted JMemProf 0.7, an open source (LGPL), live Java memory profiler suitable for deployment in Web containers such as JBoss and Tomcat. JMemProf can retrieve memory profile information from a running application. This release adds support for Solaris.
Websina has released BugZero 3.4.1, a $999 payware 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. 3.4.1 is a bug fix release.
Here's a question that's been bothering me for the last couple of days. How do you know when a project is done? Obviously you can look at all the deliverables, make sure all the features are implemented, all the documentation is in place, and so forth. That's easy. But more specifically, how do you know when it's bug free?
I was actually thinking I'd have a fairly short beta cycle for XOM once I finally got all the pieces into place. (The API is almost finished. Documentation is coming along nicely) because I was fairly confident that the code as very high quality. I use aggressive unit testing. XOM has over 700 unit tests, some of which really stretch the definition of "unit test" by doing thinks like running the entire XInclude test suite. (Honestly, that's a functionality test, not a unit test. However, it's just easier if I roll all the tests into one JUnit test suite.) I profile performance and memory usage. And I use code coverage tools like Jester and Clover to make sure the tests are covering the entire code base. Furthermore, I run just about every open source static code checking tool like PMD and FindBugs across the code base every week or two. And the code's all open source so anybody can look at it. Most importantly, there had been no significant bugs found in the months since I began using code coverage tools to make sure the tests were covering the code base.
Thus, I thought XOM was in pretty good shape. However, in the last week, I've had a crisis of confidence. Three days in a row, major bugs were discovered in XOM, despite the unit tests, despite the code coverage tools, despite the static analyzers. There are parts of XOM where I would not be surprised to discover bugs. The XInclude code is so ugly I'm not confident I understand it, much less that it works (except that all the tests do pass). And I frequently uncover problems working with other software. XOM's unit tests frequently expose parser bugs, some of which I can work around, some of which I can't. Hell, I've even uncovered bugs in both the XML and XSLT conformance test suites that have apparently gone undetected by other tools. That's how comprehensive my tests are (and how rigorous XOM is). However, these three new problems were all in the core of XOM that I thought was pretty damn well covered.
One was a path of execution that was thoroughly covered by multiple tests but without the particular sequence of operations that exposed the bug. One was an edge condition (an empty text node) that had not actually been tested (though again that section of code was covered by the tests). And one will expose itself only under extreme conditions, though the definition of "extreme" could vary from one VM and system to the next.
One bug was found by an end-user. One was found by me while using XOM for an unrelated project. And one was found by a fellow developer doing a code inspection. The first two have been fixed, and unit tests have been added to cover those cases. I'm still mulling over the most difficult problem, the one that might require serious API redesign to fix.
So what am I missing here? Is there any tool or technique that I'm not using that I should be? The only one I'm aware of I really haven't tried is white box testing like Parasoft's JTest, mostly because it's too expensive and inconvenient. Maybe I should give that a whirl. But what else is out there? Are there any other techniques I'm missing? Any ideas?
JetBrains has released IntelliJ IDEA 4.0, a popular $499 payware integrated development environment for Java that runs on Windows, Mac OS X, Linux, and Unix. The big new feature in this release is a GUI designer. Other new features include:
The upgrade price is $299.
The Eclipse Project has posted the seventh milestone beta of Eclipse 3.0, an open source integrated development environment (IDE) for Java. It 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. My personal favorite new features in M7 are:
Other new features since milestone 6 include
Still no code folding though. :-( This is one of the very few advantages other IDEs have over Eclipse.
The Apache Project has released version 1.6.1 of Ant , the popular open source build tool. Version 1.6.1 fixes bugs in namespace handling, and adds support for compiling with Java 1.5. It is also published under the new Apache 2.0 license, which may or may not be GPL compatible. (The Apache Software Foundation is telling me one thing, and the Free Software Foundation is telling me the opposite. We'll just have to wait and see how this plays out.)
Slava Pestov has uploaded the ninth pre-release of jEdit 4.2, an open source programmer's editor written in Java with extensive plug-in support and my preferred text editor on Windows and Unix. Features improved in this release include deep indent and FoxPro, Lisp, and Progress syntax highlighting In addition many bugs were fixed.
R. Rawson-Tetley has posted SwingWT 0.79,
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 version adds basic document support to JEditorPane
, improves the compatibility of JList
and JTree
, adds hotkeys to JComboBox
hotkeys, and improves multiple document interface support.
SwingWT is dual licensed under the Common Public License
and the LGPL.
Dan Creswell has released Blitz JavaSpaces 2.0.0, an open source implementation of JavaSpaces that is Jini 2.0 enabled. It implements smart indexing, tuneable persistence, and active/passive lease cleanup. New features in version 2.0 include tunable persistence, automatic log file cleanup, remote layer debugging features, a ConfigAssistant, and support for Db4.1 and Db4.2.
Anil Kumar has posted JavaDBF 0.3.3, an open source (LGPL) Java library for reading and writing dBase, Xbase, and dbf files.
David Hovemeyer has posted FindBugs 0.7.1, an automated open source tool for finding potential bugs in Java code. I ran this across the current XOM code base, and it found a few minor issues such as a non-serializable field inside a serializable exception class and several streams that weren't closed on all paths through a method. This release adds an Eclipse plug-in. A few random bugs are fixed as well. Java 1.4 or later is required. FindBugs is published under the LGPL.
Linus Tolke has posted ArgoUML 0.15.3, an open source UML modelling tool written in Java. This is a bug fix release. ArgoUML is published under a BSD license.
The Big Faceless Organization has released the Big Faceless PDF Library 2.0.8, a $400 payware (more if you want support) Java class library for creating PDF documents. The $1000 Extended Edition adds the AcroForms support, digital signatures, and the ability to import and edit and existing PDF documents. Version 2.0.8 is a a bug fix release. Java 1.2 or later is required.
The first beta of EJBCA 3.0, an open source, Java 2 Enterprise Edition (J2EE) Certificate Authority, has been posted. EJBCA can be used standalone or integrated into other J2EE application. It supports multiple levels of certificate authorities, individual enrollment and batch production of certificates, PKCS12 and PEM export, configurable certificate contents. revocation and certificate revocation lists, and more. Version 2.0 adds a Web GUI for administration, speed ups, soft configurable types of signing device, new access control on method invocation, an option to generate JKS or PEM keystores, a CertificatePolicies extension, a return PKCS7 with full path to browsers, new configurable certificate profiles, more alternative names, user profiles for administrators of different groups, improved serial number generation, and a new logging mechanism. Version 3.0 adds support for OCSP and allows several certificate authorities to run in one instance of EJBCA. EJBCA is published under the LGPL.
JavaToolSoft has released JavaDOCHelper 1.5.1, a view and search tool for JavaDoc API documentation. "You can ask it to look for a class or class member name, and it brings up the relevant html page. JavaDOCHelper is designed to be invoked from a text editor. Place the cursor on a word you want to search for and press a key, JavaDOCHelper should come up with a list of search result."
Brendan Macmillan has posted version 2.1.5 of Java Serialization for XML (JSX)
2, a library for converting Java objects into streams of XML
and reading the objects back from the streams. To use it, replace
ObjectOutputStream
with
JSX.ObjectWriter
and ObjectInputStream
with JSX.ObjectReader
.
This release allows both String and primitive values to be encoded as a
primitive
element so XSLT no longer needs to distinguish between the two. JSX costs $200 per developer plus $500 if you want to distribute the application.
Websina has released BugZero 3.4, a $999 payware 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. 3.4 adds a few minor new features.
The Software Development West 2004 Expo in Santa Clara next month (March 15-19) is looking for a few more volunteers to man doors, distribute notes, and similar tasks. For each day a you volunteer you get to attend the conference for a day free, and most volunteer days involve nothing more than sitting in the back of the room listening to the presentation, and collecting eval forms at the end; so really, it's a nice way to attend the show for free.
The first beta of NetBeans 3.6, Sun's semi-official open source integrated development environment (IDE) for Java, has been released. The NetBeans team wasn't originally planning a 3.6 release, until it became obvious that Eclipse was eroding their customer base at a rate that was likely to leave them with a market share somewhere just above Roaster's if they waited till 4.0 was ready. The major new feature in 3.6 is JUnit integration. There are also lots of small improvements throughout the IDE. NetBeans is written in Java and should run on any reasonably modern JVM.
Sebastiano Vigna has released version 4.1 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.1 enables custom hash strategies.
fastUtil is published under the Gnu Lesser General Public License (LGPL).
XtremeJ Corp has released the XtremeJ Management Console 2.0, an Eclipse bbased user interface for Java management Extension (JMX) based services within a JMX-enabled application server. XtremeJ v2.0 comes in three editions: Standard, Professional, and Enterprise. The Standard Edition is available for free download. Professional and Enterprise editions start at $395. The Enterprise Edition can take and compare server/MBean snapshots; build personalized templates; and develop, manage, and execute JMX scripts from the same Eclipse IDE. Supported applications server include JBoss 3.0 and later, WebLOgic 6.1 and later, WebSphere 5.0, Tomcat 4.1 and later, JOnAS 3.3.x and several others.
The Legion of the Bouncy Castle has released version 1.22 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, 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.22 adds support for El Gamal and fixes bugs. Download it while it's still legal.
Voruta 1.0 is an open source library that reduces the JDBC code in application by mapping SQL procedures and queries to Java methods using custom JavaDoc tags. It does not need any custom build tools or external metadata files. Voruta is published under the Apache License.
Dimitry D'hondt and Edwin Mol have posted Smile 0.31, an open source implementation of Java Server Faces (JSF). "This release implements the Proposed Final Draft version of the specification and includes the client-side state saving mechanism. It does not yet include the jsp tag library." Smile is published under the Gnu Lesser General Public License.
I thought I'd catch up on the Java Community Process (JCP) today. Most significantly, Sun has posted the public review draft of Java Specification Request 176, J2SE™ 1.5 (Tiger) Release Contents, to the Java Community Process (JCP). No surprises here now that the Java 1.5 beta has been released.
There are also several JSRs describing particular features of Java 1.5. The Public Review Draft Specification for JSR-200 Network Transfer Format for Java Archives describes the new Pack200 format for JAR archives. Sun claims compression factors of seven to nine when combined with a post-pack phase using a standard algorithm such as zip. Comments are due by February 14.
Joshua Bloch's and Gilad Bracha's public review draft specification for JSR-201, Extending the Java Programming Language with Enumerations, Autoboxing, Enhanced for loops and Static Import describes most of the changes to the core language in Java 1.5. Comments are due by February 21.
Sun's Tim Lindholm has uploaded the public review draft specification for JSR 133, Java Memory Model and Thread Specification Revision. According to the draft, this spec "is intended to replace Chapter 17 of the Java Language Specification and Chapter 8 of the Java Virtual Machine Specification." I'm not particularly well-versed in the intimate details of Java's threading and memory models, so it's not immediately obvious to me what's changed here. Read it for yourself if you're curious. William Pugh has posted a large collection of background information that went into this spec on his web site. Comments are due by March 7.
I don't think this is specifically part of J2SE 1.5, but Sun has posted the proposed final draft of Java Specification Request 127, Java Server Faces in the Java Community Process. Quoting from the web page,
JavaServer™ Faces technology simplifies building user interfaces for JavaServer applications. With the well-defined programming model that JavaServer Faces provides, developers of varying skill levels can quickly and easily build web applications by: assembling reusable UI components in a page, connecting these components to an application data source, and wiring client-generated events to server-side event handlers. With the power of JavaServer Faces technology, these web applications handle all of the complexity of managing the user interface on the server, allowing the application developer to focus on application code.
JavaServer Faces technology includes:
- A set of APIs for: representing UI components and managing their state, handling events and input validation, defining page navigation, and supporting internationalization and accessibility.
- A JavaServer Pages™ (JSP™) custom tag library for expressing a JavaServer Faces interface within a JSP page.
Nokia has submitted and the JCP executive committee for the Java 2 Micro Edition (J2ME) approved JSR-238, Mobile Internationalization API. Quoting from the JSR,
This specification will provide a common API for the internationalization of MIDP applications, delivered and licensed as an optional package. It will provide the means to isolate localizable application resources from program source code and an API for accessing those resources at runtime, selecting the correct resources for the user’s/device’s locale. The specification will also define an API for supporting cultural conventions in applications, e.g. for formatting dates, times, numbers, and currencies, and sorting text strings correctly for the user’s locale. The API needs to be memory-efficient to run on resource-constrained devices such as mobile phones.
Sun's posted a new maintenance review draft of JSR-28 Java SASL Specification. SASL stands for "Simple Authentication and Security Layer." It defines a protocol independent method for adding authentication support to connection-based protocols. SASL is defined in RFC 2222. RFCs 2245, 2444, and 2831 describe particular SASL mechanisms, while RFC 2554 describes SASL used with SMTP, and RFC 2829 describes SASL used with LDAP.
Sun's preparing a maintenance release of JSR 115, Java Authorization Contract for Containers. Comments are due by March 1. The proposed changes feel pretty minor.
IBM and BEA have jointly submitted Java Specification Request 236, Timer for Application Servers, to the JCP, and it's been approved for development. According to the JSR,
The Timer API for Application Servers provides a Timer API for use within managed environments such as application servers conforming to JavaTM 2 Enterprise Edition (J2EE), within components such as Servlets, EJBs, and JCA Resource Adapters. The Timer API enables applications to schedule timer and receive timer notification callbacks with an application-specified listener.
When with managed environments, this API is a much better alternative to java.util.Timer and the JMX Timer, the two standardized APIs in Java:
- java.util.Timer should never be used within managed environments, as it creates threads outside the purview of the container. Further, there is no clean way of subclassing java.util.Timer to avoid thread creation, as all constructors create and start a thread.
- The JMX Timer is tightly coupled with the JMX framework and does not provide a sufficiently user-friendly or independent API.
The J2EE Timer thus provides a clean, simple, independent API that is appropriate for use within any J2EE container.
IBM and BEA have also submitted Java Specification Request 237, Work Manager for Application Servers, to the JCP, and it's been approved for development. According to the JSR,
The Work Manager for Application Servers specification will contain an API that provides a simple, container-manageable programming model for concurrent execution of work. These work items execute out of a thread pool managed by a container. The Work Manager API provides a higher level of abstraction for concurrent programming than java.lang.Thread, which is inappropriate for use by applications hosted in managed environments such as EJB containers and Servlet containers.
This API can be used within any environment, but is specifically designed for the requirements of managed environments.
This specification does not require any changes to existing JavaTM 2 Enterprise Edition (J2EE) APIs or deployment descriptor formats. Components can access the work service through a lookup in the local Java environment in JNDI, provided the container supports this API and the application has been properly configured.
Independently,
IBM has released the maintenance update to
of Java Specification Request (JSR) 921,
Implementing Enterprise Web Services 1.1.
According to the introduction, "This specification defines the Web Services for J2EE architecture. This is a service architecture that leverages the J2EE component architecture to provide a client and server programming model which is portable and interoperable across application servers, provides a scalable secure environment, and yet is familiar to J2EE developers."
New features include support for anonymous types and xsd:any
.
Sun's posted a maintenance update to JSR-914, the Java Message Service API.
This maintenance release addresses the unification of the programming interfaces for the Point-to-Point and Pub/Sub messaging domains in the Java Message Service (JMS) API. In the existing version of the specification, the client programming model make a strong distinction between these two domains. One consequence of domain separation is that actions from the Point-to-Point domain and the Pub/Sub domain in can not be used in the same transaction.
In this proposed domain unification of the interfaces, methods have been added to support the ability to include PTP and Pub/Sub messaging in the same transaction. In addition, the domain unification proposed simplifies the client programming model, so that the client programmer can use a simplified set of APIs to create an application.
I'm told this is backwards compatible with existing JMS programs.
Paul Browne has posted NoUnit, an open source (GPL) tool for statically analyzing unit test coverage that works at the method level. This contrasts with dynamic tools like Clover and Jester that actually analyze the test coverage by running the test and can report on test coverage at a statement level of granularity. Version 0.7 integrates with Ant, uses Log4j for logging, and is now compatible with Java 1.4.
Martin Jericho has released the Jericho HTML Parser 1.0, an open source (LGPL) Java library for parsing, analysing and modifying HTML that ignores any server-side code/markup or invalid HTML. It includes an HTML form analyser.
Omnicore has posted build 721 of the CodeGuide 6.1 integrated development environment for Java. This release features full support for Java 1.5. CodeGuide costs $398 and runs on Linux, Solaris, Windows and Mac OS X.
The JavaPLT group at Rice University has posted a new build of DrJava, an open source integrated development environment (IDE) for Java that supports interactive evaluation of expressions. "This development release of DrJava includes a few bug fixes and a few new features. Most notable are the addition of forward brace matching as well as an option to allow access to private and protected members of classes in the Interactions Pane." DrJava is published under the GPL and requires JDK 1.3 or later.
ReportMill Software, Inc. has released ReportMill 7, a payware application reporting tool. Version 7.0 uses a native XML file format for report templates. These can be written with a GUI tool. It can generate Excel, PDF, HTML, Flash, and Swing GUIs. Costs start at at $495 per developer and $4,995 for a single processor deployment license.
Sun has posted the first official public beta of Java 1.5. a.k.a. Tiger. As usual, it's available for Windows, Linux, and Solaris. There are numerous language level changes in Java 1.5, more than in any previous release, including:
enum
is now a keyword. You'll have to rewrite your code if you were using it.)
According to Sun's web site, "The most important Java technology release in years includes new Java language updates, monitoring and management support, and a focus on rich clients for the desktop." According to me, the whole Java edifice is getting increasingly creaky, and preparing to collapse under its own weight. The new generics syntax a perfect example. While I think generics in general are a very good idea, the Java 1.5 implementation makes far too many
compromises with backwards compatibility. For instance, potentially very inefficient boxing and unboxing is require to support primitive data types.
Furthermore, the generic collections aren't actually statically typed.
It is possible to store a
Frame
in a List<>String
without the compiler objecting. Most of the time, everything works, but it's very kludgy and not at all clean. And this is just one of many examples.
It is increasingly obvious that Java is heading down the same road C++ travelled. Unless Sun is willing to throw off the chains of backwards compatibility, someone else will. I don;t know who that someone else is, but they will replace Java just as effectively as Java replaced C++. It might be just possible to maintain binary compatibility with most existing Java code, but source compatibility should be abandoned.
Java 1.5 also makes numerous changes to the virtual machine including:
Of course, there are also numerous changes to and additions in the class library. GUI wise, there are numerous enhancements:
JTable
printing support
In java.lang
, we find System.out.printf()
,
which does pretty much what all the reeducated C programmers will
expect it to do. There's also a new console input API, though
fortunately it doesn't look a lot like scanf. In 2004, I hope we've
all stopped using the console as a user interface, but I still expect
to see a few dinosaur professors using this to finally translate
their C notes into Java.
For multithreaded applications, the java.util.concurrent
package provides real semaphores.
(Think of them as wait()
on steroids.)
New networking features include:
XML wise not a lot has changed. The bundled parser is now Xerces 2.6.0. The XSLT engine is XSLTC (from Xalan) 2.5.2. DOM Level 3 and XML 1.1 are now supported. Most significantly, the JAR archives are separated out from the main runtime into five separate files: sax.jar, dom.jar, jaxp-api.jar, xercesImpl.jar, and xalan.jar. This should make it much easier to replace outdated versions of XML tools, a perennial problem in Java 1.4.
Other enhancements scattered throughout the class library include:
BigDecimal
supports fixed-precision floating-point computationMath
and StrictMath
provide hyperbolic transcendental functions (sinh, cosh, tanh), cube roots, and base 10 logarithms. Queue
, BlockingQueue
, and ConcurrentMap
have been added to the Collections APIToolwise, I note that Sun has backed off on using breakiterator for JavaDoc, something that had been driving me nuts in XOM because it didn't work with my well-formed XHTML doc comments. That's good. The compiler has a -Xlint option to turn on extra checks. That's going to be essential with the increasing complexity of the language, especially generics. Jar files can be "hyper-compressed" in a new Pack200 format. I just wish they'd make it possible to store resources in a JAR archive in a way that doesn't break in every other server-side container.
Quick summary: there's a lot of good new stuff here that will be useful to many users. However, much of it has been bolted on to a framework that was never designed to support anything like it. The result is a confusing mess, with lots of rough edges where the pieces don't join up precisely right, just waiting to trip up the unwary programmer. Often when a physician is treating an injury vitim, they have to break a few bones first. Java's bones are looking pretty disjointed these days, and if Java is going to move forward, it may be time to break a few bones and reset them.
I'm looking for a program, and I'm willing to pay for it. This program meeds to do one thing, and it doesn't even have to do it perfectly, but it has to do it well. I need an analog ripper which will record audio off my large collection of legacy cassete tapes. The criteria are as follows:
In other words, I want to do the minimum amount of work needed to rip my analog music collection onto disc. I should be able to plug the cassette player into the computer's microphone port, push one button on the cassette player, and one button in the program, and have everything else happen automatically. I'd pay up to $100 for this without thinking about it. I'd probably pay $200. $500 I might have to justify to my wife. Does anyone know if such a program exists? Drop me a line if you do.
The winlaf project has released Windows Look and Feel Fidelity (winlaf) 0.4. This set of utilities attempts to work around consistency issues in the Swing Windows Look & Feel. It's published under the Sun Public License.
Tom Copeland has released PMD 1.5, an open source tool for automatically checking Java code for various classes of bugs. PMD scans Java source code and looks for potential problems including:
Version 1.5 adds checks for about a dozen potential new problems, including
In my tests, PMD 1.5 found a few minor problems in the XOM code base (unused local variables, mostly, plus a few unnecessary assignments of null to object variables) but didn't turn up anything too major. This isn't necessarily a fair test, because XOM has been repeatedly checked with earlier versions of PMD as well as other similar tools, so most of the easy problems were found and fixed long ago. For a fairer test, I ran several of the rulesets across the XQuisitor code base. PMD didn't catch any problems at all in that code, which was a little surprising. XQuisitor is much smaller and simpler than XOM, but I didn't think the code was in such good shape.
IBM has released version 1.19 of Jikes, their open source Java compiler written in C. Version 1.19 adds warnings for common problems such as empty catch blocks. Jikes is published under the IBM Public License.
Robert Oloffson has posted version 0.39 of Java Memory Profiler (JMP). JMP uses the Java Virtual Machine Profiling Interface (JVMPI) interface to track objects and method times in a JVM. It uses a GTK+ interface to display statistics. The current instance count and the total amount of memory for each class is shown as is the total time spent in each method. This release lets you dump all the strings in memory and fixes a few bugs. JMP is written in C for Linux.
As I type this, I'm not listening to a Sun presentation on the Java Desktop System. I signed up for it, but instead of a nice, simple QuickTime stream like Apple does every few months, they're using some brain-damaged applet that won't execute on my Mac. I finally got the applet to load on my Linux box, but all it does there is show not very informative slides very slowly. Oh wait, it just told me I didn't have the Flash plug-in. That's helpful (not!). If they were going to do this in Flash, why didn't they just skip Java entirely? Anyway, let's try this on the Windows laptop that has Java and Flash (20 minutes into the presentation now.) Nope, that doesn't work. The site is now refusing connections. OK, a few minutes later it lets me log in, only to discover that the applet window is much too big for my laptop screen; and oh yes, to top it all off it won't run with the version of Flash I have installed. It wants Flash 7.
Whether you have the right versions of Java and Flash installed or not, to actually hear what the presenters are saying, you have to dial in on a voice line and wait on hold ten or fifteen minutes to be connected to the audio. Of course, even then you still can't see what the presenters are demonstrating, just watch the slides. And there's no way I'm holding a heavy phone to my ear for an hour to listen to Sun's marketing spiel. I could use a speaker phone, but that's not in the same room as my computer. For a company that claims to be so Internet savvy, you'd think they would have figured out how to deliver audio over the Internet by now. Oh well, maybe they'll send me the free copy of the JDS they promised for registering, but I'm not holding my breath.
YourKit, LLC has released YourKit Java Profiler 2.0, a 295€ payware tool for detecting memory leaks and memory consumption bottlenecks. It features Automation of memory leak detection, an object heap browser, JUnit integration, IntelliJ IDEA Borland JBuilder integration. Version 2.0 adds CPU profiling. Upgrades from version 1.0 (when it was called the YourKit Memory Profiler) are 140€. The tool runs on Windows or Linux.
Tue Haste Andersen has released JWacom 1.0, Java library for accessing Wacom tablets on Linux. It provides methods to query the device state and and event listeners to listen for Wacom events. The library is free-beer.
JetBrains has posted the second release candidate of Intellij IDEA 4.0 (registration required). IDEA is a $699 payware integrated development environment for Java that's been getting a lot of good buzz for the last year or so. New features in 4.0 include a GUI designer, CVS integration, the ability to modify code from within the debugger and continue running, generics support, and JUnit integration.
Apple has released Java 1.4.2 and Safari 1.2. Together they enable LiveConnect for communication between Java and JavaScript, which should go a long way toward fixing Safari incompatibilities with various web sites. There's also a JBoss update that enables "JBoss and Tomcat to take advantage of Java 1.4.2."
In typical Apple fashion, however, these updates are all only available for Mac OS X 10.3. Mac OS X 10.2 users are expected to pay $120 to upgrade if they want to use the latest version of Java, or have their web browser work. If you actually want to use a compiler, you're going to have sign Apple's loyalty oath before they'll let you download it. Microsoft is still supporting Windows 98. Apple can't be bothered to support an operating system they were selling and installing with all Macs less than year ago. When I started using Macs 15 years ago, the hardware was more expensive, but the OS and all upgrades were free. The hardware is still more expensive, but Apple seems to have forgotten the other half of that bargain. :-(
I am pleased to announce the release of XOM 1.0d23, my open source, dual streaming/tree-based API for processing XML with Java. XOM is quite parsimonious with memory, far more so than most competing tree-based APIs, and it is the most "XML correct" of any of the major tree-based APIs for processing XML. XOM is fanatical about maintaining well-formedness at all times. I also suspect XOM is more code correct than most libraries for processing XML. It has an extensive unit test suite that achieves approximately 90% code coverage. The XOM tests have actually exposed numerous bugs in other libraries including Xerces, Crimson, Oracle, Piccolo, libxml, JDOM, Saxon, and more. (This weekend's 2.6.1 release of Xerces did fix the last two bugs XOM's unit tests were tripping over, so that is the preferred parser for XOM.)
This is the *LAST CALL* development release of XOM 1.0. The next release will be 1.0 alpha 1, at which point I will declare API freeze and rule out gratuitous, backwards incompatible changes in the API until at least 2.0 (at some point in the indefinite future). If there are any method names or signatures that bother you in XOM, now is the time to let me know. I do plan some future releases, 1.0.1, 1.1, 1.2, etc. to add features and improve performance. However, I don't want to change the existing API after alpha 1 without a very good reason.
There are several big changes in this release.
Some programs will need minor modifications to compile and run against the new release.
Most notably, the various makeNode()
methods in the NodeFactory
class all return Nodes
objects. This means a factory can replace one node type with a different node type (e.g. changing elements into attributes and vice versa) or replace a single node with several nodes.
In addition, I fiddled with the exception hierarchy to try to rationalize it.
IllegalDataException
and its subclasses have getData
and setData
methods to get and set the exact text that caused the exception. Subclasses include IllegalNameException
, IllegalTargetException
, and IllegalCharacterDataException
. IllegalCharacterDataException
is now used where IllegalDataException
was used previously.
Furthermore,
NamespaceException
has been broken up. IllegalNameException
is used for problems with a namespace prefix. MalformedURIException
is used for problems with a namespace URI. NamespaceConflictException
, a subclass of WellformednessException
, is used for cases where attributes, elements, and/or additional namespace declarations have conflicting bindings for the same prefix.
The nu.xom.xinclude
package supports
now the November 2003 Working Draft syntax of XInclude, including the xpointer
, accept
, accept-charset
, and accept-language
attributes. Documents will need to be rewritten to use the new syntax.
All legacy JDOM code has been replaced. The XOM code base is now completely independent of JDOM. (There never was much JDOM code in the first place, just parts of the Verifier
class; but these parts have now all been replaced with different, faster algorithms based on table lookup.)
Other changes are listed on the web page. XOM is published under the Lesser General Public License (LGPL). Enjoy!
debugtools.com has released version 3.3.5 of JDebugTool, a standalone graphical Java debugger built on top of the Java Platform Debugger Architecture (JPDA). This release adds JDebugTool desktop icons and will install the JPDA debugger library JAR archive if necessary. JDebugTool is $99 (personal)/$199 (corporate) payware.
Jim Menard has posted version 0.81 of DataVision, an open source "database reporting tool similar to Crystal Reports". DataVision is written in Java and supports multiple databases including PostgreSQL, MySQL, and Oracle. This is a bug fix release. DataVision is published under an Apache license.