Sie befinden sich hier: Home » Wissenstransfer » Java » Buchrezensionen

Java Bücher Hits und Flops

Diese Seite listet einiges an Java Literatur auf, die ich gut finde und nicht so toll finde. Meine Lieblinge bei Amazon.

Java allgemein

Hardcore Java
Robert Simmons. O'Reilly. ISBN 0-596-00568-7. März 2004. 344 Seiten
Warum tut mir O'Reilly das an? Ich setze es ohne Bedenken auf Platz 1 in der Liste der Java-Bücher, die einen völlig verfehlten Titel tragen. Im Vorwort wird noch groß verkündet: "We're talking about difficult but extremely powerful and useful programming techniques like reflection, advanced data modeling, advanced GUI design, and advanced aspects of JDO, EJB and XML-based web clients. This unique book reveals the true wizardry behind the complex and often-mysterious Java environment." und dann kommt nur Anfängerstoff und nix von JDO, EJB oder XML. Dafür umso mehr Kindergartenthemen: Jede Klasse ist von java.lang.Object abgeleitet, ein "if" verträgt auch komplexe Anfragen mit ZWEI Bedingungen oder dass es einen ?-Operator gibt. Echt Hardcore! Des Weiteren deklariert Felder in umständlicher Syntax int[] AN_ARRAY = new int[] {1, 2, 3, 6, 9, 18, 36}; statt einfach nur int[] AN_ARRAY = {1, 2, 3, 6, 9, 18, 36}; Und schließlich 30 Seiten Auseinandersetzung von final. Die Namen der Color-Konstanten sind klein statt groß (gibt es "erst" seit Java 1.4) geschrieben, und warum der Autor in dem Calendar-Beispiel ausdrücklich nach GMT fragt, ist ebenfalls sonderbar, denn für das Beispiel spielt das überhaupt keine Rolle:

private Date creationDate = Calendar.getInstance(TimeZone.getTimeZone("GMT")).getTime( );

Im nächsten Kapitel über immutable kommt natürlich der Hinweis auf String (immutable) und Point, Date, StringBuffer (nicht immutable), aber wertvolle Hinweise, etwa das immutable-Typen die Entwicklung von multitheaded-Anwendungen massiv erleichtern und immutable Objekte gut in einen Pool passen (wie einige Wrapper-Objekte in Java 5) werden unter den Teppich gekehrt. Immerhin erwähnt er die Unmodified-Wrapper. Weiter zum nächsten Hardcore-Thema, der Collection-API. Mr. Simmons schreibt: "...code is an example of a good interface-based technique:"

public class SomeClass {
  HashSet someSet = new HashSet( );
  protected Set someMethod( ) {
    return this.someSet;
  }
}

Der Objekttyp von someSet sollte wohl Set statt HashSet sein. Und warum ist in dem Beispiel die Methode gerade protected? Und someSet paketsichtbar? Da steckt vermutlich Hardcore Java Design-Erfahrung im Code. Na ja, dann hakt das Kapitel noch mal eben alle Hardcode-Collection-Klassen ab. Dass Robert fail-fast von Iteratoren erklärt, ist super, aber dann der nächste Rückschlag bei set.add(new String("p->" + element)). Was soll denn das heißen? Das nächste Kapitel heißt Exception-Handling (in welchem Java-Einführungsbuch steht das bitte schön nicht?) und der Hinweis, dass finally eine gute Stelle ist, um Datenbankverbindungen zu schließen. Das folgende Kapitel ist noch viel härter. Es geht um innere Klassen. Jetzt ist es an der Zeit, sich jeden Satz ganz genau anzuschauen und sich hoch zu konzentrieren. Radio aus, Fernseher aus, Computer aus. Weiter zum nächsten Hammerthema – Konstanten und Internationalisierung. Dass Robert auch Klammern kennt, zeigt er in Anweisungen wie dieser:

double area = (Math.pow(radius, 2) * PI);

(Wie wäre es stattdessen einfach mit radius * radius * 2? Oder wollte er ein Beispiel für größtmöglichen Rechenaufwand leisten?) Um vielleicht ungenauen Pi-Belegungen von Sun über Math.PI vorzubeugen, ist es auch sinnvoller, gleich selbst PI vorzubelegen: public static final double PI = 3.141;. Ist viel viel besser! Im Kapitel werden auch Bit-Felder vorgestellt inklusive der Bit-Operatoren. Bei den anschließenden Aufzählungen und Konstanten-Objekten baut der Autor dann erst einmal das Java 5 enum nach, bis er schlussendlich im letzten Kapitel auch zu Java 5 kommt. Dann kommt aber doch noch ein interessanter Absatz über readResolve() bei der Serialisierung. Immerhin hat Robert verstanden, dass es Klassenlader gibt: "You may think that since the constant object is final and static, this will guarantee that only one instance of each constant object will be in memory. I used to think the same thing until I was blindsided by a vicious bug in a genetic research system." Impressive! Im 8. Kapitel geht's um Datenmodellierung. Kein Java-Thema und auch nur ein paar Seiten. Der Ansatz: "Unterstreiche alle Nomen und du hast Klassen, unterstreiche alle Verben und du hast Methoden" darf auch nicht fehlen. So hat Robert sicherlich große Enterprise Systeme modelliert. Kapitel 9 hat Reflection zum Thema und etwas zum java.beans Paket. Seine Lust, an alle möglichen finalen Variablen auch final dranzuschreiben, sinkt. Kapitel 10 kommt auf Proxies zu sprechen, und dass die bei CORBA und RMI vorkommen. Nachdem ein selbstgebauter Proxy sich vorstellen darf, kommt es doch noch zu Einsatz vom InvocationHandler/Proxy. Jetzt wird es langsam interessant. Kapitel 10 spricht von schwachen Referenzen. Er implementiert ein

public class WeakHashSet extends AbstractSet implements Set

(warum steht hier implements Set?) und schreibt einen Weak-Listener. Solch ein Konstrukt ist insbesondere in Swing-Anwendungen sehr nützlich, doch hier hätte ich den Hinweis gut gefunden, dass etwa die OpenIDE, also NetBeans, hier schon etwas anbietet. Wo jetzt andere "Hardcore"-Bücher einsteigen ist seines, oh schade, schon zu Ende. Das war eigentlich das letzte Kapitel! Denn Kapitel 12 ist das Abschlusskapitel mit Java 5 und geht auf die Neuerungen ein. Doch seien wir ehrlich: Harte Nüsse wie Generics lassen wir uns viel lieber von einem echten Crack, von Joshua Bloch, in seinem Buch erklären. Dann müssen wir uns nicht Beispiele wie dieses hier anschauen:

class SomeClass<Type> {
  Type value = null;
  public Type getValue() {
    return this.value();
  }
  public void setValue(final Type value) {
    this.value = value;
  } 
}

Typvariablen sollten immer nur aus einzelnen Großbuchstaben bestehen. Bei einer Deklaration wie Type getValue() sieht sonst Type wie ein ordinären Java-Typ aus. Und warum wird value mit null initialisiert. Das ist doch klar, dass die JVM das mit null belegt. Was zeigt das Buch? Immerhin das O'Reilly den Mut hat, die schlechten Bewertungen auf der Webseite stehen zu lassen und nicht zu löschen. Meine Hochachtung. Bei Amazon sind die Bewertungen aber noch ehrlicher. Mut wird O'Reilly erst dann wirklich beweisen, wenn sie a) den Titel umformulieren, b) sich einen neuen Autor suchen, der das Buch umschreibt bzw. erweitert oder c) – die beste Option für jetzt – das Buch aus dem Sortiment nimmt. 4 Jahre nach Erscheinen wird's Zeit dafür. Mai 2008

Java/J2EE Job Interview Companion - 400+ Questions & Answers
Arulkumaran Kumaraswamipillai, Sivayini Arulkumaran. Lulu.com. ISBN 1411668243. April 2007. 355 Seiten
Es handelt sich um ein interessantes Buch, welches ich in dieser Form noch nicht gelesen habe. Meist dreht es sich ja um Anwendungsdesign oder harte Technologien, aber ein Buch, welches für Java-Entwickler mögliche Bewerbungsfragen sammelt, ist mir neu. Daher sollte das Werk auch von zwei Seiten beleuchtet werden: Vom Interviewer und vom Interviewten. Beide Gruppen erhalten mögliche Standardfragen zu diversen Themen aus Java SE, Java EE (+Hibernate +Spring) sowie Anwendungsdesign. Das Niveau wechselt zwischen "Was ist der Unterschied zwischen String und StringBuffer?" und "Erkläre Inner Join und Outer Join." Beide Parteien erhalten ausreichende Antworten, wobei das Buch nur kurze Erklärungen liefert und auf breite Ausschweifungen verzichtet; sonst könnte leicht ein 2000 Seiten starker Wälzer daraus werden. Die Fragen sind gut gemischt und decken optimal das Standardwissen jedes Entwicklers ab. Trotz des Lobes kann die Erwähnung einiger Fehler nicht unterbleiben. Ein Beispiel zum Thema Varags: "The type must be Object and it must be the last argument or the only argument to the method." Natürlich kann jeder Typ bei Varags verwendet werden, int... genauso wie String…. Hinzu kommen noch ein paar Kleinigkeiten, wie \n statt %n in printf(), klein geschriebene Enum-Konstanten, String-Konkatenationen im SQL-Statement für variable Teile statt Prepared-Statement und nicht erreichbarer Programmcode beim Schließen von JDBC-Connections, wenn es vorher eine Exception gab. Dennoch alles in allem ein gutes Buch zur Vorbereitung und auch zum Auffrischen des Java-Wissens für Entwickler, die schon ein paar Jahre Java programmieren. Mai 2008

Das Java Codebook
Marcus Wiederstein, Marco Skulschus, Mark Donnermeyer, Dirk Brodersen, Benjamin Rusch. Addison-Wesley. ISBN 3-8273-2059-3. 2003. 858 Seiten
Programmabschnitte, sog. Snippets, gibt es im Internet genug (wir wäre es alternativ mit dem Java-Almanac?) und wer eine Suchmaschine bedienen kann, wird immer, ja immer, die Bibliothek oder den Quellcode-Schnippsel finden, die er sucht. Um so erstaunlicher finde ich es, wenn Verlage Quellcode-Kochbücher veröffentlichen, ob sie nun Codebook oder Cookbook heißen. Ernsthaft: Wer eine Klasse zur Bruchrechnung sucht oder ein Beispielprogramm zum Aufbau eines Swing-Fensters, geht sicherlich nicht zum Regal, sucht im Index nach "Bruch" und holt sich dann die Klasse von der CD. Daher die Frage - ist ein Buch wie "Das Java Codebook" notwendig? Das Positive zuerst: Die Kapitel über reguläre Ausdrücke und Applets (Daten im Cookie speichern, Uploads, Applet-Konverter für Tags), die kleinen Beispielprogramme, in denen man etwa über ein BufferedImageOp.filter Bilder heller/dunkler macht, sowie Hinweise zur Transparenz und der Index finde ich prima. Eigentlich sind Bücher mit Quellcode gut, denn Software-Entwickler lesen im Allgemeinen zu wenig. Das Studium von Quellcode hilft jedem Entwickler, neue Idiome zu lernen und seine Fähigkeiten zu verbessern. Je nach Schwerpunkt des Buches lernt man weitere Möglichkeiten der Standardbibliothek kennen oder neue Open-Source-Bibliotheken. Soweit die Möglichkeiten guter Codebooks. Leider hat das Java Codebook dann doch die eine oder andere Schwachstelle, sodass man Software-Entwicklern vielleicht doch besser direkt zur Google-Suche raten sollte. (Immerhin gibt es das Buch als PDF.) Die Probleme im Detail: Die Klasse CalcExample deklariert drei Variablen (Sichtbarkeit könnte auch anders sein), doch vergisst, dass es ZERO, ONE, TEN schon in BigDecimal gibt:

static final BigDecimal ZERO = new BigDecimal(0);
static final BigDecimal ONE = new BigDecimal(1);
static final BigDecimal FOUR = new BigDecimal(4);

In anderen Beispielen gefällt mir die Schreibweise der Felder nicht. Einiges ist nach der Bauart String []array, also Typ, Leerzeichen, Variablenname aufgebaut. Das habe ich nach 11 Jahren Java hier zum ersten Mal gelesen. Zumal sich die Autoren hier uneins zu sein scheinen, denn sie verwenden auch String[]. Die fünf Autoren des Buchs folgen demnach keiner einheitlichen Coding-Konvention. Ein weiteres Thema betrifft die Methodennamen: Überwiegend werden englische Bezeichner (setNumber, less100, ...) gebraucht, doch lassen sich innerhalb eines Beispiels Vermischungen mit deutschen Variablennamen entdecken, wie das Feld ZEHN. Einige Autoren mögen (immer noch) die Klassen Hashtable und Vector, andere nutzen doch besser List und Map - hat denn keiner der Autoren die anderen Kapitel gelesen und kommentiert? Bei den Datenstrukturen frage ich mich wirklich, was denn arrayList.add(new String(new java.util.Date().toString())); für eine Anweisung sein soll. Und warum wird ein Stack noch mal neu implementiert? OK, der Original-Stack erbt von Vector, was vom Design total verpfuscht wurde, aber dann könnte man doch immer noch den neuen Stack so implementieren, das er an den alten Stack delegiert, anstatt alle Operationen komplett mit einer ArrayList neu zu implementieren. (Und dann noch die fragwürdige Methode search() zu übernehmen.) Eine weitere Schwachstelle, die ich in der Insel weitestgehend versuche zu vermieden, sind Windows-spezifische Pfadangaben, wie etwa bei new FileOutputStream("c:\\buecher.ser"). Bei IO-Beispielen fehlt oft das close() im finally. Vor allem bei HTTP-Servern ist das kritisch. Im JSP-Kapitel findet sich plötzlich ein JDBC-Close im finally; also hat es nicht jeder der Autoren vergessen. Frage: Was gibt dieses Programm bei Argumenten auf der Kommandozeile aus?

package javacodebook.io.stdout;
public class StdOut {
 public static void main(String[] args) {
  String text = "Hallo Welt";
  //Wenn Text angegeben, dann diesen ausgeben
  if(args.length < 1)
   for(int i = 0; i < args.length; i++)
    System.out.println(args[i]);
  else
   System.out.println(text);
  }
}

