JAXenter.de

Das Portal für Java, Architektur, Cloud & Agile
X

Wieviel Cyborg steckt jetzt schon im Menschen? Die webinale VISIONS klärt auf.

Die Flinke Feder

Commonismus

Bernd Fondermann

Ein Entwickler, der möchte, dass sein Code größtmögliche Benutzung erfährt, was müsste der tun? Eine mögliche Antwort darauf möchte ich heute geben. Doch zuerst ein Rückblick.

Als Java zuerst erschien, kam eine riesige Sammlung von vorgefertigten Java-Klassen gleich mit: das JDK [1]. Es war ein Alleinstellungsmerkmal zu diesem Zeitpunkt, so etwas hatte in dieser Form keine andere Programmierumgebung. Das JDK hatte eigentlich alles, was man wollte. Und doch ist es bis heute massiv gewachsen, und unter den mehr als 3700 Klassen (im JDK 6) sind auch manche, die man nicht braucht, oder von denen man nur noch nicht weiß, dass man sie vielleicht irgendwann einmal benötigen könnte. Trotz der schieren Größe des JDK gab es von Anfang an inoffizielle Erweiterungen des JDK aus der Utility-Kategorie. Und keine findet so weite Verbreitung wie die kleinen Helferchen aus Apache Commons [2] oder das ebenfalls sehr nützliche Google Collections API [3].

Abhängigkeiten zu einem Commons-Projekt finden sich in einer riesigen Anzahl von Java-Software auf dieser Erde. Und diese Abhängigkeiten sind transient: Wenn Ihre Software das Spring Framework benutzt oder auf dem Apache Tomcat läuft, dann nutzen Sie auch die Commons-Bibliotheken, die von diesen Paketen angezogen werden. Commons wird auf dem Server genutzt (Commons Daemon), auf dem Client (Commons CLI), beim Entwickeln (BSP) und beim Betreiben (Commons Exec) von Software. Paketen wie Commons Lang, Commons IO oder Commons Collection entkommt man nur schwer, egal in welchem Java-Einsatzgebiet.

Commons nimmt unter den Java-Projekten bei Apache eine Sonderstellung ein. Denn jeder Apache Committer, egal aus welchem Projekt er kommt, hat sofort ganz einfach Zugang zu einer Commons Sandbox [4], in der er seine eigenen im JDK oder anderswo vermissten Funktionen als Open Source zur Verfügung stellen kann. Und doch ist der Kreis der aktiven Commons-Entwickler recht klein. Das führt einerseits dazu, dass bestehende Pakete nur zaghaft weiterentwickelt werden. Einige sind mittlerweile obsolet [5], weil ihre Funktionalität von anderen Libs oder dem JDK besser abgebildet wird. Commons-Projekte sind auch ein guter Einstiegspunkt für neue Open-Source-Entwickler. Die Projekte sind gut überschaubar, die Anwendungsfälle meist universell, gut zugänglich und testbar. Und wer seine eigene Reputation daran misst, wie weit verbreitet sein eigener Code ist, der ist bei Commons auf jeden Fall richtig.

Leider trägt das eine oder andere noch heute brauchbare Commons-Projekt sichtbare Spuren von Patina. Das ist sicher auch der Tradition geschuldet, (zu?) sehr auf Rückwärtskompatibilität zu achten und JDK teilweise bis runter zu JDK 1.2 zu unterstützen. Immer mehr Commons-Tools "wagen" jedoch den Sprung in die Gegenwart - oder zumindest die noch nicht allzu ferne Vergangenheit - indem sie JDK 1.5 voraussetzen und damit die Tür öffnen für Generics, enums und Co. Wer kann sich heute noch vorstellen, ohne diese Sprachfeatures Java zu programmieren?

Eine Liste ausgewählter Releases der letzten Zeit zeigt Tabelle 1. Daraus wird auch ersichtlich, wie dicht teilweise die Veröffentlichungen beieinander liegen. Vielleicht ist es eine Gelegenheit, in die eigenen Projekte zu schauen und die darin befindlichen Commons-Abhängigkeiten aufzufrischen.

Tabelle 1: Commons-Releases aus dem Jahre 2010

Commons-Projekt Release-Datum Neuerungen
DBCP 1.3 und 1.4 15.02.10 Unterstützung für JDBC 4, Fehlerbehebung
Math 2.1 04.04.10 Wartung, kleinere neue Features, Verbesserungen
JEXL 2.0.1 07.04.10 Hotfixes
Lang 3.0 Beta 03.08.10 Major, Java5
FileUpload 1.2.2 05.08.10 Fehlerbehebung
Compress 1.1 23.08.10 Improvements
Pools 1.5.5 10.09.10 Bugfixes
Digester 2.1 25.09.10 Wechsel auf Java 1.5
IO 2.0 23.10.10 Enhancement + Bugfixes,
Wechsel von Java 1.3 auf 1.5
Exec 1.1 24.10.10 Fehlerbehebung, JDK1.3
Daemon 1.0.4 25.10.10 Fehlerbehebung

Besonders interessant ist die Entwicklung beim nahenden Commons Lang 3.0, derzeit in der Betaphase befindlich. Dort sind die Änderungen so weitgehend und damit die Inkombatibilitäten so groß, dass sich die Entwickler entschlossen haben, die bestehende Funktionalität praktisch in ein komplett neues API unter org.apache.commons.lang3 zu portieren und dort auf Java 5 zu trimmen. Damit kann das alte und neue Commons Lang prima nebeneinander verwendet werden und verträgt sich auch weiterhin mit älteren Drittanbieter-JARs, deren Quellcode man nicht unter Kontrolle hat. Dies entspricht ja auch der guten Java-Tradition, alte Zöpfe möglichst vorsichtig abzuschneiden. Dazu gehört beispielsweise die enum-Funktionalität. enums sind ein Java-Sprachfeature und deshalb läuft das Commons-Lang-Hilfskonstrukt nun aus und ist folgerichtig als deprecated gekennzeichnet. Gleiches gilt für Nested Exceptions, die es seit Version 1.4 in Java gibt.

Das beliebteste Package von Commons Lang dürfte das Oberpackage org.apache.commons.lang3 selber sein. Neben dem Klassiker StringUtils finden sich unzählige Werkzeuge, die sich wie ein Schweizer Messer auffächern für Locales, Introspection, Serialisierung, JDK-Versions-Abfrage, Encoding u. v. m. Darunter ist StringEscapeUtils besonders empfehlenswert. In vielen Webprojekten finden sich Eigengebräue, die meist unvollständig oder fehlerhaft sind. Neu in Lang3 ist die Klasse Pair<L,R>, die ich persönlich schon mehr als einmal selbst implementiert habe und die im JDK fehlt, neben anderen Tupel-Klassen. Und in der Tat: Beim Durchschauen der Lang3-Klassen hat man öfters den Aha-Effekt "Ach das gibt's hier auch?!". Und was noch fehlt, kann man jederzeit selbst zum Projekt besteuern. Contributions welcome!

Bernd Fondermann (bernd.fondermann[at]brainlounge.de) ist freiberuflicher Softwarearchitekt und Consultant in Frankfurt a. M. Er beschäftigt sich mit innovativen Open-Source-Technologien wie Apache Hadoop und Lucene und ist Member der Apache Software Foundation und Vice President Apache Labs.
 

Kommentare

Ihr Kommentar zum Thema

Als Gast kommentieren:

Gastkommentare werden nach redaktioneller Prüfung freigegeben (bitte Policy beachten).