Letters to the Editor

This month: Bryan Morgan's call for suggestions (in the debut installment of his new Distributed Objects column) hasn't gone unnoticed. He sifts through the deluge to shape his column's itinerary for the next six months. Plus: Corrections and amendments to Carl Dichter's Java visual IDEs review; more on those JVM server benchmarks; praise for Laurence Vanhelsuwé and Chuck McManis; and two major (and related) design headaches for Bill Venners

Distributed Objects: "Java 1.2 extends Java's distributed object capabilities" by Bryan Morgan


Why no mention of JNI?


I was interested in your article, and think you have generally said things clearly. But I was surprised to see the entire article go by without a mention of the combination of RMI and JNI to deal with non-Java applications. This solution (described in the RMI whitepaper) gives the ability to interact with non-Java code using RMI, and without a specialized technology -- JNI is something one might learn for many reasons, and is a general part of the Java platform.

Using RMI to talk to existing services with a JNI local wrapper is a simple way to take advantage of the RMI benefits even with services that are not (yet?) written in Java.

Ken Arnold

Ken, Thanks for your input. The article was intended to primarily focus on JavaIDL. RMI was discussed in some detail as part of my advanced attempt to clear up what will be certain confusion when Java 1.2 is released with multiple distributed object technologies. I plan to do a more detailed review of JavaRMI alone at some point in the near future and will definitely cover the ability to integrate "native" code using JNI and RMI. Again, thanks for your feedback. Bryan Morgan

Browser support for RMI


I read your column in the April issue of JavaWorld. Can I use RMI with IIS Web server? Do both IE4 and Netscape 4.0x support RMI?

Narong Chansoi

Narong, RMI is a technology that exists and operates outside of a Web server. All that is required is the JDK 1.1 (or greater). If you are asking whether or not RMI can coexist on the same machine as IIS, yes it can. IE4 does not support RMI (nor several other prominent features of Java 1.1.) Netscape 4.0x with the JDK 1.1 patch installed will support RMI. Bryan Morgan

RMI, CORBA, and dynamic invocation


In your table comparing CORBA and RMI, there is a small error. Under "Dynamic Invocation" you say that RMI does not have this feature. This is not true. In fact, RMI can do dynamic invocation in a very natural way, by using the Java reflection API java.lang.reflect on the stub that the client holds. RMI does not need a specific DII to accomplish dynamic invocation; it uses built-in Java facilities.

Ann Wollrath

Java RMI Architect

Ann, I apologize for that error. Because dynamic invocation is not an architectural "piece" of JavaRMI, I neglected to think of simply using other Java APIs to accomplish the same task. I've had several other e-mails asking for more information on CORBA's dynamic invocation capabilities, so it will definitely be a topic of my column in a future issue (perhaps June 1998). I plan to address this issue using CORBA and RMI as there are a lot of Java developers out there using one or both of these technologies. Thanks again for your input. Bryan Morgan

Performance comparisons -- coming right up!


Great article!

Of the three camps of Java developers you outlined in your column, we are in camps two and three. We would like to write pure Java code, but our main concern is something that works and works well.

Because you asked, here are the topics that we would like to see in future Distributed Objects columns:

  • Performance comparisons: RMI vs.CORBA
  • Maintaining and running RMI solutions vs. CORBA-based solutions (What components must be installed on clients and servers? What must be set up and maintained?)
  • Combining RMI with JNI on the server as an alternative to CORBA
  • Real advantages of CORBA apart from legacy code support

Looking forward to reading more of your excellent writings.

Nils Myklebust

NM Data AS


Nils, Thanks for your suggestions. I intend to do a performance comparison article at some point in the next few months. It was not originally scheduled, but I have had several requests for a deeper discussion of that topic. Also, as this column continues and (hopefully) broadens in scope, I will do my best to address the tradeoffs involved when choosing any technology, particularly one involving distributed object. Thanks again for your feedback! Bryan Morgan

Wishing for an EJB overview


Good article. I would like to see an extensive overview on EJB, from the users' and EJB developers' perspective. Particularly, I'd like to see you focus on an EJB's interaction with containers and servers. Everything I have read so far has not been clear.

In your JavaIDL client code example, you have an instance named CalculateHelper that is not explained anywhere in your article, nor in your previous articles. What is this?

John Ragan

John, Your wish is my command! Next month I will be focusing on the Enterprise JavaBeans specification and how CORBA relates to it. After reading the article, I'd be interested in hearing more feedback from you. Let me know if still more information is needed. In addition to my column, I'm sure the topic of Enterprise JavaBeans will be receiving much more attention from JavaWorld in the near future. I apologize for not going into more detail about the CalculateHelper class. The Helper classes are generated as part of the IDL-to-Java bindings and contain a number of standard helper methods. This class was generated by the IDL compiler and is primarily used to "cast" objects and information retrieved from the server. For more information on the IDL-to-Java bindings, visit the JavaSoft or OMG Web sites. Bryan Morgan



I enjoyed your article in the latest edition of JavaWorld.

I would like to see an article similar to the "static" CORBA example, using dynamic CORBA and the Dynamic Invocation Interfaces (DII).

I am planning at this moment an MSc. project which will try to exploit the benefits of browser technology, Java, and CORBA within a multiplatform SCADA (software control and data acquisition) environment. I see the DII as the best step toward integrating the different legacy C++ systems towards a centrally controlled environment, with the view to future implementations being developed using Java.

Any comments? For now, keep up the good work -- JavaWorld is a great magazine!

Hugh O'Donnell

Java Developer

Scottish Power/ScottishTelecom