Dass ist wohl eher eine Zertifizierungsfrage statt eines sinnvollen Codebeispiels, denn ist die Anzahl der Argumente kleiner 1, gibt es keine Argumente und die Schleife ist nutzlos. Genauso falsch ist der Satz "JDBC benutzt dabei die Interfaces Connection, Driver und DriverManager." Schade, denn DriverManager ist eine Klasse. Sollte es auch, denn aus dieser Zentrale erhält man durch die statische Methode getConnection() eine Verbindung. Im Anhang finden sich dann noch ein paar Dreher in der Groß-/Kleinschreibung. Z. B. beginnen einige Bezeichner in der Tabelle "Java Native Interface Typen" mit Großbuchstaben. Besser wären "int" statt "Int" sowie "void" statt "Void" usw. Ähnliches gilt für JscrollPane, was zu JScrollPane werden sollte. Unter "Relationale Operatoren" findet sich folgender Satz bei ==-Operator: "a == b ergibt true, wenn a gleich b ist. Handelt es sich bei a und b um Referenztypen, so ist der Rückgabewert dann true, wenn beide auf dasselbe Objekt zeigen." Wir sollten den Sonderfall a = b = NaN aber nicht Außeracht lassen, denn gerade dann ist a = b, aber das Ergebnis nicht true. In der Tabelle "Klassenobjekte für den primitiven Datentyp" sollte Void besser nicht auftauchen, da es sich nicht um einen primitiven Datentyp handelt. Oder Void stehen lassen, aber die Überschrift anpassen. Einige Kritikpunkte betreffen die Auswahl der Klassen. Die Klasse Fraction sollte vielleicht besser einer bekannten Open-Source-Bibliothek entstammen und die Matrizen sowie der umfangreiche Quellcode nicht unbedingt abgebildet werden. Für CSV-Dateien wären populäre Standard-Klassen sinnvoller. Der Tipp 186 für Timer sollte diesen nicht selbst implementieren, sondern die zwei (!) Timer-Klassen der Java-Lib vorstellen. Da ein Codebook grundsätzlich eine unendliche Sache ist, könnten weitere Snippets eingebracht werden. Bei den Zufallszahlen wäre z. B. SecureRandom gut untergebracht. Das Beispiel FindInFile, was händisch nach einem String in einer Datei sucht, lässt sich viel effektiver mit NIO (mit Standard-Beispiel von Sun) lösen. Das NIO-Kapitel kommt mit nur zwei Beispielen daher (Datei kopieren und File-Lock). Das ist eine magere Ausbeute. Später kommt noch ein NIO-Server dazu. Der Verweis auf eine einfache NIO-Bibliothek (wie xSocket) wäre dann wünschenswert. Um ein Fenster mittig zu positionieren, muss man nicht rechnen, hier reicht eine Java-Funktion. Wenn es sich schon um ein Java 1.4 Buch handelt, dann sollte ImageIO Grafiken laden. Die Swing-Beispiele sind relativ unspektakulär. Hier wäre es wohl sinnvoller statt "wie erzeuge ich einen Button" oder "wie etwas mehr mit den Modellen zu machen", einen Dateibaum in ein JTree zu setzen. Und stilistisch wertvoll ist der Hinweis mit der JDBC-Verbindung in einem JSP-Tag sicher nicht. Und wo sind die DAOs? Bei JMS stimmt es zwar grundsätzlich, dass in einer Tabelle bei Programmiersprachenunabhängigkeit "Nein" steht und bei HTTP "Ja", doch allgemeingültig ist das nicht. Für ActiveMQ gibt es ein standardisiertes Protokollformat (OpenWire) und APIs für diverse andere Programmiersprachen. Das gleiche gilt auch für IBMs WebSphere MQ (früher MQSeries) - sicherlich eines der besten MOMs -, das heterogene Plattformen verbindet. Einen XML-Parser über die Anweisung org.apache.xerces.parsers.DOMParser parser = new org.apache.xerces.parsers.DOMParser(); statt über JAXP zu erfragen ist nicht schön sondern fast grob fahrlässig. Zudem haben auch die JAXP-Parser Features, obwohl die String-Kennungen dann immer ein wenig anders aussehen. Zu Tipp 196: Wann immer man sich mit getGraphics() einen Grafik-Kontext holt, sollte man ihn auch wieder freigeben. Dieser Hinweis fehlt leider in den Beispielen. Farbkonstanten sollten groß geschrieben sein, also Color.WHITE, statt Color.white, zumindest seitdem Sun diese Konvention in Java 1.4 eingeführt hat. August 2007

Bitter Java. The lessons taught by server-side Java antipatterns
Bruce A. Tate. Manning. ISBN 193011043X. 2002. 368 Seiten
Das Buch habe ich schon relativ lange und vor ein paar Jahren warf ich schon einmal einen Blick darauf. Ich hatte es wieder zur Seite gelegt, da es mich damals nicht so angemacht hat und die einführenden Geschichten mich langweilten. Da das Buch jetzt „raus“ sollte, nahm ich es mir noch etwas genauer vor. Kurz gesagt: Es langweilt mich immer noch. Im meinen Augen ist es ein Buch mit sehr wenig Inhalt gesegnet und dazu noch mit Listings, die unglaublich flau sind. Didaktisch bin ich kein Freund der Strategie erst-mal-alles-falsch-zeigen-und-dann-100-Seiten-weiter-korrigieren. Das Buch basiert auf der Idee. Und so wundert man sich als Leser kapitelweise, warum denn zum Beispiel Datenbankverbindungen nicht in einem finally geschlossen werden; das klärt erst das Kapitel 7.3.2 auf. Ebenfalls Datenbankenverbindungen: Sie werden immer wieder auf- und abgebaut, obwohl das die größte Performance gibt. Schade, dass das erst später in Kapitel 7.2.3 erklärt wird. Dann wäre aber eine Nennung einiger Open-Source Connection-Pools nicht falsch. Quer durch viele Listings – nicht alle – finden sich Datenstrukturen wie Vector oder Hashtable, in einigen anderen wiederum die Type der Collection-API. Überhaupt entwickelt Bruce vieles selbst, etwas das Cache-Management mit einer Hashtable. Warum hier keine Open-Source Lösungen genannt werden, verstehe ich nicht. Das gleiche auch bei einem selbst entwickelten Controller bei JSPs. Dass JSP wenig/kein Java-Quellcode enthalten sollte, müsse heute wirklich jedem Entwickler klar sein; aber seine Lösung, die Java EE Pattern selbst zu implementieren finde ich keine gute Idee. Stilistisch gibt es weitere Schwächen, extrem viel im Bereich Exception-Handling. Hier weiß ich überhaupt nicht, was Bruce sich dabei gedacht hat. Einige Beispiele: Warum wird zum Öffnen einer Datenbankverbindung mit vorangehendem Class.forName() ein Throwable gefangen? Warum werden gleich zwei RuntimeException nach oben geleitet wie in getAuthor und später nach mal in getNumber():

public String getAuthor(int index) throws IndexOutOfBoundException, ArrayIndexOutOfBoundException{
 return (String) author.elementAt( index );
}

Dann werden Typen aus dem java.lang-Paket, wie im Kapitel 6.3.1 mit catch(java.lang.Throwable) voll qualifiziert; und immer wieder wird Throwable aufgefangen. Und ich kann auch nicht sehen, warum es beim Erzeugen eines Punktes und Aufrufes dreier Setter zu einer Ausnahme kommen kann, die man abfängt. Danach noch mal das gleiche mit einem TextField. Und warum AWT und nicht Swing?

ivjTest = new java.awt.Button();
ivjTest.setName( ... );
ivjTest.setBounds( ... );
ivjTest.setLabel( ... );

Oder auch dieses Exception-Konstukt:

public static void main( ... ) {
 try { ... }
 catch ( Exception e ) {
  throw new RuntimeException( e.toString() );
 }
}

Weitere Beispiele lassen an den Korrekturlesern zweifeln. Der Schleifenzähler ist i, aber im Rumpf wird er mit _i genutzt. Dann eine Zähler-Klasse:

class counter
{
 public static Integer count = 0;
 public void count() {
  Integer temp = count;
  temp = temp + 1;
  count = temp;
 }
}

Ganz davon abgesehen, dass man Klassen großschreiben sollte, kann man (jedenfalls nicht bist Java 5) mit Wrapper-Objekte nicht rechnen und auch nicht mit 0 initialisieren. Und warum werden Objektvariablen mit null initialisiert, wie bei private D d_ = null;? Einen Knüller fand ich händisch konkatenierte SQL-Anweisungen, statt gleich PreparedStatements zu verwenden: wie "SELECT subject, author, board, number from posts where board='" + getBoard() + "' and parent=0" oder noch "besser"

"INSERT INTO POSTS values ('"
 + getSubject()
 + "' (select max(number) from posts) + 1, '"
 + getAutor()
 + "', '"
 + getPostText()
 + "', current timestamp, "
 + getParent()
 + ", '"
 + getBoard()
 + "'");

Dann werden erst mal wieder alle EJB-Basics rausgekramt: Es muss ein Remote-Interface geben, dann ein Home, Deployment-Deskriptor, usw. Was es hier zu Verbessern gibt, ist lächerlich: Alle deklarierten Entity-Beans sind remote und die Verbesserung – welch Wunder – eine Fassade. Aber das dies keine gute Idee ist, müsste nun eigentlich jedem EJB-Entwickler gekannt sein – und unter EJB 3 glücklicherweise nicht mehr möglich. (Merkwürdig ist aber schon, dass eine Web-Anwendung remote auf EJBs zugreift, aber lassen wir uns auf diese Annahme ein.) Und vernichtende Aussagen über CMP gefallen mir so pauschal nicht: "For EJBs, the Golden Hammer is usually the entity bean with container managed persistence. This is also the EJB classification with the most overhead. If every object in our model is a container-managed entity bean, we might want to hunker down behind the desk to prepare for the deluge of customer complaints about performance." In den JSPs gibt es for-Schleifen statt Iterator-Tags. Der Rest sind dann ein paar Coding-Conventions; nur schreibt man üblicherweise keinen Doppelpunkt hinter das Java-Doc-Tag @author. Dann schnell noch Wiederholungen der Java-Sichtbarkeit. Wer weiß als Entwickler nicht, was public, protected, ... bedeutet? Performance-Tipps wie: Halte in Schleifen die redundanten Berechnungen raus sind an sich gut, aber das Beispiel for ( int i=0; i < collection.size(); i++) ist relativ wertlos – die Methode size() kann HotSpot leicht inline setzen. Da gibt es dringendere Probleme. Die Stil-Regel „Typically, import statements should import java.util.* rather than java.util.Vector“ to make maintainability simpler.“ gefallen mir überhaupt nicht. Die Anzahl der Import ist sehr wichtig, um etwas über die Anzahl Abhängigkeiten herauszufinden – sie sollten nicht zu groß sein. Wenn, dann ist das ein Indiz dafür, dass der Typ „zu viel macht“. Eine Interessante Idee ist, Fehler mit 8 Einheiten einzurücken, den Rest aber mit 4. Das muss ich mir optisch einmal anschauen. In der Summe: Die Infos bekommt man besser, etwa in einem Pattern-Buch, Buch über Performance oder Stil-Buch. August 2007

Java Secrets
Elliotte Rusty Harold. IDG Books. ISBN 0764580078. 1997
Die Secrets sind zum Teil wirkliche Secrets, aber nicht, weil die ersten Kapitel über "Primitive Data Types", "Classes, Strings, and Arrays", "Applets", "The Java Virtual Machine" handeln, sondern wegen dem Kapitel "The Sun Classes". Harold stellt viele der internen sun-Klassen wie sun.misc.Queue, sun.misc.Sort, sun.misc.CRC16, sun.misc.BASE64Encoder/sun.misc.BASE64Decoder, sun.net.smtp.SmtpClient, sun.net.ftp.* vor. Das einzig merkwürdige war die Aussage "JDBC stands for 'Java DataBase Connectivity'". Mai 2007

Java Standard Libraries. Java 2 Collections Framwork und Generic Collection Library for Java
Markus Gumbel, Marcus Vetter, Carlos Cardenas. Addison-Wesley. ISBN 3827316359. 518 Seiten
Recht schönes Buch. Zwar auf dem Stand von Java 1.3, sodass die neuen Datenstrukturen insbesondere aus Java 5 und Generics fehlen und man sich die Generic Collection Library for Java (JGL) heute schenken kann, aber dennoch ein schöner Einsteig. Sehr ausführlich ist der Vergleich mit der C++ STL. April 2007.

Java Language Reference
Mark Grand. O'Reilly. ISBN 1-56592-204-2. 448 Seiten
Alternative Dokumentation zur Java Sprachbeschreibung mit netten Diagrammen für die Sprachsyntax (railroad diagrams). Es gab ein Update von Java 1.0 auf Java 1.1 (für die inneren Klassen), aber danach gab es keine Buch-Updates mehr. Februar 2007

Java 6 Plattform Revealed
John Zukowski. APress. ISBN 1590596609. 220 Seiten
Ein frühes Buch (Juni 2006) zu Java 6, aber es zeigt alle wesentlichen Eigenschaften der neuen Version. Sehr gut gefallen hat mit die Beschreibung von CookieHandler, CookieManager & Co. KG, etwas, was ich noch nie ordentlich erklärt gefunden habe. Der einzige Fehler, der mir aufgefallen ist, befindet sich auf Seite 111, wo eine Variable statt rs (für ResultSet) fälschlicherweise st heißt. Eine präzisere Beschreibung für Web Services und JAXB liefert das Buch leider nicht — nur ein paar Standard-Beispiele und eine schlaffe Aufzählung der Annotationen — aber dafür gibt es ja andere Bücher aus der Ecke der Java EE Literatur. Auch StAX ist nicht sonderlich präzise und späteren Neuerungen, wie Java DB oder GroupLayout finden keine Erwähnung. Das gleiche gilt für neue Funktionen copySign(), getExponent(), nextAfter(), nextUp(), scalb() aus Math/StrictMath. Eigentlich wäre jetzt Zeit für ein Buch-Update. Januar 2007

