The Eclipse Project has released Eclipse 3.4 Ganymede, their open integrated development environment for Java. Version 3.4 adds numerous small new features and user interface improvements. There's no one killer new feature here, but the gradual accumulation of small improvements does add up over time.
For the last few months I've been using IntelliJ 7 in my day job on a regular basis, so I think I can finally reasonably compare these two. IntelliJ has the reputation of being more expensive but much more productive, while Eclipse is thought to be somewhat rougher but free. After several months of using IntelliJ in anger for the first time, I have to say that while this may have been true a few years ago, it isn't true today. Eclipse is far from perfect, but it has noticeably better refactoring, code completion, editing, and browsing facilities. IntelliJ's Swing UI looks prettier than Eclipse's SWT UI, but the user experience is far inferior. IntelliJ still screws up basic things like the keyboard shortcuts for Close and Find Next. I can work with IntelliJ because I have to (certain proprietary plug-ins our build system depends on have been developed for IntelliJ only) but I don't like it. Coding in IntelliJ is like being working with my keyboard covered in hot tar. Coding in Eclipse is like working with my keyboard covered in hot molasses, bad but better than the alternative.
I won't say Eclipse is the best IDE for Java. I've still never really used NetBeans 6 in anger, so it may be superior. I don't know. But I am willing to say that in 2008 that there's no reason for most programmers to pay money for a Java IDE. Whichever IDE is the best one, that IDE is a free IDE.
Red Hat's IcedTea open source JVM has passed the Java Compatibility Kit tests. Thus on paper we now have a fully open source Java virtual machine. Now the work starts to begin noticing and reporting areas where the Sun VM and the Red hat VM diverge in significant ways, and thus indicate bugs in the specifications and compatibility kit. Nonetheless this is a major milestone.
LG Electronics has posted the first public review draft specification of JSR-300 DRM API for Java ME. According to the draft,
This specification defines an optional JavaME package that enables applications to access DRM protected content on the device in a secure manner. This package can be used along with the Connected Limited Devices Configuration (CLDC) or Connected Devices Configuration (CDC). This specification defines generic APIs to access DRM protected content, abstracting the difference between the underlying DRM agent implementations a device might have. i.e. the DRM APIs are not tied to any specific DRM technology.
The features of DRM APIs are following:
- Generic interface for JavaME Applications to underlying DRM Agents.
- Accessing the content in a secure manner for rendering
- Identifying that the content is DRM protected.
- Obtaining the information about the rights associated with the content.
- Support for acquiring rights
- Support for handling proprietary rights and properties.
- Protecting locally created contents
- Move, copy, backup and restore of contents
Comments are due by July 21.
Sun's posted a maintenance release of JSR-252 JavaServer Faces 1.2. Changes seem to be extremely minor.
 Subversion 1.5, an open source version control system designed to replace CVS, has been released. 
Major new features include:
Subversion 1.5, an open source version control system designed to replace CVS, has been released. 
Major new features include:
 Atlassian  has released Clover 2.3.1, a $1200 payware test coverage tool.