Hugh, I've written three articles covering CORBA/Java, CORBA/Java/C++, and JavaIDL. I'm trying to gradually introduce many of these concepts (particularly those dealing with CORBA) to the readership at large, many of whom have never worked with CORBA. This is why, to date, we've only dealt with static invocations. DII is one of the features that clearly sets CORBA apart from less mature technologies and I definitely plan to cover it at some point in the future. (My next column will deal with Enterprise JavaBeans.) As far as your MSc. project goes, my experience has been that the browser's Java implementations can be very frustrating at times. Try developing a standalone Java client application first and get that working. Once you're sure all the major bugs have been worked out and the product is communicating well with the server, begin the transition to an applet within a browser. If things that you are sure should work suddenly start breaking, it can help you narrow down the cause (often it will simply be a faulty browser implementation). Good luck and thanks again for your comments! Bryan Morgan

Praise (and a request) for Java book reviewer Laurence Vanhelsuwé


Java certification study guides need a peek


I thoroughly enjoy your comparative book reviews. I find them informative and entertaining.

I am curious about whether you will be doing a review on Java certification study guides. It would be greatly appreciated by this reader.

Marty Harvey

Marty, Thanks for the compliment! The next couple of issues won't deal with certification titles, but it's definitely a book category that I will keep in mind. Thanks for the suggestion. Laurence Vanhelsuwé

"Results of first-ever JVM server benchmark revealed" by John Neffenger


Java vs. C++ benchmark analysis


I've been looking for benchmarks that compare server-side Java with C++ and I haven't been having much luck. You mentioned that you hadn't yet had a chance to understand the results of your Java vs. C++ benchmarks -- has that situation changed? I'm hoping that you'll follow up your excellent Java vs. Java article with Java vs. C++ results -- any chance of that in the near future?

In any case, thanks for your efforts to shed some light on the current reality of Java.

Jeffrey Fredrick

QA Manager

AlphaBlox Corporation

Jeffrey Glad you liked the article. You can try my Java and C++ network programs yourself at:

They're very simple, but they might get you started with your own comparisons. John Neffenger

The loopback (dis)advantage


I am curious about the effectiveness of trying to benchmark client/server applications over loopback on a single machine.

I would have thought that the use of loopback would introduce many "opportunities" for vendors to take shortcuts that would not be applicable in real across-the-Net cases.

One example of this might be short-circuiting network communication before even getting into the network stack. The resulting differences in the work done on a platform-by-platform basis could be quite large and might no longer provide a good approximation of across-the-Net behavior.

Rick Jones

Rick, We have a Java vendor edition of VolanoMark which allows you to run the test over a real network. It's a good thing, though, if vendors optimize their networks for loopback, as there are many cases where you're using local sockets in a real product and you want it to be fast and efficient. For example, the last time I checked, the Apache servlet module used a local socket connection to communicate between the Web server and the Java virtual machine running its servlets. You can only go so far with such optimizations, though. The VolanoMark client and server are running as different processes, with the server process listening on a specific port number. You must at least get out of the process into the networking code in order to handle the socket code used by each of the processes. It's not a shortcut you could write in the Java virtual machine unless your client and server are in the same process. John Neffenger

"We test the top 6 Java visual IDEs" by Carl Dichter


Incremental debug update


I just read your review of Java IDE products. It was well done. I would, however, like to correct an inaccuracy in the features listed. In the SuperCede review, you included the following comment:

SuperCede is the tool with the most RAD-oriented features. It goes beyond the incremental compilers of IBM VisualAge for Java because it can reflect some changes in code without restarting the program. It works like this: When you run your program you can make changes to it without stopping the program; most changes will take effect when you press the Update button.

It is true that SuperCede provides this feature; however, it also exists in IBM VisualAge. (In fact, I imported the sample Bounce application from SuperCede into VisualAge.) IBM's debugger also provides the capability to back up the stack and re-run code.

Of the two packages, I prefer VisualAge because of the extensive GUI editing capabilities and the fact that it doesn't derive its base GUI components from SuperCede base classes that rely on serialization for maintaining layouts. I do, however, like the nearly seamless integration between Java and C++ in SuperCede, though this does tie the Java code to the SuperCede VM.

Thank you for the time you have taken to look at each of these packages. I am currently using VisualAge because I consider it to be the best of what is currently available. But I am constantly looking for other products that address VA's deficiencies. Your efforts are a great help in this endeavor.

David Wegener

David, Noting that all three tools provide some support of incremental debug, I expanded our coverage to describe exactly what is different about each of the three tools. This expanded version of the article (which has also been broken down into more digestible pieces) appeared about a week after the original article debut. Carl Dichter

Component placement in Visual Café


Great article! Our department is currently evaluating IDEs to select one tool for our development and your work will save us a lot of time. Thanks!

I'm confused by one thing. You say that SuperCede and Cosmo Code use drag and drop while the rest of the IDEs in your review use click and click, but I've been dragging components off the Component Palette and the Component Library in Visual Caf&eacute. Either Visual Café supports both modes or I don't understand the difference.

Chris Merrill

Chris, You are correct. I found that Visual Café supports both click-and-click and drag-and-drop modes of component placement (it's the only IDE that does), so I corrected the wording. Personally, I don't have a preference between these modes, but I noted them for readers who might care. Carl Dichter

Java In-Depth: "The basics of Java class loaders" by Chuck McManis


Creating a class (un)loader


Your article provided me with a very good understanding of how class loaders work. I am interested in writing a class loader that can unload previously loaded classes and load new set of classes on request.

1 2 Page 1
Page 1 of 2