Errata

Java Enterprise in a Nutshell

Errata for Java Enterprise in a Nutshell

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.

Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted by Date submitted
Printed Page 6
top of page

It says "The extension package also supports scrollable result sets, batch
updates, and the storage of Java objects in databases." Unless I am mistaken,
the java.sql package already provides scrollable result sets and batch
updates.

Anonymous   
Printed Page 24
top of page, 1st full paragraph

callinggetObject() - is missing a space between "calling" and "getObject()".

Anonymous   
Printed Page 29
4th paragraph

In discussion of DatabaseMetaData methods, the paragraph states that the class "provides an overwelming number of methods .... The full list is given in Chapter 17, The java.rmi.server Package."
Should read: "The full list is given in Chapter 18, The java.sql Package."

Anonymous   
Printed Page 38
Table 2-2

Table 2-2 states the absolute scrolling function can take a negative value as
its argument. Is this true? What might it mean to tell the DB to go to record
number -5?

Anonymous   
Printed Page 52
1

class constructor is partly missing only the comment and the closing bracket are
present.

See source code for AccountImpl.

Anonymous   
Printed Page 56
last paragraph, 5th line from bottom

Note that these three methods (bind(), rebind() and
unbind()) can be called only by clients running on the
same host as the registry. If a remote client attempts
to call these methods, the client receives a
java.rmi.AccessException.

On Java Remote Method Invocation Specification-Java 2 SDK, v1.3.0, December
1999, Section 4.3, The Naming Class says:

The java.rmi.Naming Class provides methods for storing
and obtaining references to remote objects in the REMOTE
object registry.

in the next paragraph:

where HOST is the host (remote or local) where the registry
is located

Have I missed something?

Anonymous   
Printed Page 112
Example 4-11; to make a dynamic call to the doThis method

Missing: dynamic discovery of parameters & return types

CORBA Interface Repository API's provide self-describing system based on
metadata stored for dynamic search & review.

I'm no expert, but Orfali, Harkey & Edwards in "Instant CORBA" c.1997 chapter
5, page 62 suggest the following steps to dynamically invoke a remote method
on an object reference. They also note the use of the Trader service for
additional info. (The following copied/paraphrased from above - WARNING:
untested - I don't normally use this).

1) Obtain the interface name - in your example, call
objRef._get_Interface_def(); to get org.omg.CORBA.Object which is an
InterfaceDef object in an Interface Repository.

2) Obtain the method description from the Interface Repository - call
lookup_name to find method to invoke, then call describe to get method's full
IDL definition or call describe_interface to get a full description ...

3) Create argument list - this is where your example continues.

Anonymous   
Printed Page 112
line 7 in Example 4-11:

The variable singleORB is never used.

Anonymous   
Printed Page 113
lines 6 and 7

There are two places referring to Java 1.2 in the book, but in the sample
codes on the web site, it refers to Java 2. When I tried Java 2 (1.3), it
returned a NOT_IMPLEMENTED exception. Is the book wrong?

Anonymous   
Printed Page 119
bottom of page

SerlvetRequest -> ServletRequest

Anonymous   
Printed Page 146
second sentence

extra space within the word "String"; line currently reads
..."object and use it to store some St ring values. The keys..."

Anonymous   
Printed Page 147
middle of page

missing space between "InititalContext" and "object"; line currently reads
"naming system, you must first create an InitialContextobject. The
InitialContext..."

Anonymous   
Printed Page 147
near bottom of page

com.sun.jndi.fscontext.RefFSContxtFactory ->
com.sun.jndi.fscontext.RefFSContextFactory

Anonymous   
Printed Page 152
last part of the NamingShell example

In main() the creation of the Shell is missing:

NamingShell shell = new NamingShell();

Anonymous   
Printed Page 159
1st paragraph

I believe you meant to say NameClassPair rather than NameValuePair in a couple
of areas. According to the JSDK 1.3 API, NameValuePair is part of CORBA and
not part of JNDI.

Anonymous   
Printed Page 161
middle of page

java.io.File newfile = java.io.File("c: emp
ewfile");
tempContext.bind("newfile", newfile);

There are *three* errors:

1. The right hand side after "=" is missing "new".
2. There are unescaped backslashes in the quoted string.
3. This doesn't work! java.io.File does not implement Referenceable and so
the bind() throws an exception at runtime.

Anonymous   
Printed Page 168
near middle of page

andREPLACE_ATTRIBUTES -> and REPLACE_ATTRIBUTES

Anonymous   
Printed Page 178
last code example

Due to Java's single inheritance rule, one cannot extend multiple classes.

Therefore, the example should read:

public interface Person extends EJBObject {

This is also true because EJBObject already extends java.rmi.Remote!

Anonymous   
Printed Page 178
comment on above erratum

The truth is: "Interfaces are different from classes in one very important
way, however. An interface can extend more than one interface at a time." So,
the syntax of the original code was correct (as well). Although it isn't
necessary to extend the Remote interface explicitly, it may be easier to
understand that way.

Anonymous   
Printed Page 195
near bottom of page

afterBegins() -> afterBegin()

Anonymous   
Printed Page 198
3rd paragraph

"The first finder method returns a single Profile object..." In Example 7-8
immediately following, the return type defined in the home interface
reiterates this: "public Profile findByPrimaryKey(...". However, the next
paragraph says "If a findXXX() method finds an appropriate bean...a single
primary key...(is) returned to the client. This is consistent with Example
7-9: "public ProfilePK ejbFindByPrimaryKey(...".

I believe 7-8 should read as follows: "public ProfilePK findByPrimaryKey(...",
and that paragraph 3 should also be changed.

Anonymous   
Printed Page 199
3rd paragraph, 2nd sentence

The implementation must also provide additional findXXX()
methods to match any other ejbfindXXX() methods on the home
interface.

should read:

The implementation must also provide additional ejbfindXXX()
methods to match any other findXXX() methods on the home
interface.

Anonymous   
Printed Page 203
5th method

The function ejbFindByPrimaryKey calls the loadFromDB function to
verify the existence of a certain primary key. However, the
loadFromDB function actually reads in the values from the database,
and stores them in the instance variable mEntries. As I
understand it, the ejbFindByPrimaryKey function is only supposed to
verify the existence of the specified primary key in the database,
and throw FinderException if it does not exist. The
ejbFindByPrimaryKey function is not supposed to actually change the
values in the particular bean instance, is it? All other examples
I can find seem to contradict this particular example. If I am
misunderstanding this method, I would love to know.

Anonymous   
Printed Page 273
The second paragraph begins with a superfluous ">".

Anonymous   
Printed Page 274
top of page (two times)

an paragraph -> a paragraph

Anonymous   
Printed Page 363
class javax.ejb.EJBException

EJBException extends RuntimeException class is an unchecked exception, not a
checked exception. Not sure if description is still valid. The javadoc for
the class says, "The EJBException exception is thrown by an enterprise Bean
instance to its container to report that the invoked business method or
callback method could not be completed because of an unexpected error (e.g.
the instance failed to open a database connection)". Did not find any
information on what the container code should do when it catches this
exception from a EJB business method.

Anonymous