Germany's Omnicore Software has released version 2 of their Codeguide Java IDE. This release adds a visual debugger based on Sun's multyiple platform debugger architecture and multiple project support. CodeGuide is $99 payware. Upgrades from version 1 are $29. It's available on Windows 95/98/NT, Linux, and Solaris.
IBM's alphaWorks has released Jackal, a Java-based communications infrastructure for agents and multi-agents. Jackal is a Java package, which allows applications written in Java to communicate via KQML, the Knowledge Query and Manipulation Language.
The Blackdown Project's posted Release Candidate 2 of its port of the JDK 1.2.2 to Linux. It can be downloaded from any of several mirror sites.
Sun's released the FCS version of the Java Media Framework (JMF) 2.0. The JMF allows you to record and playback video in Java applets and applications. This includes the Java Sound API for recording sound from the microphone playing many audio formats including WAV, AIFF, AU and MIDI. Reference implementations are available for Windows, Solaris, and pure Java.
Sun has made version 3.0.6 of the Java Workshop integrated development environment free for download from their web site. It's available in binary form for Windows NT, Windows 98, Windows 95, and Solaris. The promised source code is still not available.
ACIUS has released a beta of 4D Open for Java, a class library for writing Java programs that communicate with 4D servers. 4D is a relational database popular in the Macintosh community. The beta is open to to 4D partners.
Romain Guy's Jext 2.5 is a new programmer's editor written in Java with a plugin architecture for adding additional languages. Jext is released under the GPL.
George Latkiewicz has written a JBrowse plugin for navigating through Java Source code inside the free Java editor/IDE JEdit. The current version is 1.0.1 and is free, GPL'd software.
Greg Guerin's posted a new set of classes called the Text-Lines Toolkit for Java, under the open source Artistic License. This Toolkit consists of classes for working with lines of text using a settable choice of line-ending. It includes input and output classes, in both the {In,Out}putStream and Reader/Writer lineage. The output classes include both a simple LineXXX class, as well as a PrintLineXXX class that's more like PrintStream or PrintWriter. I'm still exploring this API myself but there are some good ideas here.
Sun's posted public draft 1 of its Java API for XML Parsing Specification v1.0. This API describes a class library (more or less implemented by Sun's Project X) that provides basic functionality for reading, manipulating, and generating XML documents from Java programs. The spec's only available in PDF and PostScript format (What, exactly does Sun have against HTML? If it's good enough for W3C specs it should be good enough for Sun.) The servers seem to be a little misconfigured right now and are serving up the PDF as plain ttext, but presumably this will be fixed soon. Comments to xml-spec-comments@eng.sun.com.
Sun's also posted the first public beta of the Forte for Java, Community Edition 1.0. This is a free integrated development environment (IDE) for Java based on Sun's recently acquisition of NetBeans.
IBM's alphaWorks has updated their Remote AWT for Java to fix a bug and improve performance with Swing. The Remote AWT for Java allows Java applications to display their GUIs on a remote host, sort of like X-Windows.
Sun's released version 3.0.2 of the PersonalJava emulation environment that allows you to test Personal Java applications on your desktop PC. This supports verion 1.1.3 of the PersonalJava specification.
Sun pulled Java out of the ISO standardization process a year or so ago because the ISO wasn't willing to let Sun control the process, and insisted on equal participation by other interested parties like IBM and Microsoft. At the time, Sun decided to try to standardize through the ECMA instead, which has much looser requirements for how a technology is standardized. However, more recently Sun has decided the ECMA process still isn't close enough to a rubber stamp for their liking and has refused to hand over the Java specification to the ECMA as originally promised. When Sun pulled out of the ISO process they spread a lot of FUD (a nice word for lies) claiming the ISO had changed the process on them when in fact they did no such thing. Now they're trotting out the exact same story about the ECMA, claiming they changed their rules about copyright ownership when in the fact the rules are exactly what they've always been. It's becoming obvious Sun has no intention of submitting Java to any sort of de jure standardization process. InfoWorld has some more details.
Symantec's announced Visual Cafe 4.0. The standard and expert versions should be shipping soon for $100 and $800 respectively. The Enterprise Edition will be available no earlier than the first quarter of 2000 for $2800. All three version support JDK 1.1 through 1.3b1. Owners of Visual Cafe Professional Edition 3.0 can upgrade to expert for $200. Owners of Visual Cafe Database Edition 3.0 can upgrade to Expert for $100.
I've sent Sun a detailed bug report laying out the problems with content handlers loaded from the local CLASSPATH that have been hashed out here over the last few days. The auto-response says it will take them about three weeks before confirming or denying the report and placing it on the Java Developer Connection Bug parade. Thanks to everyone who sent in suggestions. It would have taken me a lot longer to track this one down on my own.
Rick Moen's written a wonderful article about the importance of the GPL called Fear of Forking. It uses a number of examples from the open source world to show how the GPL strikes exactly the right balance between allowing necessary forks while simultaneously discouraging unnecessary ones. I've wavered over the years between preferring GPL'd source vs. BSD-style licenses and public domain software. Generally I've declared what little code I've written that might actually be of use to someone else to be in the public domain, mostly small libraries or classes here and there; nothing too major. However, I think this article has convinced me that RMS got it right the first time. The GPL virus is the right way to approach the development of free software because it is substantially more resistant to code forking than more open licenses like BSD. The code incompatibilites that doomed many commercial and free Unixes are unlikely to hamper Linux precisely because of the GPL.
A number of people pointed out that starting in Java 1.2, the standard Java classes are no longer
loaded from the CLASSPATH
. Instead they're loaded directly from the rt.jar file using
a special boot class loader which ignores the CLASSPATH
. Furthermore, when the
class loader is null, or when you get a ClassLoader
from
a system class like URLConnection
, you're getting the boot class loader so that
classes will only be loaded from the rt.jar file. This is a change from Java 1.1.
The old behavior can be regained by using the oldjava interpreter or by using
the non-standard
-Xbootclasspath switch to add your own files to the bootclasspath.
The net result of all this is that URLConnection
has a nasty bug in
getContent()
starting in
Java 1.2 because the implementation of that method relies on the old class loading behavior.
That is it needs to load classes from the local CLASSPATH
even
when the ClassLoader
is null.
In particular it won't find content handler classes in the local CLASSPATH
identified by the
java.content.handler.pkgs
property like it should. This bug is masked in applets
because they tend to be using a non-null ClassLoader
. A work-around is to set the
a ContentHandlerFactory
rather than relying on
java.content.handler.pkgs
though this requires access to the source code of the app you're installing
content handlers into. That this bug survived the entire cycle of Java 1.2 releases without getting noticed or
reported suggests to me that content handlers aren't being used very much.
I'll write this up and submit
it to Sun's Bug Parade. Thanks to everyone who wrote in with suggestions that helped me track this bug down.
Sun's posted several new early access releases of JINI software on the Java Developer Connection (registartion required). These are:
Java 1.2.2 is required for all of these.
Sun's also released version 2.1 of the Java Card Developer Kit and Converter. This software allows programmers to write Java Card applets that can be deployed to Java Card 2.1 conformant smart cards.
Sun's released JDK 1.2.2-001 to fix some Y2K issues, particularly noting that 2000 is a leap year. (2000 is divisible by 4 so this is a leap year. However there's an exception that says that a year that's divisible by 100 is not a leap year. However, there's an exception to the exception that says a year divisible by 400 is a leap year so 2000 is a leap year.)
I've received a number of suggestions for how to debug the Java class library. The most common one seems to be simply to recompile URLConnection.java with debugging enabled and put it in the CLASSPATH before the standard version. Although that used to work in Java 1.0, it no longer works in 1.2 and later. (I haven't tested 1.1.) Java always loads classes from rt.jar first if they're available. I suspect it's a security feature. What did work partially was actually replacing the URLConnection.class file in the rt.jar file with my version.
That got me at least
far enough to track the problem into the Class.forName()
method which seems
to not be loading classes from the local CLASSPATH under certain circumstances.
That is useful information, since I originally suspected the
problem was in some of the string manipulation code used to calculate the class name passed to
Class.forName()
rather than in the loading of the class. This allowed me to
develop the following simple test program whose behavior I can't explain:
import java.net.*;
import java.util.*;
public class TestLoader {
public static void main(String[] args) {
try {
System.out.println("With the URLConnection's class loader");
URL u = new URL("http://metalab.unc.edu/javafaq/");
URLConnection uc = u.openConnection();
Object o = Class.forName("com.macfaq.net.www.content.text.tab",
true, u.getClass().getClassLoader());
System.out.println(o);
System.out.println(o.getClass());
System.out.println(o.getClass().getClassLoader());
}
catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("With a null class loader");
Object o = Class.forName("com.macfaq.net.www.content.text.tab",
true, null);
System.out.println(o);
System.out.println(o.getClass());
System.out.println(o.getClass().getClassLoader());
}
catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("With the single argument forName method");
Object o = Class.forName("com.macfaq.net.www.content.text.tab");
System.out.println(o);
System.out.println(o.getClass());
System.out.println(o.getClass().getClassLoader());
}
catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}
}
Here's the output:
D:\JAVA\examples>java TestLoader With the URLConnection's class loader java.lang.ClassNotFoundException: com/macfaq/net/www/content/text/tab at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at TestLoader.main(TestLoader.java:13) With a null class loader java.lang.ClassNotFoundException: com/macfaq/net/www/content/text/tab at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at TestLoader.main(TestLoader.java:25) With the single argument forName method class com.macfaq.net.www.content.text.tab class java.lang.Class null
The last call to Class.forName()
does succeed, so the class is indeed
in the local CLASSPATH, is accessible, and has the right noargs constructor.
Several variations of this code produce the same result. The three argument
version of forName()
always fails to load the file from the
local CLASSPATH whereas the single argument version succeeds. For instance,
the order of the calls to Class.forName()
doesn't seem to matter.
However, according to the class
library documentation the second and third
attempts should be identical.
If anybody can
explain this,
it might help me figure out what's going on in my original problem. Note that
I'm not using any custom class loaders, just the standard JDK 1.2.2 and 1.3b1.
Does anyone know of a debug-symbol-enabled version of the JDK?
Or a debugger that can debug the standard Java class library?
I'm having a devil of a time trying to get a program to work, and I really need to see
what's going on inside the URLConnection
class at runtime.
It's in a pretty unused part of that class (content handlers) so it's not
completely unlikely that the class itself has a bug in the routines I'm using.
JBuilder lets me trace into the class (barely) but won't let me inspect the values of the variables.
If you have any ideas, please drop me a
line. I've wasted too much time on this already.
IBM's released version 3.0 of their payware Visual Age for Java, Professional Edition, IDE for Linux. A free entry level edition may be available later in the month.
Red Hat has announced that they will acquire open source developer Cygnus Solutions for $674 million in Red Hat stock (based on the Friday, November 12, 1999 closing price). early next year. Cygnus is best known for its work on gcc and numerous other GNU tools. This is a little surprising. I would have expected Cygnus to IPO instead.
Sun says they've posted version 0.2 of the K Virtual machine for the Palm Pilot and similarly small devices on the Java Developer Connection (registration required). However as of 10:12 A.M. EST the page seems to have disappeared from the site. I'm not sure whether this is a result of human or computer error or if the page was deliberately pulled for some reason. It could be something as trivial as a misnamed index file when the page was updated. Update: As of 1:00 EST, the page has returned and you can download the new KVM. PalmOS version 3.01 or higher and a PalmPilot III or later are required for deployment.
IBM's alphaWorks has released version 1.2.1 of their TFTP Server for Java to fix a bug that prevented transferring files larger than 32 megabytes.
I'm still catching up on news that piled up in my in box while I was away at SD99 East. If you don't normally read Cafe au Lait on the weekends be sure to scroll down for a lot of important developments that took place over the last week, but didn't get posted here till this past weekend.
Java Secrets is officially out of print.
This is still a unique book that has not been superseded by
anything else on the market. It covers the Java virtual machine, the undocumented
sun
packages, and native code. It was written during the transition between
Java 1.0 and Java 1.1. It focuses on Java 1.1 though you'll find deprecation warnings here and there
if you compile the code. Most of the material is still valid in Java 1.2 and beyond.
There are certainly better descriptions of native code available today, but the
description of the virtual machine is quite different from anything I've seen elsewhere,
and I've encountered no other books that attempt to cover the sun
packages.
Amazon still has a few copies in stock, as do many local bookstores. However, it's going to become increasingly hard to find as time goes on. If you think you might want a copy, now is the time to buy. It probably won't be available again in paper form for at least a couple of years, if it ever is. As time permits I'll be updating chapters from the book and posting them here on Cafe au Lait. However, this will be a slow process that may take a year or more before the entire book is available here.
I've made some minor updates to the containers section of
Week 8, Layout Managers and Containers, of
my Introduction to Java
Programming Course. Swing containers are covered; some of the Dialog
material is cleaned up; and I show you how to center a window on the screen.
Sun has posted minor updates of the JDK 1.1.7 and JDK 1.2.1 to fix Y2K issues. These should only be important to users who need to use JDK 1.1.7 or JDK 1.2.1 specifically, as opposed to the more recent and already compliant 1.1.8 and 1.2.2.
The first beta of the open source application server Enhydra 2.3 is now available. Version 2.3 adds XML Compilation using the IBM alphaWorks XML4J parser (which must be downloaded separately), Secure Sockets Layer (SSL) support, and Dynamic Connection Methods
Tom Ritchford has formed a new mailing list for programmers using Metrowerks Codewarrior to develop in Java. To subscribe send an email to mwjava-subscribe@topica.com.
Let's see if I can catch up on some of the news that backed up while I was away at SD99 East last week. I actually had Internet access at the show but I rarely had any time to use it before the show closed for the night. I really wish hotels would use the space wasted on the price gouging minibar on a PC with a real Internet connection instead, or at least an Ethernet port for a laptop. For $189 a night, is a T-1 connection connection really too much to ask? Or even a phone line that doesn't charge you several times the market rate for calling your ISP? This trip I stayed at the Grand Hyatt on the conference's tab, but I can't see going back there if I have to pay for it myself. D.C. has a lot of equally nice hotels for a lot less money. Last May, I stayed in a larger room at the DoubleTree Suites in Foggy Bottom for a little more than half of what the Grand Hyatt was charging.
Sun's released the first beta of the Java Message Queue. This implements the Java Message Service (JMS) 1.0.1 specification, a standardized API for address-based queues and asynchronous, subscription based queues for message delivery between applications that need to cooperate across a network.
Sun's announced (but not shipped) version 2.0 of its payware Java Blend tool for mapping relational database tables into Java programs without using SQL. Version 2.0 adds
IBM's alphaWorks has released the the RAS Toolkit for Java to "enhance the Reliability, Availability & Serviceability (RAS) of Java programs" by letting programs log to a file what they're doing as they do it.
I've returned from SD99 East. I spent most of my time talking about XML, but I did repeat my seminars on Java Network Programming. The notes are now posted online in PowerPoint format. I'll convert them to HTML in the near future. There wasn't a lot of Java news at the show. Most of the excitement focused on XML. HJowever, I did note that there was some whispering about Python in the hallways. Another unexpectedly popular topic was Extreme Programming. Kent Beck's book describing this methodology, Extreme Programming Explained: Embrace Change, was by far the bestselling book at the conference bookstore. Last year at SD98 East, the whispering in the hallways was about XML. If the next year sees Python or Extreme Programming grow like XML has this year, then they're both set to explode. Otherwise, the conference focused on COM, EAI, and the usual C++ and Java topics.
I'm leaving for the SD99 East conference in D.C. later today. I'll be there to talk about XML and Java Network Programming for the next week. Updates here are likely to be a little sporadic until I get back.
Sun's posted beta 1.0 of the Java Authentication and Authorization Service (JAAS) on the Java Developer Connection (registration required). JAAS is a Java package for authenticating users and limiting access to code to specified users. JAAS implements the standard Pluggable Authentication Module (PAM) framework. Java 2 is required
Mark Hale's released version 0.852 of the
JSci class library
with
a bug fix in the least squares method, axes added to the
LineGraph3D
components, and Ring
and Field
classes.
Jun Fujisawa has released
beta 9 of the WabaSDK for Mac OS.
Waba is a Java like
programming platform for Palm OS and Windows CE
devices.
I'm pleased to announce my appointment as the new resident Java columnist for FatBrain. My first column shows you how to use HTML to label Swing components. New columns will be posted approximately monthly and of course I'll announce them here. Now if I can just get FatBrain to spell my name right :-)
I'm sure that by now you've heard that the findings of fact in the U.S. government vs. Microsoft antitrust case came down squarely against Microsoft. I won't bother to reiterate the findings here. Macintouch has a nice summary and all the usual computer news sites will have more detailed coverage.
Sun's released version 1.2.1 of the Java Naming and Directory Interface to fix a few bugs.
GNUJSP 1.0.0 has been released. This is an open source implementation of Sun's Java Server Pages specification. GNUJSP should work with any JSDK 2.0 or JSDK 2.1 servlet engine including Apache 1.3.6/1.3.9 with Apache JServ 1.0 and Jigsaw 2.1.0.
Sun's posted version 1.3 of the Java Telephony API Specification.
The Java Modeling Language (JML) is a behavioral interface specification language that can be used to specify the behavior of Java modules. It combines the approaches of Eiffel and Larch, with some elements of the refinement calculus.
DMS Decision Management Systems has released KOPI, a GPL'd Java compiler, written in Java. The KOPI suite also includes a Java assembler and disassembler as well as diagnostic tools.
IBM's alphaWorks has updated three products:
Sun's posted a new Java Specification Request for
A Simple
Assertion Facility. Review closes November 12. This would likely be implemented
through a new assert
keyword.
I know this feature is requested a lot, but personally I think this is a horrible idea.
It simply complicates the language while adding
nothing that can't be easily done through the current API.
I can't help but imagine that assert
would be horribly misused by unreconstructed
C programmers who have never learned how to use objects and exceptions and who probably never will,
at least not unless they're forced to by the lack of their familiar tools.
I feel the problems that programmers want assertions to solve
are adequately addressed
by IllegalArgumentException
s and unit tests, both of which are dramatically underused
in existing code.
I'd tell you to send your comments to jsr-comments@sun.com, but since this proposal comes directly from Sun, and since they've yet to reject a single JSR, I can't imagine that this would have any affect. Along those lines, to no one's great surprise, Sun has approved the three previous open JSRs:
Metrowerks has released CodeWarrior for Java 5.0, a $99 payware IDE, that provides remote debugging and a visual builder tool. Code Warrior is avaialble for Mac, Windows, and Solaris though it's mostly used on the Mac where it's essentially the only current IDE. The Solaris version is quite a bit behind the Mac and Windows versions in functionality, though it's nice to see a Solaris package priced the same as the Windows version for a change. The Mac version only supports Java 1.1 since it depends on Apple's behind-the-times MRJ. Other platform versions should support Java 2.
Arcane Technologies Ltd. has released Magician 2.1.2 for Linux/PPC and MacOS. Magician 2.1.2 is an OpenGL native library for Java that interfaces directly with existing OpenGL installations to deliver hardware-accelerator-aware 3D capabilities to Java. Magician supports 100% of core OpenGL 1.2 and GLU 1.2 including support for NURBS surfaces, tesselators and quadrics. Magician is also available for for Windows 95/98/NT, Linux, Irix, OS/2, SPARC/Solaris, and Intel/Solaris. Magician is free (as in "free beer") for non-commercial use. Commercial redistribution licenses are £1000 per application.
IBM's alphaWorks has updated their IBM Classes for Unicode. This release handles code sets that include the Euro symbol and fixes some Y2K bugs. fixes.
Greg Guerin has revised his MacBinary Toolkit for Java to fix some bugs.