This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:

The document's metadata is available in BibTeX format.

Find the publication on Google Scholar

This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.

Diomidis Spinellis Publications

Copyright © 2003 by the Association for Computing Machinery, Inc. Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, to republish, to post on servers, or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from Publications Dept, ACM Inc., fax +1 (212) 869-0481, or

Book review: Java Enterprise in a Nutshell

Diomidis Spinellis
Athens University of Economics and Business

Jim Farley, William Crawford, and David Flanagan
Java Enterprise in a Nutshell
O' Reilly & Associates Inc., Sebastopol, CA, USA, 2002
Second edition
970pp. ISBN 0-596-00152-5

Mathematics is sometimes defined as "whatever mathematicians do". Defining "enterprise computing" in a similar way would not be unjustified. The Java Enterprise application programming interfaces (APIs) provide functionality for working with databases and transactions, implementing distributed programs through remote calls and components, developing web-based services, handling XML, accessing directory and naming services, and utilising messaging; in short, the technologies used to build a modern enterprise's information systems.

The material covered by Farley, Crawford, and Flanagan is vast. The book's first half provides an introduction to each enterprise technology covered by the Java's Enterprise APIs. Readers versant in Java and knowing the basic concepts of each underlying technology (e.g. relational databases, or web application programming) can read the relevant chapters to quickly grasp the structure and use of each Enterprise API. Although providing realistic examples for enterprise applications is a difficult task, the authors have managed to give readable Java code that introduces the basic programming concepts for using each specific API.

Developers of enterprise applications are likely to use the JDBC API for interacting with relational databases. Once the application is distributed among different hosts the remote method invocation (RMI) API will be used to invoke Java methods on another computer, while Java IDL and CORBA calls could be used to access functionality in non Java programs; distributed transactions are supported by the Java Transaction API (not covered in this book). In the context of distributed applications the Java Message Service API provides asynchronous notifications between applications, while JavaMail can be used to interact with the human users: e.g. customers, suppliers, and employees. These users are also likely to access an enterprise's web site. The two technologies used here are Java servlets that provide active web content in the form of server-executed Java code, and the more versatile (and often abused) JavaServer pages that allow the mixing of presentation with application logic. Developers who want to move to the other extreme of totally separating the business logic from the applications that depend on it can package it in Enterprise JavaBeans (EJBs): components that rely on a container provider for transaction processing, object persistence, security, and resource pooling. Finally technologies for processing, navigating, and transforming XML documents, (SAX, DOM, and XSLT) are often used to glue the above pieces together.

The second half of the book contains reference material, and is divided into two parts. The first part has chapters covering SQL, the RMI tools, the interface definition language (IDL) and tools used for specifying the interfaces of CORBA components, the CORBA services, and the EJB Query Language (EJB QL). Programmers can use EJB QL to perform queries against the EJB persistent store provided by their container, accessing in effect EJB object properties through a subset of SQL. Finally the book's last 470 pages form an API quick reference providing for each package a short description, its interfaces, classes and exceptions, and for each class and interface a description, an inheritance diagram, and a list of their methods and fields.

The book's first half is readable and understandable, once readers acquaint themselves with the inevitable deluge of acronyms. The few problems your reviewer could spot, such as inconsistent indentation in two JDBC examples, a rather cryptic explanation of the RowSet interface, and the cross-selling of other books from the same publisher, do not diminish the book's value. The reference part is formatted with care and is functional and easy to use. Although serious enterprise application developers will need additional details to implement their information systems (Sun's online reference pages come mind), the "Java Enterprise in a Nutshell" is likely to be the first and often last book they will have to consult.