November 1999 Java News

Tuesday, November 30, 1999

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.

Monday, November 29, 1999

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.

Friday, November 26, 1999

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.

Thursday, November 24, 1999

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.

Wednesday, November 24, 1999

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.

Tuesday, November 23, 1999

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.

Monday, November 22, 1999

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.

Sunday, November 21, 1999

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.

Friday, November 19, 1999

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.

Thursday, November 18, 1999

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.)

Wednesday, November 17, 1999

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.

Tuesday, November 16, 1999

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.

Monday, November 15, 1999

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

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.

Sunday, November 14, 1999

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.


AlphaWorks has also updated several Java tools including

Saturday, November 13, 1999

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.

Monday, November 8, 1999

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.

Sunday, November 7, 1999

Download WABAJun 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.

Saturday, November 6, 1999

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.

Friday, November 5, 1999

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.

Thursday, November 4, 1999

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:

Wednesday, November 3, 1999

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 IllegalArgumentExceptions 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:

Tuesday, November 2, 1999

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.

Monday, November 1, 1999

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.

You can also read the news from January, February, March, April, May, June, July, August, September, and October if you like.


[ Cafe au Lait | Books | Trade Shows | Links | FAQ | Tutorial | User Groups ]

Copyright 1999 Elliotte Rusty Harold
elharo@metalab.unc.edu
Last Modified November 30, 1999