Bücher zu Java Enterprise Edition, Enterprise JavaBeans, Spring-Framework Hits und Flops

Apache Geronimo, Handbuch für den Java-Applikationsserver
Frank Pientka. dpunkt-Verlag. ISBN 978-3-89864-517-1. 01/2009. 330 Seiten
Der zertifizierte Java EE 5 App-Server Geronimo steht immer ein wenig im Schatten der beiden ›Großen‹: JBoss und GlassFish. Dass dafür kein Anlass besteht, zeigt sich schnell durch die Möglichkeiten von Geronimo und die Zuneigung von IBM. Wer sich also für Geronimo entschieden hat und ein deutschsprachiges Buch sucht, der wird an Frank Pientkas Buch nicht vorbeikommen, denn es ist neben dem weniger aktuellen ›Geronimo schnell + kompakt‹ das einzige. Wer die englische Sprache bevorzugt, hat die Auswahl zwischen drei weiteren Büchern. Pientka stellt auf 250 Seiten die zentralen Aspekte von Geronimo vor (plus 50 Seiten Anhang). Für Java EE 5-Einsteiger gibt es ebenfalls ein Kapitel. Zusammenfassend lässt sich sagen: Das Buch behandelt alle relevanten Aspekte und bietet viele Verweise auf weiterführende Webseiten. Das Geronimo-Buch verirrt sich glücklicherweise nicht in Geronimo-Internas wie zum Beispiel ›JBoss Administration and Development‹ aus dem Jahr 2002 – einem JBoss-Buch, das mit UML-Diagrammen vollgestopft ist Admin-Informationen mit Internas vermischt. Des Weiteren hält sich Pientka an den Java EE 5-Standard. Containerspezifische Java EE-Erweiterungen werden nicht besprochen. Dabei bieten gerade die Apache-Implementierungen weitere Möglichkeiten, etwa JPA-Tuning durch spezielle OpenJPA-Annotationen, JMS-Erweiterungen von ActiveMQ für hierarchische Topics oder verschlüsselte Verbindung beim JNDI-Kontext, also Aspekte, die über den Standard hinausgehen, die Geronimo möglich macht. Wie etwa Hibernate statt OpenJPA als JPA-Provider konfiguriert wird, steht nicht im Buch, vielleicht auch, weil dieses Thema bislang im Internet nur spärlich dokumentiert ist. Die eine oder andere Schwäche findet sich in den Quellcodes. Zeilen wie catch (java.lang.Exception e) und mitunter Zeilenumbrüche, die an den Obfuscated Content erinnern, sind nicht unbedingt schön. Einige Aussagen sind missverständlich, etwa ›Geronimo selbst verwendet […] sehr populäre Ajax-Bibliotheken JSON […]‹ oder dass Dojo und DWR Teile des Java EE-Standards sind. Wünschen wir uns, dass der Autor das Buch schnell aktualisiert damit es zukünftig Geronimo 2.1 statt Geronimo 2.0, ›IIS-Versionen 6 und 7‹ statt ›auch wenn die aktuellsten IIS-Versionen 5 und 6‹, MyFaces statt myFaces, StAX statt STAX heißt und SOAP nicht mehr ›Simple Object Access Protocol‹ genannt wird. Diese sprachlichen Kleinigkeiten werden sicherlich bereits in der kommenden Auflage zu Java EE 6 behoben sein. Fehler sollten auf der dpunkt-Homepage dokumentiert werden. März 2009

Building Java Enterprise Applications Volume I: Architecture
Brett McLaughlin. O’Reilly. ISBN 0-569-00123-1. 2002. 318 Seiten
Ein Titel wie ‹Entwicklung einer Beispielanwendung mit der J2EE‹ trifft den Inhalt des Buches besser. Architektur, im Sinne von Java EE Patterns, ist zwar auch im Spiel, bestimmt aber nicht das Buch. Stattdessen fasst McLaughlin die Java EE-Bereiche JNDI, EJB, JMS zu einem Gesamtbeispiel zusammen, eigentlich das, was man von jedem Einführungsbuch in Java EE erwartet. Hier liegt auch das Problem. Wenn es ein Einführungsbuch in die Java EE-Technologien sein soll, dann fehlen einige Grundlagen – obwohl der Autor hier durchaus viele Basics erklärt. Geht es dagegen um Architektur und Design, so kommen hier auch Patterns vor, etwa Fassade, Value Object Pattern (die der Autor Details Pattern nennt) oder DAO (die beim Autor Manager Component heißen). Mehr Patterns wären wünschenswert, insbesondere zu aktuellen Ansätzen der SAO; aber da das Buch von 2002 ist, ist es kein Wunder, dass gewisse Begrifflichkeiten noch nicht vorhanden waren. Das alles ist reicht für 10 Kapitel wobei es von Seite 185-270 noch Anhänge mit den SQL-Listings und ein Setup für den Bea-J2EE Container gibt. Der Quellcode ist gut beschrieben, aber Entwickler sollten Anweisungen wie die Folgenden überlesen.

new StringBuffer("SELECT NEXT_VALUE ")
.append(" FROM PRIMARY_KEYS ")
.append(" WHERE KEY_NAME = ?")
.toString( );

Der Plus-Operator wäre hier genau richtig, denn konstante Zeichenketten werden zu einer großen Zeichenkette zusammenfügen, wobei bei dieser gewählten Schreibweise über StringBuffer und appends mehr Arbeit als nötig gemacht wird. Januar 2009

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 privat, aber sie müssen es nicht sein. Auch sind natürlich public static final-Konstanten erlaubt. (Wunderbar, dass ausgerechnet im zugehörigen Beispiel die Variablen nicht private sind, sondern paketsichtbar.)

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

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

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

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

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

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

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

Enterprise Java Frameworks – Java Technologien professionell einsetzen
Adam Bien. Addison-Wesley. ISBN 3-8273-1777-0. 2001. 276 Seiten
So sehr ich die Beiträge im Java-Magazin von Adam schätze, so umgekehrt reziprok ist die Nützlichkeit des Buches. Man erkennt, wie der Autor einleitend schreibt, dass hier die Diplomarbeit verwurstet wird und findet einleitendes zu Pattern (und beim Singleton 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.