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
- Gui (Swing und AWT)
- Java-Bibliotheken (JavaBeans, IO, Net, Util, XML, Sicherheit, ...)
- JavaBeans
- Persistenz und JDBC
- JavaServer Pages, Servlets, JSF, Web-Frameworks
- Java Enterprise Edition (J2EE und Java EE), Enterprise JavaBeans (EJB 2.x und EJB 3), SpringFramework
- Open Source
- Design, effektive Programmierung, Idiome, Best Practice
- Java ME
- Performance
- Java-Zertifizierung
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]](../images/bookmark.png)
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
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
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
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
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).
Wireless Programming with J2ME: Cracking the Code
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