Clover modifies the source code to enable it to follow which statements are executed when, and keeps a running count of how many times each statement is executed during the test suite. Any statement that executes zero times is not being tested. 
I use Clover with  Ant, but there's also an Eclipse plug-in.
Clover can generate test coverage reports in 
XML, HTML, PDF, or via a Swing  Viewer. 
Version 2.3.1 improves the integration with Maven, IntelliJ IDEA, Eclipse, and Ant.
Atlassian  has released Clover 2.3.1, a $1200 payware test coverage tool.
Clover modifies the source code to enable it to follow which statements are executed when, and keeps a running count of how many times each statement is executed during the test suite. Any statement that executes zero times is not being tested. 
I use Clover with  Ant, but there's also an Eclipse plug-in.
Clover can generate test coverage reports in 
XML, HTML, PDF, or via a Swing  Viewer. 
Version 2.3.1 improves the integration with Maven, IntelliJ IDEA, Eclipse, and Ant.
The Apache Jakarta Project has released JMeter 2.3.2, an open source (Apache 2.0 license) load testing application written in Java. "Apache JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and more). It can be used to simulate a heavy load on a server, network or object to test its strength or to analyze overall performance under different load types. You can use it to make a graphical analysis of performance or to test your server/script/object behavior under heavy concurrent load." This is mostly a bug fix and optimization release, but there a couple of new features including:
Oracle has released Berkeley DB Java Edition 3.3 on the Oracle Technology Network. This is a 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 this release include:
The Eclipse Project has posted the third release candidate of Eclipse 3.4 Ganymede, their open source integrated development environment for Java.
Mort Bay Consulting has released Jetty 6.1.11, an open source servlet engine that supports version 2.5 of the Java Servlet API and version 2.1 of Java Server Pages, and my personal favorite embeddable web server. This is a bug fix release.
The Gnu Project has released version 4.3.1 of GCC, the GNU Compiler Collection. GCC contains frontends for C, C++, Objective C, Fortran, Ada, and Java as well as libraries for these languages. GCC's Java is a clean room implementation 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.5 level with some omissions. 4.3.1 is a bug fix release.
Sun has posted the early draft review of JSR-314 Java Server Faces 2.0. I''m not a big JSF user, but near as I can make out the primary new feature in this release is improved support for AJAX applications. Comments are due by July 2.
Nobody guessed what I think is the second obvious choice for a Jolt award this year, though there was one interesting suggestion I hadn't noticed: The Art of Computer Programming, Volume 4, Fascicle 0: Introduction to Combinatorial Algorithms and Boolean Functions by Donald Knuth. That's actually a very good idea, though Fascicles 1-3 didn't make the final 6 in previous years, so I may be safe there. (Then again maybe Knuth and Addison-Wesley didn't think to nominate them, in which case, I probably shouldn't have mentioned it here. Damn. Too late. )
However the other book I think would be a sure winner most years may have slipped by readers of this web site because it's not a Java book at all. Rather it's a book about JavaScript. Specifically it's JavaScript: The Good Parts by Douglas Crockford. This book manages to combine an introductory JavaScript tutorial with best practices ideas for advanced developers. Language aficionados tend to look down on JavaScript, but Crockford makes a really good case that if you ignore all the singing, dancing web pages it's been used to create, JavaScript is actually a pretty damn interesting language (albeit one that has little to nothing to do with Java.)
So that makes three tough competitors, and two I'd usually classify as sure winners; and the year's not half over. Oh well. Maybe Refactoring HTML can sneak out with a Productivity Award.
Addison-Wesley has published the second edition of Joshua Bloch's Effective Java. This edition updates the book with coverage of features from Java 5 and beyond, including generics, enums, and java.util.concurrent. The Builder pattern also gets expanded treatment. Highest recommendation.
Muprhy's Law applies. The same year I publish Refactoring HTML, my best shot yet at a Jolt award, two other books come out that would be obvious winners in any other year, and 2008's not half over yet. Tomorrow I'll reveal the second obvious choice for the Jolt award. In the mean time, anyone want to guess?
Dan Streetman has released javax.usb 1.0.2, an open source Linux library for communicating with USB devices from Java. According to Streetman:
This includes all changes/fixes that were waiting in CVS since 1.0.1, including the change to work with the new /dev/bus/usb/001/001 and /dev/bus/usb/1/1 location/naming of the usbfs filesystem.
No RPMs or binaries are provided with this release; too many incompatibilites with old/new java compilers/jres, as well as the native library incompatibilities, make the binary releases not very useful.
To install, download either the tar.bz2 or .zip file for the API, RI, and Linux imp, and build all 3; then install all 3 jarfiles into your JRE's jre/lib/ext/ directory, the properties file into your JRE's jre/lib directory, and the native .so library into /usr/lib/.
Kevin Bourillon has released version 0.7 of the Google Collections library, which extends the standard JDK collections classes with:
- BiMap. A Map that guarantees unique values, and supports an inverse view.
- Multiset. A Collection that may contain duplicate values like a List, yet has order-independent equality like a Set. Often used to represent a histogram.
- Multimap. Similar to Map, but may contain duplicate keys. Has subtypes SetMultimap and ListMultimap providing more specific behavior.
There are also more than a dozen collection implementations, mostly of the interfaces above, but not all. ReferenceMap, for example, is a ConcurrentMap implementation which easily handles any combination of strong, soft or weak keys with strong, soft or weak values.
Static utility classes include:
- Comparators. Natural order, compound, null-friendly, ad-hoc . . .
- Iterators and Iterables. Element-based equality, cycle, concat, partition, filter with predicate, transform with function . . .
- Lists, Sets and Maps. A plethora of convenient factory methods and much more.
- PrimitiveArrays: "boxing"/"unboxing" of primitive arrays
And there's more:
- Forwarding collections
- Constrained collections
- Implementation helpers like AbstractIterator
To understand everything offered by this library, you'll have to explore the API using the "API documentation" link at the right. Or download a recent snapshot, including the binary, source, and docs, from the "Featured Downloads" section. Further information can be found using "Wiki" tab above.
Java 5 or later is required.
The Gnu Classpath Project has released IcedTea 1.7. IcedTea "provides a harness to build the source code from OpenJDK (http://openjdk.java.net) using Free Software build tools and provides replacements libraries for the binary plugs with code from the GNU Classpath project." Also available are: