Hi,
schon bevor ich diesem Forum beigetreten bin, glaube ich an die Kraft der Frameworks in Java. Das war vielleicht auch manchmal der Grund für Mißverständnisse.
Jemand möchte einfach wissen "wie man in Java auf Datenbanken zugreift" und ich antworte mit einer Reihe von Hibernate, Ibatis, Jboss und Zeugs. Ich habs mir abgewöhnt. Trotzdem siehts da draussen so aus. Der ökonomische Druck lässt Programmierer einfach nicht den Spielraum, nur bewaffnet mit der low level Programmiersprache Java Lösungen für Geschäftsanforderungen von realen Menschen zu proggen.
Und das ist gut so. Es ist zwar trivial mit JDBC von Java auf eine Relationale Datenbank zuzugreifen. Nur wird die resultierende Anwendung fast nur noch aus JDBC Code bestehen und so viele Schwächen in Details haben, dass die Maintainance Kosten
zu hoch sind mit hoher Wahrscheinlichkeit explodieren werden. Und diese Kosten kenne ich sehr gut, weil ich eben - wie sehr viele oder alle- eine Menge Erfahrung mit Maintainance und Erweiterung von suboptimal strukturierten Anwendungen habe.
Wir brauchen StrukturUnd genau diese Struktur geben
höchst professionelle, flexible, un-intrusive Frameworks für bestimmte Aufgabenfelder. Das hat für mich übrigens in der historischen Perspektive mehr mit LotusNotes zu tun, als es vielleicht den Anschein hat. Für viele C-Programmierer begann Lotus Notes als ein Framework für Groupware/Workflow-Anwendungen. Dies wurde mit R4 zurückgedrängt. Gründe waren aus meiner Sicht LotusScript, der stark wachsende Bedarf nach technisch nicht so tief ausgebildeten Anwendungsentwicklern in der Dot-Com Bubble und der Niedergang von C/C++ als am meisten verbreitete low level Programmiersprache gegenüber Java.
Auch Lotus versuchte zwischen 1999 und 2003 sehr stark closed source Toolkits anzubieten, die auf Lotus Notes aufbauten (z.B. LISA, DominoDoc, LEI). Die Produkte on-top erschienen mir aber nie so rund und gut wie LotusNotes selbst. Inzwischen wird das immer stärker durch die Java/Eclipsifizierung unterlaufen: Expeditor, Composite Apps und dieses Web-Ding (Name vergessen). Lotus-on-Eclipse bringt aus meiner Sicht auch die Chance, LotusNotes und Java Frameworks wie Hibernate oder Spring zu verknüpfen.
Und sowieso: Ähnlich wie Spring bietet LotusNotes eine Struktur für Anwendungen an und liefert Dienste wie Security, verteilte Anwendungen, Web-Unterstützung, dauerhaftes Speichern in einer Datenbank, etc.
Folgt nun eine längere Erörterung meiner Interpretation der dramatischen Verschiebungen in Enterprise Java. Ich hab mit keinem der Beteiligten persönlichgesprochen. Das ganze nur im Medium Internet verfolgt. Heute ist Enterprise Java sehr erfolgreich und das liegt sicher zu einem großen Teil auch an diesen Frameworks, die inzwischen nicht mehr nur für sich selbst stehen sondern auf Enterprise Java insgesamt ausstrahlen.
In Java versuchten die großen Hersteller
1999 mit J2EE eine speziell für Enterprise gedachte Infrastruktur hochzuziehen, die zwar standard-basiert aber closed-source war. Die Standards wurde von
exklusiven Clubs aufgestellt, denen praktisch nur große Enterprise Anbieter ausser Microsoft (IBM, Oracle, Sun) und ein Spezialist für transaktionale, verteilte Systeme (BEA), eine indische Softwarschmiede (Paramati), ein Hardwarehersteller mit großem Software Consulting Zweig (HP) sowie später auch ein unkonventionller openSource Wettbewerbe namens JBoss angehörten.
J2EE als "Lösung für die Zukunft" (IBM knows the future.
Geht das überhaupt?) wurde mit großen Marketing-Aufwand an die ungewaschenen Massen gepusht. Nur klaffte zwischen Anspruch und Wirklichkeit eine Lücke. Jede Marketing-Lüge hat ihre Kosten in Form von
unerfüllten Erwartungen. Die Kunden gaben ihren Frust natürlich teilweise an die hochbezahlten J2EE Programmierer/Designer/Architekten weiter.
Und dort begann eine Gegenreaktion. 2002 gab der in London arbeitende australische J2EE Entwickler/Architekt Rod Johnson ein Buch namens "J2EE: Design and Development" heraus, dass ich mir natürlich als bibliophiler J2EE noob sofort kaufte. Das Buch stellte sich als die große Überraschung heraus. Der erklärte nicht J2EE. Der dachte J2EE. Es war damals für mich nicht einfach nachzuvollziehen. Aber es liess nur einen Schluß zu: Da begründete einer
warum 20% von J2EE gut und 80% Scheisse äh deutlich besser ginge. Dieses Buch stiess nicht nur bei Noobs wie mir auf Interesse, sondern auch unter sehr erfahrenen Java Enterprise Programmierern. Die begannen dann mit Rod Johnson ein openSource Projekt namens Spring-Framework, dass die Ideen seiner Streitschrift umsetzte. Und zwar basierend auf der bereits vorhandenen Beispielanwendung des Buchs. Stark beteiligt war hier übrigens der Österreicher Jürgen Höller.
Fast gleichzeitig behauptete ein anderer Australier namens Gavin King, dass er in seiner Freizeit ein funktionierendes Framework für eins der schwierigsten Probleme für Enterprise Java (
dem Mapping von Objektstrukturen auf Relationalen Datenbanken) namens Hibernate (Deutsch: Winterschlaf) entwickelt hat. Auch er fand starkes Interesse von erfahrenen und unerfahrenen Java Entwicklern. Gemeinsam mit dem Frankfurter Christian Bauer schrieb er ein Buch namens "Hibernate in Action" für Manning.
Spring und Hibernate wurden
in der Folge massenhaft von J2EE-frustrierten Java Enterprise Kunden wie Banken und Versicherungen
verwendet. Irgendwann 2004/2005 gabs im Internet downloadbare Vorträge von Rod Johnson und Gavin King, in dem beide mit mehr oder weniger starkem australischen Akzent erstmal eine Liste von Organisationen herunterrasselten, die ihr Zeugs benutzen (inzwischen 100% der top 10 Banken und 80% der top 20 oder so sind Spring user).
J2EE mußte deutlich reformiert werden. Gavin King wurde wichtiges Mitglied der Standardisierungsgremien und Spring hatte zumindest einen starken Einfluß. EJB3 erinnert in vielem stark an Hibernate. IBM hat auf Developerworks eine größere Serie zu Spring veröffentlicht. Webspere Application Server Community Edition aka Geronimo
ist eine Spring-Anwendung. Bea Weblogic benutzt Spring sehr stark. Gavin King arbeitet für JBoss. Die EJB3 Implementierung von JBoss basiert auf Hibernate. Rod Johnson und Jürgen Höller gründeten die Consulting Interface21 zur Vermarktung von Spring-Consulting. Spring kann sowieso auch für J2EE Anwendungen benutzt werden. Viele J2EE AppServer Hersteller arbeiten sogar mit Interface21 zusammen, um die Integrationsmöglichkeiten noch besser zu machen.
Ich empfehle stärker denn je auch relativen Anfängern,
sich mit diesem Zeugs zu beschäftigen. Anfangen sollte man nicht mit den beiden großen Werken (der Nachfolger von "Winterschlaf in Action", "Java Persistence with Hibernate" von Bauer, King und "Professional Java Development with the Spring Framework" von Johnson, Höller, Arendsen, Risberg, Sampaleanu). Die kann man sich bei Interesse unbedingt später kaufen, weil es sind unglaublich spannende Bücher. Es gibt heute
wesentlich kürzere und auch in Deutsch geschriebene. Die bringen einen schneller dazu, wirklichen Code auszuprobieren.
Beide Frameworks erfordern eine Menge
konzeptionelles Mitdenken im Bereich Enterprise IT. ORM Mapping (Hibernate), Inversion Of Control (Spring), Aspekt-Orientierung(Spring) dürften für alle Leute, die nicht zufällig in den letzten 5 Jahren Informatik studiert haben oder bereits bekehrt sind, neu sein. Es tut am Anfang ein bischen weh, aber wenn man sich dann in Zukunft
tausende von Zeilen selbstgedrehten und fehleranfälligen Code sparen kann. Es lohnt sich. Framework heisst übrigens, dass man ein paar (ok: sehr viele) Zusatz jars von Hibernate/Spring in seinem Projekt hat. Nicht dass man selbst in diesen Hibernate/Spring Code reinschreibt.
Man nutzt das nur und verändert das nicht.
Die sehr günstige (ca. 80$) Plug-in Sammlung
myEclipse hilft auch ein bischen. Da gibts sehr einfache Praxis-Tutorial mit Tool Unterstützung. Der generierte Code ist aber aus meiner Sicht nicht der Weisheit letzter Schluß. Da sind die downloadbaren Beispielanwendungen der Bücher deutlich realistischer. Aber um überhaupt anzufangen... Für bestimmte Zwecke sind die plug-ins von myEclipse auch eine gewisse Hilfe, auch wenn man bestimmte Dinge nicht nutzt.
Hibernate und Spring sind
non-intrusiv. D.h.: Sie machen ihre Arbeit gut und lassen einen ansonsten in Ruhe. Man kann also normal Java programmieren, ohne dass man sich mit 120 Spezial Regeln auskennen muß, die Enterprise Java Beans vor EJB3 von normalen Java Klassen unterscheiden.
Beide Frameworks haben unter
www.springframework.org und hibernate.org gute
Online Dokumentationen, Wikis, Foren, etc. Audielle und Visuelle Präsentationen:
Rod Johnson (2005) Spring:
http://www.javapolis.com/confluence/display/JP05/Spring+Update(audio über direkten Link, empfehle aber die Gratis-Registrierung auf der Java-Polis Seite. Da gibts das visuell).
Sprache: Australisch.
Gavin King, Christian Bauer (2004): Hibernate ->
http://www.ajug.org/meetings/download/200401AJUG16k.mp3(Vorsicht: nicht so einfach zu folgen. Sprache: Englisch mit australischen Akzent, Englisch mit sehr leichten deutschen Akzent)
Gruß Axel