Java. Die Spezifikation der virtuellen Maschine
Tim Lindholm, Frank Yellin. Addison-Wesley. 1. Auflage. ISBN 3-8273-1045-8. 1987. 450 Seiten
Das Buch ist sicherlich kein packender Thriller, doch glaube ich, jeder sollte die Spezifikation der JVM einmal gelesen haben. (Man muss dazu nicht das Buch kaufen, sondern kann alles online lesen.) Die Übersetzung ist zum Teil etwas merkwürdig und einige Begriffe interessant. (Finally-Blöcke heißen ›Abschlussroutinen‹ und die Übersetzter deutschen ›modifizier‹ mit ›Modifikatoren‹ ein, während ich sie lieber ›Modifizierer‹ nenne.) Leider passierte ein Fehler auf der ersten Seite der ersten Auflage, dass das Team Mary Campione/Karthy Walrath das Buch geschrieben haben soll. Und solche Fehler tauchen auf, obwohl gleich 7 Personen das Buch übersetzt haben. Dinge, die ich in die Insel noch aufnehmen sollte sind Laden/Verifizieren/Binden. Mir ist auch noch nie eine statische Methode classFinalize() aufgefallen, die eine JVM beim Entfernen (unloading) von Klassen aufgerufen könnte. (Sun schreibt dazu unter http://java.sun.com/docs/books/jls/class-finalization-rationale.html: ›Eliminating this feature has no effect on existing programs, since it was unimplemented.‹) Das interessanteste Kapitel zum Verständnis ist sicherlich ›Das Übersetzen für die virtuelle Maschine‹ auf knappen 26 Seiten. Die ersten 50 Seiten haben nichts mir der JVM an sich zu tun, sondern finden sich wie das Kapitel ›Threads und Sperren‹ auch in der Sprachreferenz. Man hätte auf diese 70 Seiten eigentlich verzichten können. Januar 2k, Dezember 2006

Distributed Java 2 Platform Database Development
Stewart Birnam. Prentice Hall. ISBN 0-13-026861-5. 276 Seiten. 2001
Von allem ein bisschen wie das Buch ›Advanced Programming for the Java 2 Platform‹. Interessanter Überblick für diejenigen, die im Jahr 2000 leben. November 2006

Java Native Interface: Programmer's Guide and Specification
Sheng Liang. Addison-Wesley. ISBN: 0201325772. 1999. 303 Seiten
Immer noch ganz ordentlich zu lesen, obwohl es mehr Beispiele geben könnte. Zum Glück (ja?) hat bei JNI hat sich wenig verändert, sodass das Buch weiter aktuell bleibt. Um JNI zu lernen kann man das ganze Tutorial bei Sun aber auch online lesen. November 2006

Inside the JavaOS operating system
Tom Saulpaugh, Charles Mirho. Addison-Wesley. ISBN 0-201-18393-5. 1999. 184 Seiten
Interessant, was sie dich Menschen bei Sun so alles ausdenken! Spricht da heute noch jemand von? November 2006

Client/Server Data Access with Java and XML
Dan Chang, Dan Harkey. ISBN 0471245771. 640 Seiten. 1998
Ein recht altes Buch, was man nicht mehr lesen muss. November 2006

Advanced Programming for the Java 2 Platform
Austin Calvin, Monica Pawlan. Addison-Wesley. ISBN 0201715015. 2000. 381 Seiten
Ein Rundumschlag über diverse Java-Themen wie EJB, RMI, JDBC, Swing um eine Auktionsplattform. Buch gibt's bei Sun online. Kaufen und lesen lohnt nicht mehr, da es veraltet ist, und es bessere Bücher für die Teilthemen gibt. September 2006.

Java Reflection in Action
Ira R. Forman, Nate Forman. Manning Publications. ISBN 1932394184. 2004. 300 Seiten
Das englische Buch von Manning Verlag von Ira Forman (Vater) und Nate Forman (Sohn) beschreibt auf 300 Seiten und 10 Kapiteln die Reflection-API und assoziierte Themen wie Proxy und Quellcodegeneration. Im ersten Kapitel ›A few basics‹ gehen die Autoren auf die Notwendigkeit für dynamische Aufrufe ein, was im zweiten Kapitel ›Accessing fields reflectively‹ gleich für ein Beispiel zur XML-Serialisierung genutzt wird. Das Kapitel nennt auch die Methode setAccessible() zum Zugriff auf nicht-sichtbare Eigenschaften, doch ein Beispiel zur Konfiguration des Sicherheitsmanager mit der ReflectPermission ›suppressAccessChecks‹ hätte den Abschnitt perfektioniert. Das dritte Kapitel ›Dynamic loading and reflective construction‹ schließt die Grundlagen des Pakets java.lang.reflect mit einer Beschreibung zum dynamischen Klassenladen und das Entwurfsmuster Fabrik ab. Die ersten Kapitel sind sehr ordentlich und zeichnen mit vielen Details ein gutes Bild der Reflection-API; jedes Kapitel im Buch endet mit einem Unterkapitel ›Pitfalls‹ und einer Zusammenfassung. Die nächsten dreißig Seiten des 4. Kapitels ›Using Java's dynamic proxy‹ veranschaulichen die Klasse java.lang.reflect.Proxy für ein elegantes Mittel zu Umsetzung des Dekorator-Musters.
Kapitel 5 ›Call stack introspection‹ zeigt abseits der Frage, was Klassen können oder Objekte haben, wie der Aufruf-Stack interpretiert werden kann. Als Anwendung nennen die Autoren Logging, Sicherheitsfragen und Kontrollfluss (Rekursion erkennen). Dass Thread seit Java 5 eine Methode getStackTrace() besitzt, auch daher kein explizites Throwable-Objekt mehr nötig ist, erwähnt das Buch nicht, genauso wenig, dass die Java-Security 1.2 auf der Basis von Stack-Inspektion arbeitet. (Die Webseite http://www.developer.com/java/ent/print.php/610811 gibt einen Einblick in die sehr interessante Technik.) Das selbst entwickelte Logging hat in diesem Kapitel leider einen zu hohen Stellenwert.
Das 6. Kapitel ›Using the class loader‹ vermuten Leser nicht einen Buch über Reflection und daher bieten die Autoren eine Begründung an: ›subclassing the class loader is a form of reflection‹. Das ist sicherlich Ansichtssache und genauso subjektiv ist die Notwendigkeit für einen Klassenlader, der statische Attribute initialisiert; auf die Idee würde JUnits TestCaseClassLoader (oder ReloadingTestSuiteLoader) nie kommen. Obwohl lib/endorsed zur Sprache kommt, um Teile der Java-API ohne Änderung vom Bootclasspath auszutauschen, fehlt das offensichtlichere lib/extention und auch der Bootclasspath wird nicht erklärt, obwohl das Kapitel schon relativ ausführlich auf Klassenlader eingeht. Abschnitt 6.4 zeigt, wie ein Klassenlader aussehen muss, damit Klassen ersetzt werden können – ein schönen Beispiel, das Proxy-Pattern mit java.lang.reflect.Proxy-Klasse, Klassenlader und Weak-References zusammenbringt.
Auf das 7. Kapitel ›Reflective code generation‹ war ich am meisten gespannt. Erwartet habe ich die aktuellen Bibliotheken wie CGLIB, Javassist, ASM, BCEL oder Dynclass, bekommen habe ich einen Kommandozeilenaufruf von javac. (Für Java 6 bekommen wir hoffentlich wieder eine neue Buchauflage, denn eine Compiler-API ist angekündigt.) Was dann folgt ist ein Programm, welches Java-Quellcode generiert. Sicherlich eine mitunter nötige Operation für MDA, doch dann würde ich mir eine Beschreibung und Anwendung einer Template-Engine wünschen und kein Java-Quellcode in String-Literalen, der konkateniert in eine temporäre Datei geschrieben wird. Immerhin gibt es noch einen kurzen Bezug zu AOP, doch alles in allem enttäuscht das Kapitel. Gerne hätte ich über einen kompilierten Proxy (net.sf.cglib.proxy.Proxy) gelesen oder über den Bean-Eigenschaften-Kopierer net.sf.cglib.beans.BeanCopier, der nicht wie die Apache Commons BeanUtils bei BeanUtils.copyProperties() über Reflection geht – auch zu dieser sehr schönen Reflection-Anwendung. Große Real-Life Applikationen wie JBoss oder der OR-Mapper Hibernate zeigen einen unverblümten Einsatz der dynamischen Bytecodegeneration, was die Autoren zusammen mit den Tools CGLIB, Javassist, BCEL in einer bescheidenen Fußnote auf der vorletzten Seite des Kapitels aber immerhin erwähnen: ›As evidence, we offer the fact that the builders of powerful tools […] are using cglib […]‹. Die knappe Darstellung reicht in einem Buch über Reflection nicht aus. Auch hilft der Verweis auf andere Büchern wie ›Code Generation in Action‹ – das Javassist, cglib, BCEL noch nicht mal erwähnt – und ›Generative Programming: Methods, Tools, and Applications‹ nicht aus. Dass man Quellcode für ›Design patterns‹ auch generieren kann zeigt das 8. Kapitel. Reflection liest Elemente wie Konstruktoren aus und generiert Singleton, Dekorator und Proxy; die Autoren nennen das ›class-to-class transformation‹. Beim Singleton findet sich ein kleiner Fehler im Text, dass die Autoren annehmen, dass bei clone() nie gilt: ref == ref.clone(). Das ist falsch, denn auch die API-Dokumentation von Sun nennt eine Anwendung bei immutable-Objekten – so liefern beispielsweise die Wrapper-Objekte immer die this-Referenz. Eine Beispielanwendung generiert Quellcode für ein Singleton, obwohl nicht ganz klar wird, was das Beispiel eigentlich zeigen soll. Der folgende generierte Dekorator testet Invarianten, leider fehlt ein Bezug zu modernen AOP-Frameworks, die diese Aufgabe standardmäßig mit simplen Interceptoren lösen. (JBoss AOP verwendet für Framework an vielen Stellen Standard-Reflection.)
Kapitel 9 „Evaluating performance“ stellt Micro-Benchmarks vor. Ein Testprogramm misst a) die Laufzeit für direkte Methodenaufrufe, b) Methodenaufrufe durch Proxy-Objekte, die eine Methode direkt aufrufen, und c) Proxy-Objekte, die über Reflection eine Methode aufrufen. Die Autoren kommen für Aufrufe ohne Argumente auf folgende Zahlen: Der direkt anspringende Proxy benötigt etwas mehr als doppelt so viel Zeit wie ein direkter Methodenaufruf. Am Teuersten ist der Aufruf über Reflection: 331 Mal teurer als ein direkter Aufruf. Die Tests wurden unter Windows 2000 mit Java 1.4.1 durchgeführt. Obwohl der Benchmark auf den ersten Blick einen Geschwindigkeitsverlust attestiert, relativieren die Autoren im nachfolgenden Abschnitt die Bedeutung der Zahlen und bringen eine interessante Anwendung von Amdahls Gesetz. Das Kapitel bremst Entwickler, die immer auf Grund von Micro-Benchmarks ihr Design ändern wollen.
Das 10 Kapitel ›Reflecting on the future‹ stellt den Lesern kurz Reflection bei anderen Sprachen vor: C#, Python, Smalltalk, Ruby, Perl. Auf etwa einer Seite schreiben die Formans über Aspektorientierte Programmierung, ohne jedoch Reflection und AOP in einen großen Bezug zu stellen. Weiterhin beschreibt das zehnte Kapitel Eigenschaften von Java 5, auf das eigentlich das Buch hätte bauen sollen. Zwar erklärt das Kapitel Annotationen gut, doch schade, dass das Annotation Processing Tool (apt) nicht genannt wird. Hier müssen die Autoren für die nächste Auflage nachbessern. Drei Anhänge schließen das Buch. Anhang A ›A Reflection and metaobject protocols‹ ist der philosophische Teil. Es geht um Meta-Programme, Meta-Level und Base-Level, um das Modell von Friedman und Wand, um das Meta-Objekt Protokoll. Anhang B geht das Problem mit waitFor() bei extern gestarteten Programmen nach und Anhang C wiederholt zentrale Symbole in UML-Diagrammen. Ein Glossar – wobei die meisten Begriffe aus dem Anhang B stammen – und eine Literaturangabe mit fast 100 Quellen beenden das Buch.
Insgesamt bietet das Buch einen schönen Einstieg in das Reflection-Model von Java und stellt durch den Anhang auch wissenschaftlich ambitionierte Leser zufrieden. Für Entwickler, die sich erstmalig mit Reflection beschäftigen, bringen die ersten Kapitel den meisten Gewinn. Bei einigen Kapiteln (Code-Generation) fehlt die Tiefe, die Entwickler erhoffen. Zumindest drei Kapitel sind im Internet frei zugänglich (Kapitel 1 und 5 unter http://www.manning.com/forman/, Kapitel 4 unter http://www.webreference.com/internet/reflection/) und erlauben einen ersten Einblick. Da das Buch im Oktober 2004 auf den Markt kam, Java 5 aber erst Ende September, lässt sich die Entscheidung für Java 1.4 verstehen. Die Autoren beschreiben zwar im zehnten Kapitel die Neuerungen wie Auto-Boxing, Generics und Variable Argumente, doch in der nächsten Auflage des Buches ist eine konsequente Nutzung in den Beispielen und API-Beschreibungen wünschenswert. Die Reflection-API nutzt Java 5 Eigenschaften reichhaltig:

Point p = new Point();
Method m = p.getClass().getMethod( "setLocation", int.class, int.class );
m.invoke( p, 1, 2 );
System.out.println( p );

Class ist generifiziert und Funktionen wie getMethod() und invoke() ermöglichen variable Argumentlisten. August 2005

Tricks of the Java Programming Gurus
Glenn L. Vanderburg und weitere
Einer der ersten ›Tipps und Tricks‹-Bücher mit 35 Kapiteln. Viele Kapitel wiederholen einfach nur Standard-Wissen, und nur bei wenigen Abschnitten findet man Tricks, die man in einem ›Guru‹-Buch eigentlich erwarten dürfte. Kapitel 1 geht auf Frage ein: Wie kommunizieren Applets? (Context, statische Variablen). Kapitel 2: Wie funktioniert das Laden mit dem MediaTracker? (Der MediaTracker informiert über den Status, was ImageIO nicht tut). Dass der MediaTracker allerdings mehr geworden ist als ein Bilderlader hat sich nicht bestätigt. Im Kapitel 3 folgen Netzwerkthemen: URL, URLConnection und Übermittlung via POST, Socket. Das 4 Kapitel handelt über Audio und die Klasse AudioClip. Für heute Applikationen uninteressant mit der Aktualisierung in Java 1.2. Auch das nächste Kapitel ist nicht Tipp-Verdächtig: IO-Streams und RandomAccessFile. Im anschließenden 5. Kapitel werden Threads und die ThreadGroup vorgestellt; auch ein Standard für Standard-Java-Einführungsbücher. Gut ist jedoch ein Bezug auf ein wenig Interna, wie der Verknüpfung von Thread und ThreadGroup und wer da einen Verweis auf wen hält sowie Erklärung der Green-Thread-Implementierung in frühren Java-Versionen. Das 7. Kapitel erweitert dann Threads um die Themen Nebenläufigkeit und Synchronisation — alles Standard-Buchthemen. September 2005

Java Software Solutions: Foundations of Program Design
John Lewis, William Loftus. Addison-Wesley. ISBN 0201571641. 1997. 857 Seiten
Meine erste Auflage beschreibt erst Java 1.1, aber wenn ich denke, dass es das Buch auch in einer Java 5 Auflage gibt, kann man das Buch für Studenten empfehlen. Zweifarbig gedruckt. Zum Teil didaktisch mehrwürdige Reihenfolgen, aber das tut nicht unbedingt einen Abbruch. John Lewis habt unter http://duke.csc.villanova.edu/jss1/ eine Webseite für die 4. Auflage, auf der er Dinge wie Folien abgelegt hat. Mai 2007

Teach Yourself Internet Game Programming With Java in 21 Days
Michael Morrison. Sams.net. 1996. ISBN 1575211483. 416 Seiten
Ok. Das Buch ist von 1996 und man muss sich mit Java 1 begnügen. Das ist aber nicht meine Kritik am Buch, sondern dass es Java-Standardwissen in einem Buch verbreitet, was sich mit schwerpunktmäßig mit Spiele-Programmierung auseinandersetzen möchte. Das schafft der Autor nicht, denn er reißt lediglich ein paar Teile an, wie Sprites und belässt übriges oft auf sehr niedrigem Niveau; was ist GIF, was ist AI. September 2005

Data Structures and Programming
Liwu Li. Springer-Verlag Berlin Heidelberg. ISBN 354063763X. 1998. 483 Seiten
Leider nur ein Buch, was in Java einführt, aber wenig auf die Datenstrukturen eingeht. Das Buch assoziiert für mich im Wesentlichen Datenstrukturen, aber das ist nur ein kleinerer Teil. Sonst wieder eine Java-Einführung. Die Datenstrukturen sind auch nicht umwerfend, sonst nur die ›Standard-Datenstrukturen‹ ziemlich schwach beschrieben. Lohnt sich in meinen Augen nicht. November 2003

Open Java. Von den Grundlagen zu den Anwendungen
Stephan Fischer, Abdulmotaleb El-Saddik. Springer-Verlag. 1999
Die erste Seite, die ich in diesem Buch aufschlug, enthielt den Satz ›Techniken, wie die automatische Typanpassung sind in Java ausdrücklich verboten.‹ Nach diesem Satz dann der Schock und die Frage, wie es auf den anderen 700 Seiten weiter gehen soll. Im Prinzip in Ordnung. Einige Aussagen verblüffen mich aber doch: ›Das Laufzeitsystem [...] geht deshalb sehr sparsam mit den zur Verfügung stehenden Ressourcen um‹. Das zum Thema ›Schnelligkeit‹. Na ja. Auch Objektvariablen als ›lokale Variablen‹ und statische Variablen als ›globale Variablen‹ zu deklarieren irritiert mich. Call-by-Reference, Klassenname 3DPunkt geht doch gar nicht, was soll java.lang.package für ein Paket sein? (es gibt recht neu eine Klasse java.lang.Package, aber die meinte der Autor sicherlich nicht), ›4 instanceof String‹ kompiliert gar nicht erst (seit Java 5 kann man neu darüber diskutieren) und kann nicht false ergeben. Didaktisch Vector und Hashtable vor Schleifen? Hat eine Methode einen Typ? Ok, einen Rückgabetyp, aber Typ alleine? Wie implementieren Java-Versionen vor 1.2 die Schnittstelle Array? Uff. Eine Klasse, die eine Excetion wirft. Das kann doch nicht sein (Seite 139). stop/resume/suspend war schon seit 1.2 auf einer ThreadGroup deprecated. Dann noch so dies oder das. Doch zum Guten. Insbesondere im hinteren Bereich hat das Buch seine Stärken. Ordentlich beschreibt es JavaBeans, JDBC, RMI, CORBA. Das sind allerdings die 66,95 Euro nicht wert (die jedenfalls Amazon verlangt). Oktober 2002

Java Unleashed 1.1
Michael Morrison. Sams. ISBN 1575211971. 1996. 1164 Seiten
Natürlich maßlos veraltet, aber noch mal zum drüberblättern ganz nett. Interessant, was damals schon in den Büchern stand, JavaOS. Hört man heute gar nichts mehr von. Mai 2002

Sprechen Sie Java? Eine Einführung in das systematische Programmieren
Hanspeter Mössenböck. dpunkt-Verlag. ISBN 3898641171. 2001. 299 Seiten
Typisches Uni-Buch. Keinerlei Bibliotheken werden eingeführt. Daher für den typischen Industrieprogrammierer unbrauchbar. Einige Fehler in den Beispielen. Preis: 54,00 DM. November 2001

Java by Dissection: The Essentials of Java Programming
Ira Pohl, Charlie McDowell. Addison-Wesley. ISBN 0201612488. Oktober 1999. 656 Seiten
Durchschnittliches Javabuch. Nicht unbedingt so toll. November 2001

Programmieren mit Java. Das Lehrbuch zum sicheren Umgang mit Objekten
Andreas Solymosi, Ilse Schmiedecke. Vieweg Verlagsgesellschaft. ISBN 3528256974. 2001
Recht günstiges (57,99 DM) Java-Buch zu einer Vorlesung. Etwas didaktisch merkwürdiger Aufbau. Erst auf Seite 200 Steuerstrukturen; sehr fragwürdig. September 2001

Java - plattformunabhängig programmieren
O'Niel Annand Valentin Som. bhv-Verlag. ISBN 3-89360-302-6. 1997, 208 Seiten
Oh Gott. Das darf nicht sein! Das schlechteste Java-Buch in diesem Quartal. Kümmert sich nur um eine lasche Einführung und dann kommt nur noch etwas AWT. Wundert mich überhaupt, dass der Autor das GridBagLayout fast verstanden hat. Sonst seitenweise peinliche Fehler, die mich zur Korrektur zwangen. Einige Beispiele: ›Der erste Buchstabe eines Bezeichners kann [...] aber kein Umlaut sein.‹ (Unsinn), ›[...] zugegriffen werden, mit this auf die aktuelle Klasse‹ (Objekt, nicht Klasse ), ›Zur Umwandlung eines Typs in einen anderen ist eine ausdrückliche Aufforderung an den Compiler notwendig [...]‹ (Quatsch, nur bei expliziten Typanpassungen), ›Wird eine Methode nicht sondert mit einem [...] Modifizierer gekennzeichnet, dann gilt sie als private [...]‹ (Natürlich nicht, sie ist paketsichtbar) und so weiter. Mein Liebling ist: ›Nach dem Schlüsselwort synchronized kann eine Variable angegeben werden, die während des folgenden Blockes nicht von anderen Threads aus zugänglich ist.‹ Juli 2001

Einführung in die objektorientierte Programmierung mit Java
Ernst-Erich Doberkat, Stefan Dißmann, Oldenbourg. ISBN 3486247867. 2000. 315 Seiten
Für Studenten mit Erfahrung in anderen Programmiersprachen ganz nett. Hält sich leider nicht an die Java-Namenskonvention. Sonst ein paar nette Algorithmen erklärt. Juli 2001

Java in der Anwendungsentwicklung. Objektorientierung, Verteilung, Datenbanken
Gerald Ehmayer, Siegfried Reich. dpunkt-Verlag. ISBN 3920993845. X Seiten
Altes Buch mit völlig unpassender Titelbeschreibung. Unpräzise und ungenau. Februar 2001

Java
Walter Doberenz. Hanser-Programmier-Praxis. ISBN 3-446-18854-1. 1996. 494 Seiten
Noch so`n schlechtes Javabuch, über das man eigentlich kein Wort verlieren brauch. Dem Zeitpunkt nach zu urteilen eines der frühen Buch auf dem deutschen Markt. Dass es schlampig geschrieben ist, merkt man z.B. an vielen groß geschriebenen Methodennamen in Tabellen (eigene Lieblingseigenschaft von MS-Word). Die letzen Seiten sind ein Quicky durch ein paar FAQs, Implementierungsschnippsel hingeschmiert, ohne große Erklärung. OOP kommt dann auch erst nach allem anderen Java-Typischen. Daher: unbrauchbar.  Januar 2001

Java Gently
Judy M. Bishop. Addison-Wesley. ISBN 0-201-342979. 1998. 508 Seiten
Hach, ich traue mich gar nicht ein schlechtes Wort über dieses Buch zu verlieren, da doch viele Didaktiker mit dem Buch so glücklich sind. An der Uni Paderborn werden die Einführungsveranstaltungen mit diesem Buch gemacht und Herr Kastens hat sogar eine deutsche Übersetzung initiiert. Ehrlich gesagt finde ich diese Buch zwar nicht didaktisch grottenschlecht aber zu einem gut kann ich mich nicht durchringen. Vor mir liegt die zweite Auflage von 1998,die das JDK 1.1 als Unterlage verwendet. Beginnen wir mit der Methodik/Didaktik: <subjektiv on>Die Reihenfolge der Präsentationen der Inhalte finde ich sehr fragwürdig: Grundlagen OOP, Dateieingabe/-ausgabe, if, Exceptions, while/do, switch, Arrays, Formatierungsklassen, OOP, innere Klassen, Abstraktion und Vererbung, GUI, Ereignisse, Applets, Threads, Netzwerke, Algorithmen und DS. Bevor die erste Schleife oder Fallanweisung kommt wird der Leser mit Objekten, Konstruktoren, Konstanten behelligt. So ist es immer ein Mischmasch von Konzepten aber ich erkenne keinen roten Faden. Das heißt aber noch lange nicht, dass das alles nicht zusammenpasst. Das schon. Es ist alles schön aufeinander abgestimmt. Nur glaube ich nicht, dass der Leser dies mit sich machen lässt. Zur Didaktik: Was sie schreibt ist gut, mit schönen Beispielen und Aufgaben. Wenn es anders sortiert wäre ich durchaus glücklich damit. <subjektiv off> Woran aber nichts zu zweifeln gibt sind die unsäglichen Inkonsistenten in der zweiten Auflage. Peinlich. Sie betreffen zum Beispiel die Bezeichnernamen, mal sind Variablen klein/groß, Konstanten immer klein geschrieben, in den kleinen Info-Blöcken mal Schlüsselwörter groß, mal in Fettdruck. Mal Leerzeichen hinter/vor Methoden, mal nicht. Als Buch, welches vorgibt Methodik zu lehren, darf dies nicht passieren. Dann noch einige Ungenauigkeiten in den Bibliotheken. Unter anderem liegt das an der Version 1.1. Es gibt auch eine Float.parseFloat() Methode. Schlimm auch folgende Zeile:

URL info = new info( "file:/u/...usw. ...Museum.java" );

Darunter noch mal ein BufferedReader Fehler. Damit genug gesagt. Jetzt geht's zurück ins Bibo-Regal. Die zweite Auflage habe ich noch nicht begutachtet. Juli 2k

Die Java2 Fibel
Ralf Künel. Addison-Welsey. ISBN 3-8273-1410-0. 1999. 442 Seiten
Vor mir liegt die dritte Auflage des Buches, frisch überarbeitet mit den Features vom JDK 1.2. Leider ist das Buch nicht qualitativ besser geworden, sondern es beschreibt nur einige neue Eigenschaften. Der Einstieg in die Sprache ist ganz ordentlich (ersten 100 Seiten), doch dann geht es etwas schnell. Die eingestreuten Listings irritieren mich. Keine vernünftige Einführung in das AWT und Zeichenoperationen. Didaktisch nicht toll. Das Buch würde ich mir auf keinen Fall kaufen. Wenn man es als Fortgeschrittener einmal in der Hand hat, kann man von 4 Seiten über Schwachen Referenzen profitieren, sonst Finger davon. April 2k

Java 1.2: Java-Tutorial Programmierung von Applikationen, die Schnittstelle zu C und C++, Klassenbibliotheken, ausführliche Referenz
Ralf Steyer. M&T Verlag
Nein, dieses Buch steht hier bestimmt nicht weil ich es toll fand, sondern weil es dermaßen schlecht ist, dass ich die Welt vor diesem Buch warnen muss. (Wer nun allerdings denkt, ich stehe mit meiner Meinung alleine, der sollte mal bei Amazon unter den Rezensionen durchlesen. Wobei ich glaube, die guten Kritiken hat er von seinen Freunden). Das Buch ist so schlecht, dass man auf jeder Seite den Rotstift ansetzen muss. Wie dies überhaupt erst gedruckt werden konnte ist ein Wunder. Und hier sieht man mal wieder, wie der M&T Verlag Kasse machen will. Auf dem Buchrücken steht vollmundig: RMI. Ich fall' um; eine Seite. Servlets — 4 Seiten. JDBC 12 Seiten. Und all dies seht vorne drauf und lockt uns an. Nicht besser sieht es mit der nativen Anbindung aus, eine Ankündigung, die schon der Titel des Buches verrät. Hier werden wir mit 14 Seiten nach Hause geschickt. Na ja, und über den Rest brauche ich wohl nicht viele Worte verlieren. 250 Seiten Bla Bla, bis es mal zur Sprachbeschreibung kommt. Gigantische drei Seiten über Swing, obwohl das Buch von 1998 ist, usw. usw. September 1999

Grafische Datenverarbeitung, JFC, Swing und AWT

[Heart]

Pro Netbeans IDE 6. Rich Client Platform Edition
Adam Myatt. Apress. ISBN 978-1-59059-895-5. Februar 2008, 491 Seiten
Ein aktuelles Buch über NetBeans, welches auf grundlegende aber auch erweiterte Eigenschaften der Entwicklungsumgebung eingeht. Themen sind unter anderem Installation (das 1. Kapitel „Downloading, Installing, and Customizing NetBeans“ ist auch online), der Editor, Einstellungen, Projektangaben, Gui-Bilder, Debugging, Profiling, Versionsmanagement, JUnit, Refactoring, Datenbankbrowser, Qualitätsprüfung. Dass das Buch auf der aktuellen Version 6 aufbaut, zeigt sich insbesondere an den letzten Kapiteln, in denen es JRuby und Rails, Web-Services, BPEL, REST, dem Swing-Application Framework und Beans Binding zur Sprache bringt. Dem Autor ist das Kapitel über Swing aber lieber gewesen, denn hier beschreibt er ausführlicher die Technologie, während bei Web-Services nur Einträge in den Dialogen aufgezählt werden, aber nicht erklärt wird, was diese eigentlich sollen. Aber das ist wohl immer der Fall, wenn ein Buch nur zeigen möchte, WIE man mit der IDE etwas macht, aber nicht warum. Für welche Käuferschicht das Buch am Besten geeignet ist, ist schwer zu beantworten. Erfahrene Entwickler, die schon einige IDEs kennengelernt haben (Eclipse, JDeveloper, ...) werden mit NetBeans keine Probleme haben. (Aus der Java-Community gibt es vielfach die Meinung, NetBeans ist viel einfacher zu bedienen als Eclipse.) Daher bekommt man mit etwas Rumklicken und aufmerksamem Lesen die meisten Sachen schnell raus, zumal die Webseite von Sun voll von Tutorials insbesondere für die fortgeschrittenen Themen ist. Wer ein Gespür für Entwicklungswerkzeuge hat, und gerne Online-Tutorials liest, wird mit http://www.netbeans.org/kb/ auch glücklich. Zumal bei Sun Artikel zur Java ME-Entwicklung, C(++) oder UML-Modellierung stehen, die das Buch überhaupt nicht ankratzt. Schade eigentlich, denn vermutlich dürfte UML für die meisten Leser interessanter sein als einen BPEL-Web-Service auf Glassfish zu deployen. Das letzte Kapitel "Developing Rich Client Applications" hat aber nichts mit der Entwicklungsumgebung selbst zu tun, sondern stellt kurz das NetBeans RCP vor. Hier ist die Zielgruppe eine völlig andere. Denn der Bediener einer IDE ist nicht unbedingt einer, der mit dem RCP Desktop-Anwendungen schreibt. Sehr fragwürdig ist daher auch der Titel "Rich Client Platform Edition"; hier ist man verleitet anzunehmen, dass es ein Buch über das RCP-Framework ist. Doch nein, es ist nur ein Buch über die Bedienung einer Entwicklungsumgebung. Mai 2008

Java 2D Graphics
Jonathan Knudsen. O'Reilly. ISBN 1-56592-484-3. 1999. 339 Seiten
Schönes Buch über Java 2D. Da die 2D-API kaum älter geworden ist, ein guter Klassiker. Sehr detailliert sind Textdarstellung und Aufbau von BufferedImages und Grafik-Filter. Es gibt eine

Pure JFC 2D Graphics and Imaging
Satyaraj Pantham. Sams. ISBN 0672316692. Ende 1999. 360 Seiten
Schwächer als O'Reillys "Java 2D Graphics" aber auch ganz gut.

The JFC Swing Tutorial: A Guide to Constructing GUIs
Kathy Walrath, Mary Campione. Addison-Wesley. ISBN 0201433214. 953 Seiten
Schönes Einführungsbuch in Swing. Noch schöner ist, dass das Swing-Tutorial komplett online ist. In Buchform nehmen sonst 1/3 die Listings ein. Mai 2007

Java Look and Feel Design Guidelines
[Heart]Sun Microsystems. Addison-Wesley
Die beiden Bücher sind online unter http://java.sun.com/products/jlf/ und auch von Addison-Wesley veröffentlicht wurden. Pflichtlektüre für alle die, die grafische Oberflächen entwerfen wollen. Sehr interessant sind die Erklärungen zu Dialogen und Shortcuts/Mnemonics im Anhang. April 2007

Java AWT Reference
John Zukowski. O'Reilly. ISBN 1565922409. 1 Auflage April 1997. 1045 Seiten
Das Buch ist so alt, dass es O'Reilly online schon umsonst abgibt. John hat auch ein Swing-Buch und ein Buch zu Java 6 geschrieben, was definitiv interessanter ist. Wenn man in das Buch schauen möchte, dann vielleicht, wenn man etwas über ImageProducer/ImageConsumer erfahren möchte oder über eine Einführung in die Zwischenablage. Dezember 2006

The Java 3D API Specification (2nd Edition)
Henry Sowizral , Kevin Rushforth, Michael Deering. Addison-Wesley. ISBN 0201710412. 2000. 653 Seiten
Ein Buch im Regel, was ich nie gelesen habe. Java 3D gilt als tot und Lösungen wie JOGL als potente Nachfolger. Falls man es doch mal mit der 3D-API zu tun hat, kann man das Buch auch online lesen.

Graphic Java 2.0. Die JFC beherrschen (AWT)
David Geary, ISBN 3827295858, 1999, 3. Auflage, DM 99,94, 939 Seiten

Graphic Java 2.0 Band II . Die JFC beherrschen (Swing)
David Gearym, ISBN 3827295904, 1999, 3. Auflage, DM 197,99, 1416 Seiten

Image Processing in Java
Douglas A. Lyon, Prentice Hall, ISBN 0-13-97457707, 1999, 532 Seiten
So ein Buch macht glücklich. Endlich wieder etwas Qualitatives. Obwohl es nicht auf der Java-2D API und Java-Image-API (JAI) aufbaut ein hervorragendes Buch zur Bildbearbeitung. Immer auf Schritt und Tritt dabei sind mathematische Formeln, wer also die Formalismen scheut wie ein Eiswürfel die Sonne, der sollte sich ehr ein Tutorial zur Anleitung der 2D-API besorgen. Einige Hinweise zum Optimieren sind auch dabei (könnte aber mehr sein). Bildfilter über Kernel werden genauso beschrieben wie Bild-Transformationen. Mittlerweile gibt es auch noch ein anderes Buch: ›Digital Image Processing Using Java‹ von Nick Efford. Er beschreibt die 2D-API. Juni 2k

JFC 1.1 mit Java Swing 1.0: Ein Tutorial für die Gestaltung grafischer Benutzeroberflächen
André Meyer, ISBN 3-8273-1384-8, 1998, 501 Seiten
›Nett‹, dachte ich mit, ›ein deutsches Buch über Swing. Das leihst du dir aus‹. Der erste Blick lieferte aber nichts erfreuliches. Ab Seite 229 geht es mit der Übersetzung der APIs los. Erst dann entdeckte ich in roter Schrift auf dem Buch ›vollständig und illustrierte Referenz aller Klassen von Swing‹. Dann verstand ich. Wenn ich noch einmal so einen Satz lese, würde ich solch ein Buch erst gar nicht in die Hand nehmen. Eine Zumutung findet sich jedoch im Vorwort: ›Dieses Buch wurde unter großem Zeitdruck geschrieben...‹. Jetzt möchte ich einmal Wissen, wer da nicht denkt, der Autor weiß selber, dass das Buch unfertig und runtergeschrieben ist. Leider merkt man das auch beim Lesen. Viel Listing, ein paar Sätze. Alles in allem nicht empfehlenswert weil oberflächlich. Eine ähnliche Tiefe bisher ohne MCV-Modelle gibt es auch in meinem Online-Buch. März 2k

Java-Bibliotheken (JavaBeans, IO, Net, Util, XML, Sicherheit, ...)

Java/XML. Das bhv Taschenbuch
Michael Seeboerger-Weichselbaum. bhv, ISBN 382668110X. 2002. 768 Seiten
Eigentlich könnte man bei einem Buch mit über 700 Seiten und nur 16,95 € nicht meckern, aber da ab Seite 370 schon die Referenz anfängt und das Buch einige Macken hat, kann man besser zum Sun-Tutorial greifen, wenn man etwas über XML lernen möchte. Das Taschenbuch geht auch nur DOM, SAX und ein wenig Transformation an, aber kein StAX und Objekt/XML-Mapping. Zudem sind die Quellcodes von sehr schlechter Qualität. Initialisierungen wie String tagElement = new String("") auf Seite 68 und auch Zeilen wie auf Seite 186

Node das_tag;
int a;
String Name_des_Tags, inhalt;
for (a=0; a<anz;a++)

lassen jede Anwendung der Standard Namenskonvention vermissen. Schade ist auch, dass die Einrückungen nicht ordentlich sind -- zu vermuten ist, dass der Autor Leerzeichen und Tabulatoren verwendete und beim Satz wurden die Tabulatoren nicht ordentlich übernommen. Besonders bei DOM täten UML-Diagramme gut, aber hier sparte der Autor. Stattdessen gibt es Diagramme von SAX und den XML-Fabriken, allerdings mit Pfeilen in Richtung der Unterklasse. An vielen Stellen kann ich dem Autor einfach nicht folgen, auch wenn ich Absätze mehrfach lese. Wer etwas kompaktes sucht, bekommt einen Überblick über die XML-API auch mit den Folien von Elliotte Rusty Harold. Dezember 2007

[Heart]Professional Java Security (Programmer to Programmer)
Jess Garms, Daniel Somerfield. Wrox. ISBN 1861004257. 2001. 522 Seiten
Ausgezeichnetes Buch über Java-Security. Sehr ausführlich und mit vielen Beispielen. Darunter etwa Beispiele für sicherere RMI-Verbindungen über SSL oder signierte Applets und die üblichen Anwendungen für Verschlüsselung, Signaturen, Zertifikate. JAAS-Kapitel etwas schwach. Mitte 2007

Java and XML
Brett McLaughlin, Justin Edelson. O'Reilly.
Ausreichender Überblick über DOM, SAX, JDOM und XSLT. Mir würde eine grafische Darstellung der Knotenbeziehungen bei DOM gut gefallen und auch etwas mehr XPath. Seit Dezember 2006 gibt es die dritte Auflage. Sie enthält StAX, dom4j und führt in JAXB ein. Das Kapitel Advanced SAX ist online und die Beispiele gibt es hier. Als Alternative ist das online-Buch ›Processing XML with Java‹ von Rusty Harold immer noch für viele Fragen ausgezeichnet. Januar 2007.

XML and Java: Developing Web Applications
Hiroshi Maruyama, Kent Tamura, Naohiko Uramoto. Addison Wesley. ISBN 0201485435. 1999. 386 Seiten
Die Autoren stellen ihren Parser LMX vor, der Vorgänger von Apache SOAP ist. Die Beschreibung vom Standard-DOM ist gut, doch dafür gibt es andere Bücher, auch online, die aktueller und besser sind. Sonst noch ein paar Seiten zu JDBC, die man sich sparen kann. Alles in allem: maßlos out. September 2006

How to Program JavaBeans
Michael Morrison, Randy Weems, Jack Leong, Peter Coffee (Editor). Ziff-Davis Press. ISBN 1562765213. 1997. 367 Seiten
Hübsch aufbereitetes Buch zu JavaBeans, was ich mir vor fast 10 Jahren in Kanada gekauft habe — bestimmt wegen dem ›in full color‹. Jetzt wird's aussortiert. Die Autoren beschreibt das BDK (nun veraltet, aber das kann man den Autoren nicht anlasten), die Reflection-API, Introspection API mit BeanInfo usw., Active X Brücke und drei Beispiele (Button Bean, Clock Bean, Image-Tranformer, nicht visuelle Timer- Bean). Ist zwar in die Jahre gekommen, aber immer noch nett. August 2006

Client/Server Programming with Java and CORBA
Dan Harkey, Robert Orfali. John Wiley & Sons. 047124578X. 1072 Seiten
Geht jetzt nicht so wahnsinnig tief auf CORBA und Java ein, ist aber dennoch ein sympathisches Buch, was remote-Technologien vor dem SOAP-Zeitalter vorstellt und vergleicht. Ich hatte mir vor Jahren das Buch kopiert und nun können die Kopien in den Müll, da ich kaum glaube, mit CORBA noch mal in Kontakt zu kommen. März 2006

Thread- und Netzwerk- Programmierung mit Java. Ein Praktikum für die Parallele Programmierung
Heinz Kredel, Akitoshi Yoshida. dpunkt-Verlag, Heidelberg. ISBN 3932588282. Oktober 1998. 340 Seiten
Schaut man einmal auf die den Online Bücherladen Amazon, dann findet man bei Bewertungen eine berechtigte Kritik. Denn das Buch ist vom Titel her wieder völlig unpassend benannt. Es stimmt zwar, dass hier nebenläufige Programmierung und Netzwerkprogrammierung gelehrt werden, doch als Praktikum für die parallele Programmierung erwartet der durchschnittliche Leser sicherlich einen etwas anderen Stil. Damit möchte ich nicht sagen, dass das Buch unpassend für den Markt ist. Es durchaus geeignet, im Sinne der universitären Lehre, mit einigen Formalisten, parallele Programmierung einzuführen. Ein anderes Dilemma: Im Buch finden sich ebenfalls Themen, die man nicht mit Java in Verbindung bringt. Etwa finde ich es sehr fragwürdig, in einem Java-Buch POSIX-Threads und die Parallel Virtual Maschine vorzustellen. Alles in allem jedoch für den Java-Buch-Leser kein Werk, was im Regal stehen muss, insbesondere wenn das Buch 68 DM kostet. Es ist ganz nett, einmal darüber zu lesen und für ein paar universitären Übungen heranzuziehen, aber für die Industrieprogrammierer wenig nützlich. Netzwerkprogrammierung beschränkt sich auch lediglich auf Sockets, nichts mit Multicast oder Servlets oder HTTP-Protokoll. Oktober 2001

JavaBeans: Technik, Komponenten, Beispiele
Michael Morrison, Markt und Technik, ISBN 3-8272-5284-9, 1997, 336 Seiten
Schlimm, was es für Bücher gibt. Der Skater Michael hat da schon an besseren Büchern mitgearbeitet (etwa Java Unleached, Java in 21 Tagen). Zum minimalen Einstieg gerade gut. Die zweite Hälfte des Buches beschreibt 4 Beans, — alle gleich anspruchslos. Keine weitergehenden Konzepte. Also: Überhaupt nicht empfehlenswert. Noch nicht einmal für 5 DM auf einer Auktionsbörse. April 2k

Komponenten in Java: Einsatz und Entwicklung von JavaBeans mit VisualAge for Java
Claudia Piemont, dpunkt-Verlag, ISBN 3-932588-21-5, 1999, 347 Seiten
Mittelgute Kritik für dieses Buch. Der didaktische Aufbau ist nicht so glücklich, lässt sich aber lesen. Das Beispiel mit dem Warenkorb finde ich zu komplex, da viele Klassen zusammenarbeiten müssen. Sehr angenehm ist der Ausblick auf die neueren Bean-Fähigkeiten wie InfoBus. Das ist toll. April 2k

Developing Java Beans
Robert Englander, O'Reilly, ISBN 1-56592-289-1, 1997, 298 Seiten
Sehr ausführliches Buch über Beans. Schon fast zu ausführlich. Lange Motivation, warum über Java, usw. Dann folgt eine genaue Beschreibung aller Fähigkeiten, doch ohne weiterführende Konzepte wie InfoBus. Durch die lange Beschreibung geht einem manches mal der rote Faden verloren. Unter Amazon werden Fehler im Quelltext bemängelt. Ist mir nicht aufgefallen, da ich nur den Text gelesen habe und mir einige Beispiele gestrickt habe. Alles in allem  lohnenswert. Vielleicht kommt ja bald eine neue Auflage. (Ok. Nach 7 Jahren wohl doch nicht mehr.) April 2k

Java Distributed Computing
jim Farley, O'Reilly, ISBN 1-56592-206-9, 1988, 480 Seiten
Mit dem Buch kann ich nicht so viel anfangen und ich weiß überhaupt nicht, welchen Leserkreis es erreichen soll. Komische Beispiele zu langen Programmen, die keinen interessieren. Netzwerke, Verteilte Objekte, Threads Datenbanken kann man wesentlich besser in anderen Büchern nachlesen. Wenn man das Buch trotzdem mal in der Hand hat, kann man immer noch die 30 Seiten über Sicherheit und der Crypto-API und 6 Seiten über Java Spaces lesen. Dezember 99.

JDBC

Professional Hibernate
Eric Pugh, Joseph D. Gradecki. Wrox. ISBN 978-0-7645-7677-5. 2004. 434 Seiten
Bisher war ich immer durch die die Referenz-Doku verwöhnt und das Buch von Garvin+Christian kannte ich auch schon. Um etwas quer zu lesen, lieh ich mir das Buch von Pugh (Hibernate und XDoclet Mitarbeiter) und Gradecki aus. Natürlich war von einem Buch aus 2004 nicht an Annotationen oder Java 5 zu denken, aber Hibernate 2 überraschte mich dennoch. Der Einstieg in Hibernate läuft über das übliche: Was machen OR-Mapper, Bla, Bla. Kurz nach einem Beispiel geht es schon komplett über die Konfigurationsdatei, was natürlich aus didaktischer Sicht wenig sinnvoll ist. Das könnte man eher als Kapitel zum Nachschlagen nutzen, aber dafür gibt es ja auch die Referenz-Doku. Anschließend beschreibt Kapitel 5-7 die native Hibernate API. Gerne hätte ich etwas über die Dirty Checking Strategy erfahren, doch diesen Begriff gibt es noch nicht einmal in Index. Bei der Frage der Vererbung beschreiben die Autoren nur die Möglichkeiten, ohne aber ausführlich zu diskutieren, welcher Realisierung bei welchem Szenario den Vorzug zu geben ist. Das Kapitel über HQL führt ein neues Beispiel ein um daran HQL-Ausdrücke zu erklären. Ich hätte mir gerne mehr Beispiele gewünscht. Zum Caching kommen dann noch einmal 10 Seiten und etwa über Locking und Transaktionen. Dass die Kapitel Hibernate und XDoclet (ab Seite 261), Hibernate und Maven (bis Seite 328) dann noch so ausführlich dargestellt werden, ist für bestimmte Gruppen hilfreich, aber es fehlen dann andere Dinge, auch banales wie benutzerdefinierte Datentypen. Die Listings weisen zum Teil eklatante Fehler auf, etwa wird aus einem paar runder Klammern () ein Q, was vermuten lässt die Listings eingescannt wurden. Kurs gesagt: In den Zeiten von JPA und so einer guten Referenz-Doku ist das Buch unnötig. Februar 2007

MySQL and Java Developer's Guide
Mark Matthews, Jim Cole, Joseph D. Gradecki. Wiley. ISBN 0471269239. 410 Seiten
Februar 2k

Database Programming with JDBC and Java. Java 1.1
George Reese, ISBN 1565922700, Oreilly & Associates, 1997, 240 Seiten
Für mich eines der schlechteren O'Reilly-Bücher. Das liegt aber gar nicht mal am Autor und an seine Art wie und was er schreibt, sondern daran, dass das Buch seit 1997 nicht mit aktualisiert wurde. Stand Java 1.1 ist total outdated. Mittlerweise sind wir bei JDBC 4.0 und Java 5. Sehr überflüssig sind zusätzlich die mit zu viel Quellcode unterlegten Beispiele zum Objekt-Relationen Mapping. Das ist ja ganz spannend, aber muss man das in einem JDBC-Einführungsbuch gleich selbst implementieren? Dazu auch noch einen GUI-Teil, den man sich schenken kann. RMI wirkt ebenfalls deplaziert und die wirklich harten Probleme, wie man denn ein ResultSet serialisiert, oder komprimiert, werden nicht erklärt. Juni 2003

Datenbanksysteme mit Internet- und Java-Applikationen
Greg Riccardi. Addison-Wesley. ISBN 3827318750. 640 Seiten
Ganz nettes Datenbankbuch, was insbesondere für Studis nützlich sein dürfte. Der Java-Anteil für JDBC ist OK. Dass allerdings der Verlag dafür ehemals 60 Euro haben wollte, ist eine Frechheit. Da das Buch aber nicht mehr verfügbar ist, bekommt man es nur noch gebraucht, und dann gibt es das Werk für 4 Euro. Mai 2007

Datenbanken und Java. JDBC, SQLJ und ODMG
Gunter Saake, Kai-Uwe Sattler
Kurzes Buch mit allen wichtigen Inhalten. Teilweise etwas zu knapp. Die Themen Objektorientierung und Datenbanken dürften bald veraltet sein. Dennoch empfehlenswert und steht auch bei mir im Regal. November 2001

JDBC. Internet-Datenbankanbindung mit Java
Hans Diecken, Thomson-Publishing
Buch mit viel Bla-Bla. Einige lange uninteressante Listings. Ebenfalls ziemlich alt. Nix von JNDI oder so. Oktober 2001

Java Database programming with JDBC
Pratik Patel, Karl Moss, Coloris Group Books, 1996, 480 Seiten
Viel zu altes Buch über JDBC. (Damals musste man sich die JDBC-Treiber noch von der Sun Seite laden.) Mal wieder 40 Seiten Java Einführung und zu viele Seiten API Abdrücke. Dort stehen zwar die MetaDaten, aber im Text keine Erklärung. Ein zu großes Beispiel, was nicht vernünftig erklärt wird. September 1999

JavaServer Pages, Servlets, JSF, Web-Frameworks

Core JavaServer Faces
David Geary, Cay Horstmann. Prentice Hall. ISBN 0-13-146305-5. 2004. 658 Seiten
[Heart]Ein ausgezeichnetes JSF-Buch, was zusammen mit der JSF Tag Library Documentation und JSF Standard HTML RenderKit Documentation ein optimales Paar ist. Enthalten sind Tipps und Tricks, eigene Komponenten, Datenbankanbindung, Authentifizierung über Datenbanken und LDAP, Client-Validierung über JavaScript mit Struts bzw. dem Validation-Framework. Prima Sache. Die zweite Auflage fertig und geht auf die neuen Versionen ein. Die Autoren haben eine Webseite, unter der sich einige Kapitel als PDF (mit schönen farbigen Screenshots) und der gesamte Quellcode der 2. Auflage herunterladen lässt. April 2007

Struts. JSP-Applikationen mit Jakarta, JBoss und Apache Axis
James Turner, Kevin Bedell. Addison-Wesley. ISBN 3-8273-2221-9. 2004. 478 Seiten
Dieses Buch stammt aus der Reihe ›Open Source Library‹. Da ich es in meinem letzten Struts-Kurs verschenkt habe, aber jetzt noch die CD finde, wird es Zeit, das letzte Relikt wegzuschmeißen. Da fällt mir auf: Der Name von Kevin Bedell ist falsch geschrieben! Kevin Bedall. Auch bei Pearson.ch steht fälschlicherweise ›Kevin Bedall ist ein erfahrener Software-Profi ...‹ (Auf der Webseite von bol.de stehen drei Autoren: von James Turner, Kevin Bedall, Kevin Bedell :-) Das ist aber peinlich. Und da bin ich gleich bei meinem Kritikpunkt: Die Übersetzung ist kaum gelungen, so sich bei einigen Sätzen immer dachte: ›Was wollen die Autoren mir sagen?‹. Somit habe ich das Buch einmal für einen Überblick durch und bin zu Alternativen gegangen. Sonst geht das Buch thematisch auch nicht so tief auf Struts-Eigenschaften ein. Grundsätzlich ist der Aufbau eines Beispieles mit ›Attila dem Hunnen‹ gelungen und auch das Design der Anwendung ist ordentlich. Mit gefällt es, wenn Autoren betonen, dass man die Form-Beans von den Business-Beans trennen muss, und es auch so realisieren. Eine Leseproble für das einführende 3. Kapitel gibt es bei edvbuch.at. August 2006

Dynamic Web Programming Using Java, JavaScript and Informix
Graham Harrison. Informix Press/Prentice Hall. ISBN 0130861847. 1999. 995 Seiten
Keine Ahnung, warum ich mir das Buch gekauft habe. Es steht schon seit Jahren im Regel. Vermutlich wars' ein Schnäppchen bei eBay. Na ja, jetzt kommt es in die Tonne, denn wenn man das Buch verschenkt, muss es einem peinlich sein. Selbst das JDBC- und RMI-Kapitel ist noch zu mager. Eigentlich geht es nur um's Produkt AppPage. (Die Informix-Software muss wahnsinnig wichtig sein, wenn Google da satte 80 Seiten rausspuckt.) Juni 2006

Java Server und Servlets. Portierbare Web-Applikationen effizient entwickeln
Peter Roßbach, Hendrik Schreiber. Addison-Wesley. ISBN 3827316944. 2000. 438 Seiten
Beschäftigt sich eigentlich nur von Seite 29 bis 77, also auf etwa 50 Seiten, mit Servlets. Da fehlt mir einiges, etwa eine ausführliche Beschreibung der Sicherheitsaspekte, die unsere Autoren nicht großartig beleuchten. Das eigene ›WebApp-Framework‹ ist ziemlich unnötig, da hätten die Autoren existierende Toolkits beschreiben können, die es auch im Jahr 2000 schon gab. Wie Logging implementiert werden kann oder OR-Mapper (mit 60 Seiten größer als das Servlet-Kapitel!) ist besser in anderen Büchern aufgehoben. Auch statt ihrer langweiligen Servlet-Engine jo! hätte ich gerne etwas zu Tomcat oder anderen Web-Containern erfahren. Nach der zweiten Auflage folgte keine weitere und das Buch ist gebraucht über Amazon für etwa 5 Euro zu bekommen. Juni 2006

Mastering JSP Custom Tags and Tag Libraries
James Goodwill. ISBN 0471213039. 2002
Ausreichende Einführung in die TagLib. Zudem Vorstellung der JSTL und der Apache TagLibs. So lernt man sie mal alle kennen. Befremdend war die laufende Nutzung von new String("Literal"). Kleine Fehler in den Grafiken. (Sollte man wissen, bevor man sie für eigene Unterlagen kopiert :-) Juli 2004

Inside Servlets: Server-Side Programming for the Java Platform
Dustin R. Callaway, Addison Wesley, ISBN: 0201709066, 2. Auflage.
Kurze und ordentliche Einführung in die Servlets. Besser sollte man jedoch zu Jasons Buch greifen.

Go To Java Server Pages
Stefan Wille, Addison-Wesley, ISBN 3827318920, September 2001, 600 Seiten, 79,90 DM
Sehr schön und flüssig zu lesen. Kann man sicherlich gut für Seminare einsetzen, da der Lernstoff hübsch didaktisch dargeboten wird. Zur Kursvorbereitung würde ich es auf jeden Fall kaufen. Etwas mager fallen die Frameworks aus. Da hört man nämlich gar nichts zu. XML fehlt ebenfalls. Kleine Fehler bei Attributen und Beans. Dezember 2001

Servlets und JavaServer Pages. Praktischer Leitfaden zur Entwicklung dynamischer Web-Applikationen
Marty Hall, Markt+Technik, ISBN 3827259452, 2. Auflage, November 200, 552 Seiten, DM 99,01
Zuerst viel mir der komische Preis aus. Da kann man überlegen und denken, ›Na ja, Euroumrechung‹. Doch in Euro macht das Buch 50,62. Zum Inhalt: Das Buch führt sehr anschaulich und mir vielen Beispiel in Servlets und dann in JSP ein. Ein Beispiel ist wieder etwas für Akademiker: Primzahlenberechung. Sonst ist mir das Buch eher etwas zu ausführlich, was aber für Einsteiger nichts schlechtes bedeuten muss. Leider auch nix zu XML und Frameworks. Immerhin entwickelt der Autor ein ConnectionPool; aber haben wie das nicht schon irgendwo als Standard gesehen. (Besser wäre doch hier eine DataSource und sinnvoll die Erklärung, wie man das im Tomcat konfiguriert.) Zudem bekommt man eine Einführung in die Implementierung von eigenen Tags. Obwohl leider nichts zu Tomcat-Apache-Zusammenarbeit drinsteht, genauso wenig wie Optimierung von Tomcat wird doch immer wieder gezeigt, wo welche Datei stehen muss. Dennoch nichts über War-Archive. Wenn man eine gute Einführung in beiden Themen braucht, man sich aber nicht für einen konkreten Server interessiert (was selten vorkommen dürfte) kann ich das Buch empfehlen. Man sollte auch einen Blick auf die Webseite werfen, wo viele Unterlagen lauern, etwas Folien als PDF-Download. Dezember 2001

Java XML Programmierung professionell mit Servlets und JSP
Alexander Nakhimovsky, Tom Myers.
Es ist schon erstaunlich, wie Informatiker 700 Seiten so dermaßen unnütz voll schreiben können. Listing an Listing, Codesegment für Codesegment robbt sich das Auge über die vollen Seiten. Obwohl der XML-Datei durchaus lesenswert ist, beginnt das Buch erst mal mit etwas ganz anderem. Erst nach 200 Seiten hören wir was von XML, vorher dürfen wir noch einmal etwas von JDBC und formalen Sprachen hören; die Herren erkennt man deutlich ihre Herkunft an. Der XML-Teil ist dabei wieder so unübersichtlich, obwohl alle Nase lang steht, dass es nur ein Auszug ist. Stimmt, das zeigen auch die vielen Zitate. Da muss man es auch nicht selber schreiben. Dann hinten noch rasch etwas von Java-Mail-API, wieso eigentlich nichts von Beans? Die kommen im Ganzen etwas schwach weg. Auch JSP sind etwas mager. Bei den dynamischen Seiten setzen die Autoren auch dann lieber auf eine Eigenlösung, wofür sie erst einmal einen Parser bauen. Dann folgen immer als formale Grammatik Auszüge aus den DTDs. Dieser Inhalt hätte besser in ein XML-Buch gepasst. Dann stören meiner bescheidenen Ansicht nach die selbstgefälligen Aussagen: ›Wir sind so toll, hier ist ja das erste Buch, wo so etwas erklärt wird.‹ Super. Es wird nicht das letzte bleiben. Januar 2001

Java Servlet Programming
Jason Hunter, William Crawford, O'Reilly, ISBN 389721282X, 2. Auflage, Ende 2001, 780 Seiten
Das Buch gefällt mir ganz gut, könnte aber mal wieder aktualisiert werden, da die zweite Auflage nun auch schon älter ist und nur die Servlet 2.3 Spezifikation angeht. (Jason ist aber mit Artikeln sehr aktiv. So finden sich von ihm viele Sachen in Online-Magazinen, etwa in JavaWorld über die Servlet 2.5 Spezifikation.) Das Buch ist sehr gut didaktisch aufgebaut mit interessanten Kapiteln wie Bild-Generierung und Internationalisierung. Die zweite Auflage beschreibt im Gegensatz zur ersten Auflage Frameworks (etwa Tea), die mir sehr unnötig vorkommen. Alles in Allem aber ein Buch was man als ernsthafter Servlet-Programmierer gut gebrauchen kann. Ich persönlich fände einige Beispiele zum Tomcat praktisch, aber hier geht es ja um Servlets und um die Anwendung und nicht um einen speziellen Container. Online gibt es die eine DTD-Beschreibung der web.xml-Datei. September 2003

Java Enterprise Edition (J2EE und Java EE), Enterprise JavaBeans (EJB 2.x und EJB 3), SpringFramework

Java EE 5 Development using GlassFish Application Server
David Heffelfinger. Packt Publishing. ISBN 1847192602. Oktober 2007. 408 Seiten
Trägt ein Buchtitel eine Technologie und gleichzeitig ein Produkt im Namen, ist das eine schwere Mischung. Entweder wird auf die Administration des Servers eingegangen, oder wir finden ein Lehrbuch, das nur Beispiele lauffähig auf einem speziellem Produkt vorweisen kann. Heffelfingers Werk gehört in keine Kategorie. Der Bezug zu Glassfish ist minimal, und wer mehr sucht als eine kleine Installationsanweisung – die es auch im Netz bei Sun gibt –, wird enttäuscht. Da die sauberen Java EE Beispiele den Entwickler nicht an einen speziellen Container binden, sind seine Quellcodes auch auf JBoss oder Geronimo ablauffähig. Wer nun Java EE lernen möchte, ist sicherlich darin interessiert, seine Beispiele zumindest auf einem Server laufen zu sehen. Aus Sicht der Zielgruppe eines Buches wohl eher unnötig einschränkend.

Didaktisch und fachlich gibt es das ein oder andere zu bemängeln. Einige Quellcode-Snippets bekommen ihr @Override vor den überschriebenen Servlet-Methoden, andere nicht. Und warum wird der String-Konstruktor laienhaft verwendet?

application.setAttribute("applicationAttribute", new String( "This string is accessible accross sessions."));

Oder parameterName aus String deklariert, aber später dennoch einmal explizit gecastet?

String parameterName = (String) initParameterNames.nextElement(); 
out.print(config.getInitParameter((String) parameterName)); 

Oder ein StringBuffer statt der guten allen String-Konkatenation eingesetzt?

@Override public String toString() { 
 StringBuffer fullNameBuffer = new StringBuffer(); 
 fullNameBuffer.append(firstName); 
 fullNameBuffer.append(" "); 
 fullNameBuffer.append(lastName); 
 return fullNameBuffer.toString(); 
}

Hier ist ein return firstName + " " + lastName; doch wirklich angenehmer zu lesen und auch die Performance gar nicht schlechter.

Ebenso heiße ich es nicht für sinnvoll, auf das MVC-Konzept auch bei JSP/Servlets zu verzichten. Didaktisch dürften JSPs eher vor Servlets Sinn ergeben. JSPs gehen mir auch zu früh runter auf implizite Objekte und eine Skriptlet-Ebene ohne früh schon EL und die Standard-TagLib zu erklären. Die web.xml-Datei bekommt auch immer unterschiedliche Schema-Dateien und Versionen untergeschoben: Einmal 2.4, dann wieder das aktuelle 2.5. Beim Fehlerhandling findet sich:

StringWriter stringWriter = new StringWriter(); 
PrintWriter printWriter = new PrintWriter(stringWriter); 
exception.printStackTrace(printWriter); 
out.write(stringWriter.toString());

Warum der Autor nicht einfach exception.printStackTrace(new PrintWriter(out)); schreibt, ist mir ein Rätsel. (out ist ein JspWriter extends Writer und printStackTrace() möchte einen PrintStream oder PrintWriter.) Dann ist die Definition einer Bean falsch: „All of its variables must be private.” Die von Properties verwendeten Attribute sind in der Regel private, aber sie müssen es nicht sein. Auch sind natürlich public static final-Konstanten erlaubt. (Wunderbar, dass ausgerechnet im zugehörigen Beispiel die Variablen nicht private sind, sondern paketsichtbar.)

Die Datenbank ist mit zehn Tabellen vielleicht für Einstiegerbeispiele doch etwas zu kompliziert. Als Leser ist man erschrocken, plötzlich ein Servlet zu sehen, welches an die Datenbank geht und SQL-Anweisungen ausführt. Warum sieht man so einen Wahnsinn noch im Jahre 2008? Die Datenbank-Connection wird zudem nicht korrekt im finally-Block geschlossen. Es reicht, auf Seite 120 gebe ich auf und wage den Wiedereinstieg auf Seite 347. (Übersprungen werden Standard TagLibs, JSF, JMS, Security, EJB, Web-Services.) Zum Abschluss ein kleiner Höhepunkt: Heffelfinger geht praktisch auf Facelets ein und zeigt auch ein Beispiel für das Templating, ein Weiteres für Ajax4jsf und JBoss Seam findet sich ebenso. Ein erneuter Lichtblick: Der Autor verwendet vorbildlich die vorgesehene Dateieindung .jspf für inkludierte JSP-Fragmente. Dann noch etwas IDE-Integration (NetBeans und Eclipse) und der Spuk ist vorbei. Mai 2008

Agile Java Development with Spring, Hibernate and Eclipse
Anil Hemrajani. Sams. ISBN 0-672-32896-8. Mai 2006. 360 Seiten
Lehrbücher, die anhand eines Beispiels versuchen, die agile testgetriebene Softwareentwicklung mit Ant, Hibernate, HSQLDB und Spring (Web mit Spring MVC) zu zeigen, gibt es meines Wissens keins – bis auf dieses. Vielleicht ist das auch kein Wunder, denn schon die Themen Spring/Hibernate füllen dicke Bücher. Hemrajanis Buch will aber gar nicht in die Tiefe gehen, sondern zeigt, wie mit Open-Source Tools ein Online Timesheet System aufgebaut wird. Der Autor streift dabei weitere Technologien, wie die Eclipse IDE, Logging, Profiling, und stellt Links zu vielen Tools übersichtlich am Ende jedes Kapitels vor. Die Zielgruppe für das Buch dürften Personen sein, die bisher mit dem Standard Java gearbeitet haben, und nun lernen wollen, mit welchen Enterprise Technologien sich Web-Anwendungen bauen lassen. Wer eine detaillierte Beschreibung in JUnit, Hibernate und Spring sucht, ist mit dem Buch sicherlich nicht gut beraten. Schade ist auch, dass Hibernate über die HBM.XML-Dateien konfiguriert wird und nicht die Sprachmöglichkeiten über Java 5 (Annotationen) und der JPA-Entity-Manager zum Einsatz kommen. Dass nicht Spring 2 den Kern bildet, ist zu verschmerzen, und das statt Spring MVC nicht Spring WebFlow zum Einsatz kommt ist wohl eher eine Frage des didaktischen Wegs und dem Zeitpunkts des Drucks zu verschulden. Mai 2008

Core J2EE Patterns . Die besten Praxislösungen und Design-Strategien
Deepak Alur, John Crupi, Dan Malks. Markt+Technik. ISBN 3827263131. 2002. 417 Seiten
[Heart]Ein Pattern-Buch für Java Enterprise Anwendungen ist ein absolutes Muss für jeden Entwickler. Die deutsche Übersetzung amüsiert mich zwar mit Sätzen wie ›Entitäten mit einer Sitzung einhüllen‹ (Seite 113), aber da ich selbst recht viel übersetze, regt mich das nicht auf. Wer es lieber mit dem Original hat, kann natürlich die englische Auflage kaufen, oder auch online unter BluePrints. Welcome to Core J2EE Patterns! die Muster nachlesen, die den 3. Teil ›J2EE-Musterkatalog‹ im Buch ausmachen. Der Teil 2 im Buch ist auch nützlich, insbesondere für eigene Folien sind gute Abbildungen dabei. Passend auf der Webseite wird zu Java Pet Store sample application implements the Core J2EE Patterns verlinkt, um zu sehen, wie es Sun in der J2EE-Beispiel-Applikation Pet Store gemacht hat. Meine Favoriten sind im Wesentlichen Muster der Geschäftsschicht, da ein Framework wir JSF es unnötig macht, sich groß mit Implementierungen der Muster in der Präsentationsschicht Gedanken zu machen. Zu meinen Tops zählen (mehr oder weniger gleichwertig): Session-Fassade, Data-Access-Object (DAO), Business-Delegate, Transfer-Objekt. Einziger Wehrmutstropfen: Ein Update für Java EE 5 täte dem Buch gut. Eine Version der Java EE 5 Pattern steht aber schon. April 2007

Developing Java Enterprise Applications
Stephen Asbury, Scott Weiner. John Wiley & Sons. ISBN 0471405930. 1. Auflage. 780 Seiten
Ein altes J2EE Einführungsbuch. Angestaubt und ohne große Toolunterstützung (XDoclet oder Ant). Es gibt von dem Buch zwar eine neue Auflage, doch in meiner ersten sind JSPs gerade frisch verabschiedet worden. Bietet aber eine ordentliche Darstellung von JNDI. Der Rest lohnt nicht. April 2007

Java 2EE. eBusiness-Anwendungen effizient programmiert
Alexander Dunn. dtv. ISBN 3423502444. 2001. 375 Seiten
Ein Buch, was man für 7,50 € bekommt und ohne XDoclet kurz über zentrale J2EE Dinge läuft. Ein bisschen JDBC mit HSQLDB, ein wenig Session-Bean hier und ein wenig Entity-Bean da, eine Priese JSP und als Abschluss — überraschend ausführlich — noch Tag Libraries. April 20077

Pro Apache Geronimo. Open Source Lightwave J2EE Container
Kishore Kumar. apress. ISBN 1590596420. April 2006. 252 Seiten
Ich habe zwar Apache Geronimo nicht im Einsatz (und kann mir auch nicht vorstellen, den Server in der nahen Zukunft zu nutzen, da die Verbreitung zu gering ist), aber dennoch wollte ich etwas über die Architektur kennen lernen. Kumar vermittelt zunächst die Basis vom Geronimo Application-Server 1.x und stellt den Kern, einen IOC-Container, der GBeans verwaltet, vor. Er geht kurz über die üblichen Bean-Typen und zeigt, wie sie deployed werden und welche spezifischen Deployment-Deskriptoren es gibt. Gut gefallen hat mir ein Kapitel zur Web-Service Fassade für eine Session-Bean, und wie J2EE Connectoren programmiert und eingebunden werden. Dass das Buch jedoch etwas zu Java EE 5 enthält — so steht es auf dem Buchrücken ›Includes some Java EE 5‹ — ist eine glatte Lüge. Januar 2007

Enterprise JavaBeans
Richard Monson-Haefel. O'Reilly. ISBN 1-56592-869-5. 472 Seiten
Kritik zur zweiten Auflage: Insgesamt ist das Buch von Richard ganz gut, wobei sich diese Auflage noch mit Lästigkeiten wie EJB 1.0 und EJB 1.1 beschäftigt, was heutzutage wirklich nicht nötig ist. Die Grafiken für die Transaktions-Modi sind sehr hübsch und eine ausgezeichnete Vorlage für Unterlagen. Insgesamt aber nicht schädlich und Sätze wir ›[...] is similar to the difference between hanging up on a telephone conversation and actually killing the caller on the other end. Both end the conversation, but the end results are a little different.‹ Die vierten Auflage beschäftigt sich mit EJB 3 (und EJB 2.1) und hat zudem zwei Prominente Co-Autoren aus dem JBoss-Team: Bill Burke und Sacha Labourey. Januar 2007

Enterprise Java Frameworks - Java Technologien professionell einsetzen
Adam Bien. Addison-Wesley. ISBN 3-8273-1777-0. 2001. 276 Seiten
So sehr ich die Beiträge im Java-Magazin von Adam schätze, so umgekehrt reziprok ist die Nützlichkeit des Buches. Man erkennt, wie der Autor einleitend schreibt, dass hier die Diplomarbeit verwurstet wird und findet einleitendes zu Pattern (und beim Singleon auf Seite 12 fehlt noch das synchronized, was mir als Leser die Frage aufwirft, was denn da noch so schlimmes kommen mag), ein paar Grundlagen zu Java EE (dafür gibt es bessere Bücher) und ein selbstgebautes Framework. Das war sicherlich 2000/2001 spannend, heute aber nicht mehr. Daher kann man das Buch getrost im Regel lassen und neuere Werke von Adam kaufen. Dennoch muss man ihn für die Mühe loben, unzählbare viele UML-Diagramme mit Together entwickelt zu haben. Respekt. November 2006

Enterprise JavaBeans
Stefan Denninger, Ingo Peters. Addison-Wesley. ISBN 3-8273-1534-5. 2000. 283 Seiten
Meine erste Auflage beschreibt noch den Umstieg von EJB 1.0 auf EJB 1.1, aber wer die Enterprise JavaBeans Spezifikation kennt, der weiß, dass es bei den am häufigsten eingesetzten Session-Beans nix neues gibt. Klar, dass es MDB gibt, und die EJB-QL bei den Entity-Bean immer weiter verfeinert wurden, aber das würde das Buch auch nicht besser oder schlechter machen. So sind die Kapitel über Session-Beans immer noch nett und die Beschreibung der Transaktionen hat mir gut gefallen. Das ist in anderen EJB-Büchern deutlicher schlechter. Bedauerlich, dass der Bereich Sicherheit eigentlich komplett fehlt. Insgesamt durch den laufenden Vergleich von EJB 1.0 und EJB 1.1 etwas ›verbose‹, aber immer noch lesbar. Juni 2006

Java- Bausteine für E- Commerce Anwendungen. Verteilte Anwendungen mit Servlets, CORBA und XML
Andreas Eberhart, Stefan Fischer. Hanser Fachbuch. ISBN 3446213724. 2000
Ein Buch zum Aufregen. Die Themen sind eigentlich genau die, die man mal immer lesen wollten. Alles in einem Buch, das soll gehen? Eigentlich schon, aber wie die Autoren das gemacht haben, funktioniert es nicht. Zunächst mal wieder die obligatorischen ›Was ist eine Schleife und Klasse in Java‹, die in allen schlechten Fortschrittsbüchern zu finden sind (29 Seiten). Gehört in ein Buch dieser Klasse nicht rein. Unnütz in der Version 2 auch 18 Seiten über ›Was ist HTML?‹. Sonst alles ein wenig oberflächlich. JDBC (satte 14 Seiten!) Servlets, CORBA, XML (schon ehr am umfangreichsten) kann man dann grob einordnen, aber das war's dann schon. Mit ein paar Papers von der Sun-Seite ist man besser bedient. Das ist auch nicht viel schwieriger. Amazon sagt, dass Stefans Bücher sonst auch nicht so tolle sind. Und ich frage mich die ganze Zeit, wer von den beiden es eigentlich drauf hat, und wer das Looser-Kapitel geschrieben hat. Also der Fischer ist jedenfalls ein Prof. in Braunschweig mit dem Schwerpunkt ›Arbeitsgruppe Verteilte Systeme‹. Der müsste es eigentlich draufhaben. Das Buch ist in der zweiten Auflage und dort finden sich auch Themen wie EJB und SOAP. Habe ich noch nicht gesichtet. März 2002.

Java Message Service
Richard Monson-Haefel, Dave Chappell. ISBN 0-596-00068-5. 2002. 238 Seiten
Schönes Buch. Ein Teil aus Kapitel 2 (Developing a Simple JMS Example) gibt es online. Schade nur, dass es JMS 1.0 ist und nicht JMS 1.1; der aktuelle Standard hat doch einiges dafür getan, Queue und Topic zusammenzubringen. Erst das Buch, und dann die JMS-Spezifikation, und man ist gut vorbereitet. Dann gilt es nur doch, sich mit einem konkreten JMS-Provider auseinanderzusetzen, etwa JBossMQ (nun JBoss Messaging) oder ActiveMQ. Dezember 2004

Open Source

The Complete Log4j Manual: The Reliable, Fast and Flexible Logging Framework for Java
Ceki Gülcü. QoS.ch. ISBN 2970036908. 2003. 206 Seiten
Dürfte wohl das Standardwerk für diese Logging-API sei. Kein Wunder, ist doch der Autor des Buches auch die zentrale Figur der Bibliothek. Die einleitende Beschreibung hat man schon oft in einführenden log4j Werken gelesen — alles von diesem Buch übernommen. Genau beschreibt Gülcü zur Konfiguration von log4j die Eigenschaften in den Properties-Dateien und Elemente in den XML-Dokumenten. Das gleiche gilt für die Einstellungen der Appender, etwa der RollingFileAppender oder DailyRollingFileAppender. Detailliert werden die Implementierung eigener Logger und Filter und von den Diagnostic Contexts, die das Logging von verteilten Anwendungen erleichtern, darstellt. Vor diesem Buch habe ich davon noch nie was gehört. Im Zentrum stehen hier Mapped Diagnostic Contexts (MDC) und Nested Diagnostic Contexts (NDC). Auch geht der Autor auf die Logging API von Java 1.4 ein und auf Common Loggings. Hier beschreibt er die Unterschiede und die Schwierigkeiten. Nach meinem Geschmack hätte ich mir eine hübsche Tabelle mit den Unterschieden gewünscht, doch auch ohne werden dem Leser genug Vorteile von log4j aufgezählt. November 2004

Design, effektive Programmierung, Idiome, Best Practice

Beautiful Code: Leading Programmers Explain How They Think
Andy Oram, Greg Wilson. O'Reilly. 2007. 618 Seiten
Bekannten Autoren und Software-Architekten geben in 33 Kapiteln viele Beispiele ihrer Kunst, und Einblicke in ihr Schaffen. Doch sehr spezielle Beispiele in diversen Programmiersprachen machen es für Java-Programmierer schwer, hier „schönen Code“ zu entdecken. Unter dem Strich bleibt nicht viel für Java-Entwickler über, wenn Programmiersprachen wie C, Ruby, LISP ihren Platz finden und Algorithmen vorgestellt werden, die für die allermeisten kaum relevant sind. Interessant ist es allemal, und wer sich viel Zeit für die Einarbeitung nimmt, wird auch sicherlich viel entdecken, zumal das Design einen größeren Stellenwert einnimmt, als der Quellcode an sich. Bei den wenigen Java-Programmen gibt leider etwas zu bemängeln. Einmal ein einfacher Fehler auf Seite Seite 478, in dem die Klammerung falsch ist:

class Sample {}
 public static void main(String[] argv) {
  System.out.println("Hello World");
}

Der zweite Hammer haut aber stärker rein und ist definitiv kein Beispiel für „Beautiful Code“. Seite 332 stellt eine EJB Session-Bean FileReaderBean vor, die über eine FileInputStream Daten vom Dateisystem holt – das ist nun wirklich nicht in Ordnung. Toll finde ich, dass die Erlöse an Amnesty International gehen: „All royalties from this book will be donated to Amnesty International.”. Das nette Kapitel Code in Motion ist online verfügbar.

Bug Patterns in Java
Eric Allen. Apress. ISBN 1590590619. 2002. 264 Seiten
Obwohl in dem Buch für erfahrene Java-Entwickler nicht so viel Neues zu finden ist, gefällt mir doch der Stil des Autors. Sätze wie "Sherlock Holmes, the world's greatest detective and master debugger." oder "The whole is greater than the sum of its parts." lockern seine Liste von Fehlermustern erfolgreich auf. Im Besonderen lenkte Eric meine Aufmerksam auf die Tatsache, dass Assertions ja eigentlich an die Schnittstellen müssen und nicht an die Klassen. Auf diesem Weg werden Klassen der Intention Folge leistend tatsächlich funktional implementiert. Über seine Aussage "Use checked exceptions to ensure that all clients handle exceptional conditions." sollte man gründlich nachdenken. Interessant ist auch die Überlegung zu den Zuständen vom Iterator: "One example of an accessor that modifies state is the next method in java.util.Iterator. It is natural to call this method to retrieve the next element while iterating over a Collection, but if it's called more than once in a single iteration, an element may be lost. It would have been better to separate next() into two methods: one to retrieve the current element, and one to move forward by one element.". September 2007

Better, Faster, Lighter Java
Justin Gehtland, Bruce A. Tate. O'Reilly. ISBN 0596006764. 2004. 250 Seiten
Schmales Buch über Dies und Das, weder Fisch noch Fleisch. Eine Prise Anti-Pattern, altbekanntes zu Design, ein wenig XP und Hibernate sowie eine kleine Einführung in Spring. Ich bin für absolute Aussagen auch nicht so zu haben, so wie Bruce sie schon in seinem ersten Buch "Bitter Java" machte: "No entity beans and CMP altogether. Entity beans are unwieldy albatrosses that take tremendous energy to understand, code, tune, and maintain. Better solutions are out there; find them.", "No stateful session beans Avoid stateful session beans. You're better off using HTTP sessions or databases, depending on your solution. Those solutions are more broadly adopted and won't tie you to EJB for the long term." Und später "EJB Vendors and customers alike spend too much time building on this dead-end technology." Für Konfigurationen hätte durchaus ein Hinweis auf das Apache-Commons Configuration Paket fallen dürfen, wenn denn schon http://commons.apache.org/digester/ erwähnt wird. Gut finde ich etwa die Tabelle "Java's most common golden hammers" und die Auseinandersetzung mit Frameworks, die die Welt nicht wirklich braucht. September 2007

Java in Practice. Design Styles and Idioms for Effective Java
Nigel Warren, Philip Bishop. Addison-Wesley. ISBN 0201360659. Ende 1998. 209 Seiten
Wer mit Java beginnt, kann etwas lernen, erfahrene Entwickler mit OOP- und Pattern-Hintergrund werden sich langweilen. Merkwürde Namenskonventionen irritieren, so enden Attribute mit einen Unterstrich und auf Seite 112 wird kommentiert: "classFinalize() [...] will be called by the runtime when the class is unloaded". Aber in Die Spezifikation der virtuellen Maschine (1987!) wird schon erklärt, dass das nie implementiert wurde. Ein Update täte dem Buch gut, denn der Titel ist großartig. Denn der Bezug auf alte Datenstrukturen wie Vector oder Schnittstellen wie Iterator sollten der Vergangenheit anhören. August 2006

Design mit Java. Bessere Applets und Anwendungen
Peter Coad, Mark Mayfield
Peter Coad gilt als Objektguru. In diesem Buch beschreibt es Strategien zum bessern Design in fünf Kapiteln: Design am Beispiel, Komposition statt Vererbung, Design mit Schnittstellen, Threads, Benachrichtigungen. Besonders gut hat mir Design mit Schnittstellen gefallen. Leider sind seine Bücher von einem gewöhnungsbedürftigen Schreibstil. Über die fast 300 Seiten ziehen sich Beispiele und Bauanleitungen. Die Schreibweise macht mir ein bisschen zu schaffen, da der Text häufig im Frage/Antwortstil gehalten ist. Man muss sich immer durch Beispiele kämpfen, Quellcode und UML-Diagramme lesen, was anstrengend ist. Februar 2001

Java2 Designmuster und Zertifizierungswissen
Friedrich Esser. Galileo Press. ISBN 3-934358-66-7. 2001. 654 Seiten
Eines vorweg. Das Buch hat mit Zertifizierungswissen so ziemlich gar nichts zu tun und wenn man die Designmuster der GoF sucht, wird man hier ebenfalls nicht fündig. Vermutlich hätte ich mir das Buch sonst auch nicht zugelegt, aber so hat es mir der Galileo-Verlag geschenkt, als ich mich zum ersten mal mit meiner Lektorin getroffen habe. Als ich dann mit dem Lesen anfing war ich dennoch sehr zufrieden. Man muss jedoch damit leben, dass das Buch keine vernünftige didaktische Einführung gibt (obwohl des nach dem Inhaltsverzeichnis den Anschein hat); es ähnelt mehr oder weniger einem Sammelsurium von interessanten Themen und Dingen. Immer wieder werden Design-Ansätze verglichen. Wer also schon mit Java umgeben kann, der findet hier immer noch nette Codebeispiele. Meine Empfehlung. August 2001

Java Microedition (Java ME)

Professional Java Mobile Programming
Ausführliches Buch mit dem Blick auf Palm (heute nicht mehr der Renner).

J2ME: The Complete Reference

Wireless Programming with J2ME: Cracking the Code

Core J2ME Technology

Java 2 Micro Edition
Sebastian Eschweiler. bhv. ISBN 3826672488. 351 Seiten
Toll, ein Buch vom einem Autor zu lesen, welcher vor nicht allzu langer Zeit das Gymnasium besuchte. Für fast 10 Euro bekommt man kurz und knapp eine Einführung in die Programmierung von MIDP 1.0 und CLDC. Zwar bringt der Autor hier kein Insider-Wissen unter und die Beispiele sind nicht immer konsistent, aber dennoch finde ich das Buch ganz gut. Irritierend ist etwa, dass ausdrücklich davon abgeraten wird, im Konstruktor das Display-Objekt zu holen, aber dennoch findet man das anschließend in fast jedem Beispiel. Auch wird in den Kapitel alles nur am Emulator getestet und programmiert, es fehlt das ›Real Live‹. Hoffentlich steht bald ein Update an. Oktober 2003

Performance

Performant Java programmieren. Performance-Fallen erkennen und vermeiden
Hendrik Schreiber. Addison-Wesley. ISBN-13: 978-3827320032. 2002. 328 Seiten
Führt in die Optimierung von Java SE Anwendungen ein. Die Optimierungen wirken heute vielfach kleinkariert. Eine Aktualisierung täte dem Buch gut.

Java Platform Performance. Strategies and Tactics
Steve Wilson, Jeff Kesselman.Addison-Wesley. ISBN 0201709694. 2000. 230 Seiten
Mal ganz nett für zwischendurch. So richtig harte Informationen findet man aber nicht. Einiges ist unvollständig, wie die Optimierung von Swing-Renderern. Java EE Themen fehlen komplett. Das Buch ist auch komplett online. November 2006

Java Performance Tuning
Jack Shirazi. O'Reilly & Associates, Inc. ISBN 0-596-00377-3. 2. Auflage 588 Seiten
Ich kenne nur die erste Auflage und da steht kaum etwas drin, was man wirklich für Enterprise-Applikationen verwerten kann. Die Tipps sind zwar OK, und auch so weit richtig, doch in der ersten Auflage finden sich — Ooh — null Seiten Datenbanken, 0 Seiten EJB, 0 Seiten Swing/AWT. Was will man damit? Zwar schön zu wissen, dass if mal schneller ist als ein switch, aber seien wir doch mal ehrlich: Für wen sind solche Optimierungen interessant? Da ist es doch schon wichtiger zu vermitteln, dass es Connection-Pools gibt und was es für EJB-Pattern gibt. Das Buch enthält fast nur Wischi-Waschi-Optimierungen und die richtig harten Sachen fehlen. Demokapitel über verteilte Programmierung. Am Besten ist da die Webseite vom Autor. November 2001

Sun Performance and Tuning: Java and the Internet
Adrian Cockcroft (Hui, der wurde in der Schule bestimmt immer gehänselt.), Richard Pettit
Die Autoren beschreiben alle optimierbaren Bereiche eines Computers wie Netzwerk, Disk-Array, Speicher usw. Mit vorgestellten Tools werden Schwachstellen aufgezeigt bzw. gelehrt, wie diese zu beheben sind. Mein Interesse galt in erster Linie Java, was aber nur sehr mangelhaft beschreiben wird. Der Titel verspricht mehr. Dafür fand ich TCP/IP Optimierung ganz gut. Sonst ist das Buch nach meiner Einschätzung ehr was für Systemadministratoren. Februar 2k

Zertifizierung

SCWCD Exam Study Kit. Java Web Component Developer Certification
Hanumant Deshmukh, Jignesh Malavia, Jacquelyn Carter. Manning. ISBN 1-930110-59-6. 2003. 562 Seiten
Obwohl ich nur die erste Auflage gelesen habe (Tomcat 4, Servlet 2.0), geht das Buch sehr ausführlich auf die Standards JSP und Servlet ein. (Die neue Auflage wird bei Amazon nicht sehr gut bewertet.) Die Grafiken sind etwas schwach und da hätte der Verlag gut noch einmal jemanden zum Nachzeichnen engagieren können, doch alles in allem alles gut erklärt. Vielleicht ist das Buch sogar besser geeignet, in die Materie insgesamt einzusteigen, als ein perfektes Prüfungsbuch zu sein. Einige Beispiele stoßen jedoch auf, wie die Zeilen zum Senden von Binärdaten:

File f = new File("test.jar");
byte[] bytearray = new byte[(int) f.length()];
FileInputStream is = new FileInputStream(f);
is.read(bytearray);
OutputStream os = res.getOutputStream();
os.write(bytearray);
os.flush();

Der Speicherverbrauch bei dieser Lösung ist hoch und in so einem Fall lässt sich gut Streaming nutzen. Das TestServlet auf Seite 51 kann man nicht compilieren, da die Anweisungen

Class.forName(driverClassName);
dbConnection = DriverManager.getConnection(dbURL,username,password);

eine checked Exception auslösen, die die init()-Methode nicht mit einem try-catch-Block abfängt. Im destroy()-Teil fangen die Autoren wiederum die close()-Methode ab. Bei folgender Klasse ist mir nicht klar, was die Autoren mir sagen wollen:

public class SecureServlet extends HttpServlet
{
 public SecureServlet()
 {
  super();
 }
}

Wirklich gut gemacht fand ich die Kapitel „WEB APPLICATIONS IN A DISTRIBUTED ENVIRONMENT“, UNDERSTANDING AUTHENTICATION MECHANISMS“ und die Beschreibung der Umsetzung von JSP in Servlet, Erklärungen und um Beans und Formulardaten sowie Implementierung von Tags (viele gute Flussdiagramme). Noch etwas dazugelernt habe ich mit „Precompilation Protocol”. Der Teil der JSP 2.0 Spezifikation (JSR 152) definiert, das über einen Anhang wie das Beispiel http://localhost:8080/chapter11/counter.jsp?jsp_precompile=true zeigt, Seiten nur übersetzt, aber nicht ausgeführt werden.

Java 1.1 Certification Study Guide
Simon Roberts, Philip Heller. Sybex-Verlag. ISBN 0-7821-2069-5. 1997, 720 Seiten
Umfangreiches Buch für die frühe Java-Zertifizierung. Besser als das Exam-Cram Buch. Sehr empfehlenswert. Schade nur, dass 250 Seiten API-Dokumentation einnehmen. Mai 2k

Java 2 exam cram
William G. Brodgen. ISBN 1-57610-291-2. 1999. 388 Seiten
Ein kompaktes Java Buch. Es ist für die Prüfung ›Sun Certified Programmer for the Java 2 Plattform‹ gedacht. So schön kurz und knapp habe ich Java noch nicht in einem Buch gefunden. Der Preis ist gut: 55 DM. Kann man sich also auch kaufen, wenn man nicht nur die Prüfung machen möchte. Möchte man die Prüfung machen, sollte man noch Prüfungsfragen aus dem Internet suchen. Dafür reicht das Buch nicht. Juli 99