03-2013 | Herbst | www. ijug.eu Technik allein

bringt Sie nicht weiter. aktuell JavaPraxis. Wissen. Networking. Das Magazin für Entwickler Man muss wissen, wie man sie richtig nutzt. trägt Früchte aktuell

Neue Technologie Java-API für Batch-Anwendungen, Seite 8

Java Entwicklungsstrategien Software modular aufbauen, Seite 19 Mehr selbst entwickeln, Seite 23

Web-Entwicklung Das Web als Social Network, Seite 32 Neu: Wicket 6, Seite 40

Java und Oracle ADF Essential Mobile, Seite 52 : 4,90 EUR EUR 4,90 D: EUR A: 5,60 CHF 9,80 CH: Benelux: EUR 5,80 ISSN 2191-6977

Trivadis ist das führende Unternehmen für IT-Beratung, Systemintegration und IT-Services mit Fokussierung auf Oracle- und Microsoft-Technologien. Unsere Leistungen erbringen wir aus den strategischen Geschäftsfel- dern Application Development, Business Intelligence, Infrastructure Engineering und Training. Darüber hinaus

übernimmt die Trivadis Services den korrespondierenden Betrieb Ihrer IT Systeme. Sprechen Sie mit uns iii über Ihre IT-Lösungen und vor allem: welchen Nutzen wir Ihnen bringen. www.trivadis.com. iii iiiiii iJUG Trivadis Holding AG Europa-Strasse 5 CH-8152 Glattbrugg Telefon +41 4480870-20 www.trivadis.com [email protected] Verbund

03/2013 - 2013 05 08 - Java aktuell Titel - Druck.indd 1 15.05.13 15:58 DOAG 2013 Development 19. Juni 2013, Bonn

Eine Konferenz für den Erfahrungsaustausch von Software-Entwicklern

Themen: • DB Programmierung: PL/SQL, APEX, Spatial • BPM & Software-Architektur • Java & Open Source • Forms, Reports, ADF und BI Publisher

Aussteller:

Im Fokus: Agile and Beyond – Projektmanagement in der Oracle-Software-Entwicklung Wohin geht die Reise? (Part Two)

http://development.doag.org

2013_05_14_A4_Eigenanzeige_Development.indd 1 14.05.13 10:18

iii iii iiiiii www.ijug.eu

Wolfgang Taschner Chefredakteur Java aktuell

99 Flaschen Bier

Die Website „http://99-bottles-of-beer.net“ basiert auf einer Idee von Tim Robinson. Er begann in den 1990er Jahren, den Text des in Amerika beliebten Lieds „99 Bottles of Beer“ in der damals populären Programmiersprache BASIC umzusetzen. Frei übersetzt lautet der Text: „99 Flaschen Bier an der Wand, nimm´ eine herunter und reich´ sie herum, dann sind noch 98 Flaschen Bier an der Wand. 98 Flaschen Bier an der Wand, nimm´ eine herunter …“ Das geht so lange, bis alle Flaschen heruntergenommen sind. Bei null angekommen, lautet die Strophe: „Keine Flaschen Bier mehr an der Wand, geh´ in den Laden und kauf´ neue, dann sind 99 Flaschen Bier an der Wand.“ Dann beginnt wieder alles von vorn. Der relativ einfache Algorithmus hat im Lauf der Jahre zahlreiche Programmierer angespornt – mittlerweile ist das Lied in mehr als 1.500 verschiedenen Programmiersprachen codiert und auf der Website abgelegt worden. Das Spektrum beginnt bei „A+“ und endet bei „ZZT“. Schon das Schmökern unter den vielen Sprachen ist sehr kurzweilig, allein wenn man den Unterschied zwischen Uralt-Sprachen wie „Cobol“ oder dem „Assembler für 8080“ und den modernen Sprachen betrachtet. Jeder Besucher der Website kann jede Sprache bewerten und kommentieren. Im Top-Ranking der am besten bewerteten Sprachen sind auf den ersten 25 Plätzen immerhin „Clujure“ und „Ruby“ vertreten. „Java“ ist natürlich auch unter den 1.500 Sprachen dabei. Die zahlreichen Kommentare zum veröffentlichten Java-Code zeigen, wie sich die Sprache weiterentwickelt hat und wie man das Programm für das Lied unter den verschiedensten Aspekten angehen kann. Auch in dieser Ausgabe der Java aktuell möchte ich Ihnen eine große Bandbreite an Themen vorstellen, die alle mit Java zu tun haben. Ich hoffe, dass der eine oder andere Artikel Ihnen bei Ihren Projekten hilft, und freue mich wie immer auch über Ihr Feedback an redak- [email protected].

Ihr

Trainings für Java / Java EE Wissen wie´s geht ® • Java Grundlagen- und Expertenkurse Unsere Schulungen können gerne aformatikƒ • Java EE: Web-Entwicklung & EJB auf Ihre individuellen Anforderungen angepasst und erweitert werden. • JSF, JPA, Spring, Struts aformatik Training & Consulting GmbH & Co. KG • Eclipse, Open Source Weitere Themen und Informationen Tilsiter Str. 6 | 71065 Sindelfingen | 07031 238070 zu unserem Schulungs- und • IBM WebSphere, Portal und RAD Beratungsangebot finden Sie • Host-Grundlagen für Java Entwickler unter www.aformatik.de www.aformatik.de

Java aktuell 3-2013 | 3 Inhalt

3 Editorial 55 Performance-Falle beim Logging: 63 Integration von Java via JNI in traditi- Die Zeitstempel-Formatierung onelle Cobol-Batch-Anwendungen Jürgen Lampe Marc Bauer und Martin Kiefer 5 Das Java-Tagebuch Andreas Badelt, Leiter der DOAG SIG Java 61 Unbekannte Kostbarkeiten des SDK 43 Unsere Inserenten Heute: Web-Services Bernd Müller 66 Impressum 8 Java-API für Batch-Anwendungen Peter Doschkinow

11 Skalierbare Cluster-Topologien mit dem JBoss AS 7 Heinz Wilming und Immanuel Sims

15 Lightweight AOP mit CDI und JPA Prof. Dr. Michael Helbig

19 Software modular bauen Ulf Fildebrandt

23 Software – weniger kaufen, mehr bauen Erik Dörnenburg

27 Diagramm-Bibliotheken für Android Falko Krische

32 WebID: Das Web als Social Network Angelo Veltens

37 Vermittlungsinstanzen sind gefragt Tobias Hartwig

40 Anspruchsvolle Web-Anwendungen Ein Lastverteiler sorgt dafür, dass Lastverteilung und Failover nur innerhalb eines Subclusters mit Wicket 6 stattfinden. Skalierbare Cluster-Topologien mit dem JBoss AS 7, Seite 11 Jochen Mader

44 „Java ist Grundlage für meine Software-Projekte …“ Interview mit Dirk Dittert

45 Nachgefragt … Uwe Sauerbrei

49 Den Rollladen steuern mit Pi René Jahn

52 ADF Essentials Mobile – Ein unlös­ bares Problem? Markus Klenke

Wer auf keine Funktion verzichten möchte und schon immer von einer eigenen Rollladensteuerung träumte, findet hier eine Anleitung für den Raspberry Pi, Seite 49

4 |

iii iii iiiiii www.ijug.eu

Das Java-Tagebuch

Andreas Badelt, Leiter der DOAG SIG Java

Das Java-Tagebuch gibt einen Überblick über die wichtigsten Geschehnisse rund um Java – in kompri- mierter Form und chronologisch geordnet. Der vorliegende Teil widmet sich den Ereignissen im ersten Quartal 2013. von Java EE 7 verpasst. Die Expertengrup- werden konnten, hatte Oracle bereits ange- 21. Januar 2013 pen der beiden Specification Requests ha- kündigt, schnell nachzubessern. Das ist nun ben das gemeinsam entschieden, da JCache geschehen, damit stehen wir bei SE 7 Up- Java-Frameworks beeinflussen laut CAST die zuletzt einige Termine verpasst habe und date 15 beziehungsweise SE 6 Update 41. Software-Qualität offensichtlich noch viel zu tun sei. Die Ar- CAST Research on Application Software beit soll jedoch zügig weitergehen, sodass Health (CAST) hat einen neuen „CRASH“- JCache dann bald als „drop-in“-API genutzt 22. Februar 2013 Report veröffentlicht, in dem der Einfluss werden kann und auf jeden Fall in Java EE von Frameworks auf die Qualität von Soft- 8 aufgenommen wird, siehe https://blogs. Der Name „Sun“ verschwindet Stück für Stück ware untersucht wurde. Begutachtet wur- oracle.com/theaquarium/entry/jcache_to_ Wer schon mal mit Legacy Code gearbei- den 496 Anwendungen mit 152 Millionen miss_java_ee tet hat, weiß, wie hartnäckig sich Namen Codezeilen von 88 Organisationen aus von Firmen darin halten, die längst nichts sechs verschiedenen Branchen; per Daten- mehr mit dem Code zu tun haben oder gar Analyse wurden unter anderem die Unter- 1. Februar 2013 nicht mehr existieren, etwa als Package- schiede zwischen der Nutzung von Struts, Namen. Ein gutes Beispiel ist der Name der Hibernate und Spring herausgeschält. Nicht Critical Patch Update für Java SE schon da Firma, die Java herausgebracht hat, richtig: überraschend wird festgestellt, dass das Das neue Critical Patch Update (SE 7 Up- „Sun“. Stück für Stück scheint er nun zu Mischen von Java beispielsweise mit C und date 13 beziehungsweise SE 6 Update 39) verschwinden − diesmal sind die Name- C++ die Qualität im Durchschnitt mindert − ist früher als geplant herausgekommen spaces in den Java-EE-7- dran. Den eher überraschend steigt sie aber bei einem − offensichtlich unter dem Druck der Si- immer noch zahlreichen Sun-Fans lässt das Mix etwa mit COBOL oder .NET. Die Nut- cherheitslücken mit aktiven Exploits, die bestimmt das Herz bluten: https://blogs. zung von Struts wiederum führt laut Stu- viele Firmen und Benutzer dazu veranlasst oracle.com/theaquarium/entry/java_ee_ die eher zu geringerer, die von Hibernate haben, Java im Browser zu deaktivieren be- schema_namespace_moved eher zu höherer Qualität. Framework-Kom- ziehungsweise gleich ganz zu deinstallie- plexität in Kombination mit mangelndem ren. Der iJUG hatte über die Lücken berich- Training soll hier die Schuld tragen − für tet und versucht, die Diskussionen etwas zu 27. Februar 2013 diese Aussage allein hätte man aber sicher versachlichen: http://www.ijug.eu/index. keine große Studie benötigt. Das Highlight ?id=1399 „Adopt a JSR“-Organisation macht Fortschritte für alle alten, neuen und wiedergewonnen Im Januar gab es bereits ein erfolgreiches Fans von Java EE: Die Nutzung von purem Online-Meeting zu „Adopt a JSR“ mit JUG- Java EE ohne andere Sprachen und Frame- 19. Februar 2013 Repräsentanten. Dazu wurde jetzt ein works führt zu den höchsten Qualitätswer- Follow-up gehalten, in dem es speziell um ten. Für alle, die neugierig geworden sind Java EE 7 Maven Repository Coordinates Tipps für „Hackdays“ und ihre erfolgreiche − die Studie kann bezogen werden unter Wer mit Maven arbeitet und schon mal die Gestaltung zum Wohle eines JSR ging. Mit- http://www.castsoftware.com/news- neuen Java-EE-7-APIs benutzen möchte, te Februar 2013 gab es darüber hinaus ein events/press-release/press-releases/cast- wird sich sicher über den GlassFish-Wiki-Ein- Meeting für die JSR-Spec-Leads, um ihnen research-finds-java-frameworks-strongly- trag mit den aktuellen Maven-Koordinaten den Sinn des Programms zu erklären und influence-security-reliability dieser APIs freuen, auf den Oracle-Blogger wie sie die Zusammenarbeit mit den JUGs Reza Rahman dankenswerterweise verwie- gestalten und nutzen können. Insgesamt sen hat: http://wikis.oracle.com/display/ scheint das Programm mehr und mehr 31. Januar 2013 GlassFish/Java+EE+7+Maven+Coordinates Fahrt aufzunehmen und sich immer besser zu organisieren. Treffen verpasst oder gene- JCache nicht in Java EE 7 Schon wieder ein Critical Patch Update rell neugierig, was dort besprochen wurde? JCache, der inzwischen wieder aktive JSR Da das CPU vom 1. Februar 2013 immer Dann hilft das Multimedia-Archiv des JCP. 107 (gestartet vor mehr als zwölf Jahren!), noch bekannte kritische Lücken offengelas- Dort finden sich Tonaufnahmen und Folien: hat leider den Sprung unter den Schirm sen hatte, die nicht rechtzeitig geschlossen http://jcp.org/en/resources/multimedia

Java aktuell 3-2013 | 5 Tagebuch

Zum (fast) gleichen Thema gibt es am Bayerischen Landesamts für Steuern sagte kündigt, dass CloudStack den „Inkubator“ selben Tag einen Blog-Eintrag von Arun gegenüber Heise Online: „Die aktuelle Dis- verlässt und in Zukunft als Top-Level-Pro- Gupta, in dem aufgelistet wird, wie sich die kussion über Java hat die Steuerverwaltung jekt geführt wird. CloudStack, eine Soft- Java-EE-7-JSRs beim Thema „Transparenz“, veranlasst, nach Lösungen zu suchen, die ware zum Aufsetzen von „Infrastructure wie vom Java Community Process seit Ver- die Nutzung des ElsterOnline-Portals kurz- as a Service“-Lösungen, war vor knapp sion 2.8 gefordert, und bei der Beteiligung fristig auch ohne Java zulassen, ohne auf einem Jahr von Citrix an die Apache Soft- der Community schlagen. Laut Gupta sind die Nutzung von sicherer Zertifikatstechno- ware Foundation übergeben worden und die Transparenz-Vorgaben von allen JSRs logie verzichten zu müssen.“ Das klingt ein wird dort weiter von Citrix-Mitarbeitern, vollständig eingehalten. Darüber hinaus bisschen so, als ob nun schnell das Kind mit aber auch einem großen und wachsenden gibt es bei den meisten JSRs eine sehr star- dem Bade ausgeschüttet werden soll − wir Stamm von freien Unterstützern als Open- ke Beteiligung von Java User Groups bezie- warten gespannt auf die Alternativen. Source-Projekt weitergeführt, https://blogs. hungsweise generell aus der Community. apache.org/foundation/entry/the_apache_ Natürlich sind auch die JSRs beziehungs- software_foundation_announces40 weise ihre Spec Leads darauf angewiesen, 7. März 2013 dass ihr Thema auf möglichst viel Begeiste- rung stößt. Da hat sicher nicht jeder JSR die Red Hat übernimmt Projektleitung für das OpenJDK 6 4. April 2013 gleichen Voraussetzungen, aber natürlich Der offizielle Support für das OpenJDK 6 ist sollte ein Spec Lead auch in der Lage sein, ausgelaufen, Bugfixes soll es nur noch für Java EE 7 kurz vor dem Ziel und weitere JSR Updates Begeisterung zu wecken: https://blogs. kommerzielle Varianten geben. Jetzt springt Das gesammelte JSR-Update für Februar oracle.com/arungupta/entry/transpa- allerdings Red Hat in die Bresche und über- und März ist auf „blogs.oracle.com“ ver- rency_and_community_participation_in nimmt laut einer Presseerklärung eine füh- öffentlicht worden und zeigt jede Menge rende Rolle im OpenJDK-6-Projekt. Was das Bewegung. Der Java-EE-7-Umbrella-JSR so- im Detail bedeutet, wird nicht erklärt, aber wie viele der darauf referenzierten zu ak- 5. März 2013 es geht um „erweiterten Support für die tualisierenden JSRs wie JAX-RS 2.0 und JSF Technologie und ihre Nutzer“, was vor dem 2.2 sind in den vergangenen Tagen jeweils Weiterer Security Patch für Java mit mäßigem Erfolg Hintergrund der jüngst entdeckten Sicher- als „Proposed Final Draft“ veröffentlicht Oracle hat einen weiteren Security Patch heitslücken sehr wichtig ist. Red Hat nutzt worden. Über sie wird in den nächsten Wo- für Java SE herausgebracht. Wie Heise On- den sich bietenden Raum, um sich einen chen abgestimmt. Daneben gab es noch line meldet, hat der polnische Sicherheits- Namen als verlässlicher Partner im Java- eine Reihe von „Maintenance Reviews“, experte Adam Gowdiak, der Oracle bereits Ökosystem zu machen. SE-6-Nutzer, die etwa für JCA 1.6 und EJB 3.1, „Early Draft auf mehrere Lücken hingewiesen hat, wei- noch nicht auf SE 7 umstellen können oder Reviews“ für die zwei Java-SE-Spezifika- terhin Probleme in der neuesten Version wollen, haben damit weiterhin kostenlosen tionen „Lambda Expressions“ und „Anno- feststellen können, http://www.heise.de/ Support, wenn sie das OpenJDK verwenden. tations on Java Types“ sowie einen neu- open/meldung/Java-trotz-Notfall-Patch- en JSR „Portlet Specification 3.0“, https:// verwundbar-1815992.html blogs.oracle.com/jcp/entry/jsr_updates11 22. März 2013 7. März 2013 TomEE − der Retter von Java EE? 8. April 2013 In einem InfoWorld-Artikel wird Apache Tom­ Von Elstern und gestohlenen Schlüsseln EE als Retter des „in der Zeit eingefrorenen“ Oracle by Example: Neue Trainings unter anderem zu Im Zusammenhang mit den Security Pat- Java EE beschrieben, mit Zitaten von David Java SE 8 Lambda Expressions ches für Java SE passen zwei weitere Mel- Blevins, dem Gründer des Projekts. Dieser Es gibt inzwischen jede Menge freie Trai- dungen von Heise Online: Erstens, dass bei antwortet in seinem Blog prompt, dass Java nings zu Java auf der Oracle-Webseite, Java die Prüfung auf zurückgezogene Zerti- EE keine Rettung benötige, sondern sich mit etwa zu Lambda Expressions. Das volle Pro- fikate nicht standardmäßig aktiviert ist. Da- EE 6 und der ersten öffentlich entwickelten gramm lässt sich abrufen unter http://www. für mag es Gründe geben, denn die Prüfung Spezifikation EE 7 ausgesprochen gut ent- oracle.com/goto/oll erfordert einen Netz-Zugriff. Aber wenn ein wickle. Die Hauptmotivation für Tom­EE liege Zertifikat etwa aufgrund eines gestohlenen darin, die alte Frage „Tomcat oder Java EE?“ privaten Schlüssels zurückgezogen wird, überflüssig zu machen, http://blog.dblevins. 9. April 2013 sollte das JRE damit signierte Applets nicht com/2013/03/saving-java-ee. mehr akzeptieren und zwar bei allen Nut- Apache Struts 1 ist „End of Life“ zern, nicht nur bei denjenigen, die die Prü- Apache Struts 1 ist von Apache offiziell be- fung manuell aktivieren. Zweitens haben 25. März 2013 endet worden. Immerhin war es dreizehn die ganzen Diskussionen um die Sicherheit lange Jahre aktiv und eines der ältesten inzwischen sogar die Steuerverwaltung Apache CloudStack wird Top-Level-Projekt Projekte der Apache Software Foundati- geweckt: Ein Sprecher des zuständigen Die Apache Software Foundation hat ange- on. Allerdings liegt das letzte Release auch

6 |

iii iii iiiiii www.ijug.eu

schon fünf Jahre zurück. Der Nachfolger light/entry/java_spotlight_episode_125_ gute Idee sei. Weihnachten in Deutschland Struts 2 ist jedoch weiterhin aktiv, https:// terrence ist in der Regel kürzer, aber vielleicht ist es blogs.apache.org/foundation/entry/me- ja auch nur ein willkommener Grund, noch dia_alert_the_apache_struts ein paar Wochen extra herauszuholen. 17. April 2013 Wenn es denn der Qualität dient … http:// mreinhold.org/blog/secure-the-train 10. April 2013 Oracle stopft weitere Sicherheitslücken Mit dem Update 21 für Java SE 7 (und Up- Maven-Archetyp für Java EE 7 date 25 für SE 6) werden nicht nur Fehler 26. April 2013 Eine weitere Erleichterung für Maven-Nut- im Code behoben, sondern auch einige zer, die schon mit der Java-EE-7-Spezifikati- Dinge generell geändert: Im Java Control Java EE 8 verzögert on arbeiten möchten, ist ein Archetyp, mit Panel gibt es die Sicherheitsstufen „nied- Wie erwartet kündigt Mark Reinhold eine dem neue EE-7-Projekte in der richtigen rig“ und „benutzerdefiniert“ nicht mehr. gute Woche nach seinem Vorschlag zur Ver- Struktur automatisch angelegt werden In Abhängigkeit von der gewählten Stufe schiebung des Java SE 8 Release an, dass können, https://blogs.oracle.com/theaqua- und der Aktualität des JRE laufen Applets diese Variante angenommen wurde. Das rium/entry/java_ee_7_maven_archetypes gegebenenfalls gar nicht mehr. Betroffen neue Release-Datum ist also der 18. März sind diese, die unsigniert beziehungswei- 2014, http://mreinhold.org/blog/hold-the- se mit einem Zertifikat signiert sind, das train 12. April 2013 nicht von einer akzeptierten „Certificate Authority“ bestätigt ist. Die Sicherheitsdia- OpenJDK: Freie Mitglieder des Governing Board loge wurden überarbeitet und die Risiken 30. April 2013 wiedergewählt besser herausgestellt. Der Nutzer muss bei Andrew Haley (Red Hat) und Prof. Doug Lea steigendem Risiko auch mehr tun, um dies JSR Updates (State University of New York) sind beide als zu akzeptieren. Außerdem gibt es jetzt ein Noch ein Update vom JCP: Insgesamt 14 freie („at-large“) Mitglieder des OpenJDK Server-JRE, das kein Java-Plug-in, kein Au- Java-EE-7-JSRs haben in den letzten Wo- Governing Board wiedergewählt worden. to-Update und keinen Installer beinhaltet, chen den „EC Final Approval Ballot“ be- Sie ergänzen damit weiterhin die anderen http://www.ijug.eu/home-ijug/aktuelle- standen und werden nun als finalisierte von Oracle („Chair“ George Saab, „Lead“ news/article/java-7-update-21-foerdert- Releases (Spezifikation, Referenz-Imple- Mark Reinhold) und IBM („Vice-Chair“ John signierte-applets.html mentierung, Test Compatibility Kit) auf jcp. Duimovich) nominierten Board-Mitglieder org veröffentlichen. Hier scheint es also als Vertreter der Community. Wahlberech- keine weiteren Verzögerungen zu geben, tigt waren alle zu Beginn der Wahlperiode 18. April 2013 https://blogs.oracle.com/jcp/entry/jsr_up- im OpenJDK-Projekt vertretenen Mitglieder. dates_april_15 Das sind allerdings nur wenig mehr als hun- Java EE 8: Vorschlag zur Verschiebung dert, hier kann sich die Java-Community Nicht zum ersten Mal muss Mark Reinhold sicher noch aktiver einbringen. Gegenkan- die unangenehme Nachricht verkünden, didaten gab es nicht, beide wurden einstim- dass dem „release train“ eine Verspätung mig bei jeweils drei Enthaltungen und 35 droht, diesmal für Java SE 8. Er begründet beziehungsweise 36 Ja-Stimmen gewählt. dies hauptsächlich mit der vermehrten Arbeit an Security Fixes und der generell gestiegenen Aufmerksamkeit für „siche- Andreas Badelt 15. April 2013 ren Code“, die auch zu Umstellungen im Leiter der DOAG SIG Java Entwicklungsprozess geführt hat. Damit Java ME 3.3 für ARM Cortex freigegeben hätten einige Features den Meilenstein 6 Für den Raspberry Pi steht die Java ME „feature complete“ Ende Januar 2014 nicht 3.3 Runtime erst als „early access“ zur Ver- einhalten können. Die Alternativen seien fügung. Für den weit verbreiteten ARM- nun, entweder den Zug ohne den promi- Cortex-M3-Prozessor hat Oracle jetzt die nentesten Passagier „Lambda Expressions“ Runtime-Version offiziell freigegeben („ge- weiterfahren zu lassen oder den Fahrplan neral availability“). Terrence Barr von Oracle anzupassen. Reinhold hält die Anpassung schreibt in seinem Blog, dass inoffiziell auch für die bessere Alternative. Sein Vorschlag, die M4-Version unterstützt wird. Für Em- den er an die offene Mailingliste des Open- bedded-Entwickler öffnet sich damit eine JDK schickt, sieht eine Verzögerung von Andreas Badelt ist Technology Architect bei Infosys Limited. Da- große Welt von Mikro-Prozessoren ohne einem halben Jahr vor − statt Anfang Sep- neben organisiert er seit 2001 ehrenamtlich die Special Interest Cross Compilation und ähnlich lästige tember 2013 dann Mitte März 2014, da Group (SIG) Development sowie die SIG Java der DOAG Deutsche Dinge, https://blogs.oracle.com/javaspot- ein Release um Weihnachten herum keine ORACLE-Anwendergruppe e.V.

Java aktuell 3-2013 | 7 Update

UPDATE An dieser Stelle erhalten Sie in jeder Ausgabe ein Update über das Geschehen in der Java-Community Java-API für Batch-Anwendungen

Peter Doschkinow, ORACLE Deutschland B.V. & Co. KG

Eines der neuen und lang ersehnten Features von Java EE 7 ist die Unterstützung von Batch- Anwendungen. Im Rahmen der neuen Teilspezifikation JSR-352 werden die Entwicklung und der Betrieb von klassischen Batch-Applikationen auf der Java-Plattform vereinfacht und standardisiert. Der Artikel führt in die Konzepte und Möglichkeiten dieser neuen Technologie ein, die der Java-Entwickler bei der Implementierung von Batch-Prozessen nutzen kann.

Batch-Anwendungen gehören zu den ers- gestellt, etwa die Möglichkeit, den Lebens- tiert das Auslesen von Input-Daten, der ten Computer-Anwendungen, bei denen zyklus von Batch-Instanzen zu steuern, „ItemProcessor“ kapselt die Geschäftslogik Programme – auch „Jobs“ genannt – auto- zu stoppen und neu zu starten. JSR-352 zur Verarbeitung der Datensätze und der matisch und weitgehend ohne menschliche definiert eine Job Specification Language „ItemWriter“ repräsentiert die Ausgabe Intervention im Hintergrund ausgeführt als Domänen-spezifische Sprache, ein Java- der Ergebnisse. Ein „JobOperator“ ist die werden. Typischerweise werden dabei Programmiermodell und eine Laufzeitum- Schnittstelle zur Verwaltung aller Aspekte große Datenmengen mit oft hohen Anfor- gebung für Batch-Anwendungen für Java der Job-Verarbeitung mit Kommandos wie derungen an Computer-Ressourcen ver- SE und Java EE, die solchen Anforderungen „start“, „stop“ und „restart“ sowie zu „Job- arbeitet, wie automatisierte Transaktions- gerecht werden. Das Ziel ist, ähnlich wie bei Repository“, um Informationen über lau- Verarbeitung, Datenanalyse- oder „Extract anderen Java-Standards wie JPA und CDI, fende Jobs und Steps zu bekommen. Transform Load“-Data-Warehouse-Anwen- existierende Best-Practices für Batch-An- In JSR-352 gibt es zwei Arten von Steps: dungen (ETL). Batch-Anwendungen können wendungen zu konsolidieren und zu stan- „Chunk-Steps“ und „Batchlet-Steps“. Chunk- sequenziell, parallel, zeitgesteuert oder bei dardisieren. Nachfolgend sind die Hauptbe- Steps sind eine Variation des Step von Ab- Bedarf ausgeführt werden. Neben Online- standteile von JRS-352 kurz vorgestellt. bildung 1 und dienen zur effizienten Mas- Applikationen tragen sie durch unterschied- sen-Datenverarbeitung mit Unterstützung liche Priorisierung dazu bei, verfügbare Grundkonzepte und die Job-Sprache von Checkpoints. Sie implementieren das Rechenkapazitäten optimal auszunutzen. In den vergangenen Jahrzehnten hat sich am häufigsten genutzte Muster der Verar- Historisch bedingt ist der Löwen-Anteil von eine Referenz-Architektur für Batch-An- beitung in Datenblöcken: Datensätze wer- Batch-Anwendungen noch in Cobol ge- wendungen durchgesetzt, die sich in zahl- den einzeln ausgelesen und verarbeitet, in schrieben. Angesichts der Mächtigkeit der reichen Implementierungen auf verschie- Datenblöcken akkumuliert und in dersel- Java-Plattform, der vergleichbar günstigen denen Plattformen wie COBOL/Mainframe, ben Transaktion ausgegeben (siehe Abbil- Verfügbarkeit von Java-Know-how auf dem C++/Unix und in letzter Zeit Java/every- dung 2). Arbeitsmarkt und der häufigen Notwendig- where bewährt hat. Abbildung 1 zeigt eine Batchlet-Steps sind für Task-orientierte, keit zur Konsolidierung und Migration auf vereinfachte Darstellung. problemspezifische Steps gedacht, für die eine Plattform ist der Bedarf an Unterstüt- Ein Job wird durch die Job-Sprache eine Verarbeitung in Datenblöcken/Chunks zung von Batch-Verarbeitung in Java be- definiert und kapselt die gesamte Batch- nicht geeignet ist. Sie werden einmal aus- trächtlich. In der Java-Welt gibt es bisher nur Verarbeitung ein. Er besteht aus mehreren geführt, geben einen Exit-Status zurück proprietäre Lösungen dafür, etwa Spring Schritten („Steps“). Jeder Step kapselt eine und müssen einen Stop-Callback imple- Batch [2] oder WebSphere Batch [3]. Andere sequenzielle, unabhängige Verarbeitungs- mentieren, um gegebenenfalls vom Job- Alternativen wie BPMN-/BPEL-basierte Ab- einheit, die nach dem einfachen Muster Operator storniert zu werden. laufsteuerung haben einen anderen Fokus „Read Process Write“ ausgeführt wird und Die Job-Sprache, die in JSR-352 defi- und scheinen ein Overkill für das zentrale, als wiederverwendbare Einheit betrachtet niert wird, spezifiziert eine Batch-Anwen- aber einfache Read-Process-Write-Muster werden kann. Der „ItemReader“ repräsen- dung in der Form eines Jobs, seine Steps von Batch-Anwendungen zu sein, die auf die schnelle und effiziente Verarbeitung von Riesen-Datenmengen spezialisiert sind. Batch-Anwendungen haben gemeinsa- me Anforderungen wie die Unterstützung von Logging, Checkpoints und Parallelisie- rung. An ihre Laufzeitumgebung werden ebenfalls gemeinsame Anforderungen Abbildung 1: Vereinfachte Architektur für Batch-Anwendungen

8 |

iii iii iiiiii www.ijug.eu

narien der Job-Verarbeitung und der entsprechenden Koordination von Java- EE-Transaktionen, gewähltem Parallelisie- rungs-Modell und Checkpoint-Behand- lung in Chunk-Steps.

Programmiermodell Das Batch-Programmiermodell ist durch Interfaces und Java-Annotations be- schrieben, die den Kontrakt zwischen der Batch-Anwendung und der Batch-Runtime festlegen. Im Job „XML“ werden Artefakte referenziert, die einen Teil dieser Interfaces Abbildung 2: Ausführung eines Chunk-Step implementieren und zu Laufzeit von der Batch-Runtime instanziiert und genutzt und die Reihenfolge ihrer Ausführung. Sie 1 referenzieren die entsprechenden Java- werden. Bezogen auf das Job-XML-Beispiel ist in XML implementiert, hat ein zugrunde Implementierungsklassen. in Listing 1 bedeutet das, dass der Java- liegendes XML-Schema und wurde unter Alternativ zur Parallelisierung über Splits Entwickler jeweils eine Implementierung anderem von Spring Batch [2] inspiriert. Im unterstützt Job XML das gängige Partition- von „ItemReader“, „ItemProcessor“ und folgenden Job-XML-Beispiel werden neben Map-Reduce-Muster, das auch zu extremen „ItemWriter“ sowie drei Implementierun- den schon erwähnten Chunk- und Batchlet- Performance-Verbesserungen auf Multi- gen von „Batchlet“ liefern muss. Steps auch „Flows“ und „Splits“ demonst- Core-Systemen führen kann. Dabei werden Um die Verbindung zwischen referen- riert (siehe Listing 1). derselbe Step mehrfach instanziiert und zierten Namen und Implementierungs- Ein Flow definiert eine Reihenfolge von die einzelnen Step-Instanzen in separaten klassen herzustellen, kann entweder die Steps, die zusammen als eine Einheit aus- Threads gleichzeitig ausgeführt (Partition- CDI-Annotation „@Named“ oder die „batch. geführt werden, während ein Split eine Phase). Zu jeder Step-Instanz gibt es einen “-Konfigurationsdatei genutzt werden. Menge von Flows definiert, die gleichzei- „Collector“ und einen „Analyzer“, die bei Eine Implementierung des referenzierten tig ausgeführt werden. Jeder Flow läuft in ihrer Ausführung ihre Zwischen- und End- „MyItemProcessor“ könnte wie in Listing 2 einem separaten „Thread“. Ein Split endet, Ergebnisse sammeln (Map-Phase). aussehen und vom Eintrag in „batch.xml“ wenn alle enthaltenen Flows abgeschlos- Nach dem Ablauf aller Step-Instanzen begleitet werden (siehe Listing 3). Eine sen sind. Die Attribute „reader“, „writer“ aggregiert der Reducer die Einzel-Ergeb- konsequente Nutzung von CDI- und Java- und „processor“ im „Chunk“-Element von nisse zu einem Gesamt-Ergebnis (Redu- Annotations würde auch eine reine POJO- Chunk-Step „step1“ sowie das Attribut „ref“ cer-Phase). In [1], Abschnitt 11.3, gibt es Implementierung ohne Einträge in „batch. in den „Batchlet“-Elementen der Batchlet- eine sehr übersichtliche algorithmische xml“ ermöglichen (siehe Listing 4). Steps „step2“, „step3“ und „step4“ in Listing Beschreibung der unterschiedlichen Sze- Das Batch-Programmiermodell sieht mehrere Listener-Interfaces vor, die in der Batch-Anwendung als Interceptoren für die einzelnen Phasen ihrer Ausführung dienen können, wie „JobListener“, „StepLis- und „@JobContext“ sind CDI-Qualifier, die bei Verwendung mit „@Inject“ den Zugriff der Anwendung auf die Job- und Runtime- Informationen ermöglichen. Batch-Anwendungen benötigen kein spezielles Packaging-Format. Sie können im Standard-„jar“-Format oder in jedem ande- ren Archiv-Format gepackt werden, das von der Ziel-Plattform unterstützt wird, etwa als Web- oder EJB-Modul. Das Konfigurations- file „batch.xml“, das zur Auflösung der im Job XML referenzierten Artefakte dient, soll unter dem Standard-Verzeichnis „META-INF“ bei „jar“-Archiven und unter „WEB-INF/clas- Listing 1: Job-XML-Beispiel mit Split, Flows, Chunk- und Batchlet-Steps ses/META-INF“ bei Web-Archiven abgelegt

Java aktuell 3-2013 | 9 Update

public class MyProcessor implements ItemProcessor{ Die Spezifikation des Java-API für Batch- … Anwendungen ist momentan im Status @Override „Proposed Final Draft“, sodass noch mit ge- public MyOutputRecord processItem(MyInputRecord item){ //process item and return MyOutputRecord wissen API-Änderungen zu rechnen ist [1]. … Das Projekt ist unter „jbatch.java.net“ behei- } matet. Im Unterschied zu anderen JSRs fin- } det man dort noch kein separates Javadoc- Listing 2 Archiv – es kann jedoch vom RI-Archiv [4] extrahiert werden. Die JSR-352-Referenz- Implementierung ist bereits in aktuelle Builds von GlassFish 4.0 integriert. Java-EE- ... Evangelist Arun Gupta hat in seinem Blog bereits ein Batch-Anwendungsbeispiel Listing 3 veröffentlicht, das auf GlassFish 4.0 b78 läuft [5]. @Named(„MyItemProcessor“) @ItemProcessor Fazit public class MyProcessor { Die JSR-352-Spezifikation geht weit über … @ProcessItem die hier zusammengefassten Features hi- public MyOutputRecord processItem(MyInputRecord item){ naus und beschäftigt sich auch mit der //process item and return MyOutputRecord Vererbung von Jobs-, Steps- und Flow- … Elementen für ihre bessere Wiederverwen- } dung und mit einer ausführlichen Fehlerbe- } handlung. Sie ist ein wichtiger Meilenstein Listing 4 auf dem Weg zur Adaption und Migration von Batch-Anwendungen und zur standar- JobOperator jobOp = BatchRuntime.getJobOperator(); disierten Unterstützung ihrer spezifischen jobOp.start(„myJob“, myJobParameters); Anforderungen in der Java-Welt. Listing 5: Bootstrapping einer Batch-Anwendung Referenzen sein. Analog ist für Job-XML-Files das Ver- Die Batch-Runtime definiert auch Inter- [1] JSR-352, Batch Applications for the Java Platform: http://java.net/projects/jbatch/downloads/down- zeichnis „META-INF/batch-jobs“ vorgesehen. faces, über die sie ihre Zustands-Informatio- load/JSR 352 Proposed Final Draft v1.7.pdf nen und Statistiken in verschiedenen Metri- [2] Spring Batch: http://static.springsource.org/ Laufzeit-Umgebung ken wie Read-/Write-Count, Commit-Count spring-batch/reference/html/index.html [3] WebSphere Batch: http://www.ibm.com/de- Die Batch-Runtime ist für das Laden des Job etc. zur Verfügung stellt. Sie kann direkt auf veloperworks/websphere/techjournal/1203_ XML, der dort referenzierten Batch-Artefak- Java SE oder eingebettet in einem Java EE narain/1203_narain.html te und für seine Ausführung zuständig. Re- Application Server laufen. Im letzteren Fall [4] JSR-352 RI: http://java.net/projects/jbatch/ downloads/download/jsr352-SE-RI-1.0.zip ferenzierte Batch-Artefakte können imple- klinkt sie sich über SPI in den Transaktions- [5] Arun Gupta Blog: https://blogs.oracle.com/ mentierungsabhängig, beispielsweise über Manager des Application-Servers ein, so- arungupta/entry/chunked_step_using_batch_ CDI, oder mit dem Standard-Archiv- oder dass Chunk-Steps in einem transaktionalen applications ThreadContext-Classloader geladen und Kontext ausgeführt und gegebenenfalls zu- Peter Doschkinow instanziiert werden. Das Laden und Starten rückgerollt werden können. [email protected] von Job XML erfolgt über das Interface „Job­ Operator“. Dieser ist die zentrale Schnitt- Status und Referenz-Implementierung stelle für eine interaktive oder automatische Die Experten-Gruppe für JSR-352 wird von Verwaltung aller laufenden Batch-Anwen- Chris Vignola von IBM, früher Chef-Archi- dungen. Die Klasse „BatchRuntime“ reprä- tekt der WebSphere-Batch-Technologie, sentiert die JSR-352-Laufzeitumgebung angeführt und durch die Teilnahme von und dient als Factory für den Zugriff auf das Oracle, Red Hat, VMware und Credit Suisse „JobOperator“-Interface. Die beiden Zeilen verstärkt. Ihre Arbeit erfolgt entsprechend in Listing 5 zeigen das Bootstrapping einer den Richtlinien von JCP 2.8 und ist deshalb Batch-Anwendung, das beispielsweise in ei- von Anfang an öffentlich einsehbar. Die Peter Doschkinow arbeitet als Senior Java Architekt bei Oracle ner asynchronen EJB-Methode oder durch Java-Community kann über die öffentliche Deutschland. Er beschäftigt sich mit serverseitigen Java-Technolo- die Nutzung des ManagedExecutorService- E-Mail-Adresse „[email protected]“ gien und Frameworks, Web Services und Business Integration, die er in verschiedenen Kundenprojekten erfolgreich eingesetzt hat. API (JSR-236, Concurrency Utilities for Java Feedback geben und sich an der Arbeit Vor seiner Tätigkeit bei Oracle hat er wertvolle Erfahrungen als Java EE) ausgeführt werden kann. beteiligen. Architect and Consultant bei Sun Microsystems gesammelt.

10 |

iii iii iiiiii www.ijug.eu

Skalierbare Cluster-Topologien mit dem JBoss AS 7

Heinz Wilming und Immanuel Sims, akquinet AG

Hohe Verfügbarkeit und hohe Skalierbarkeit sind für viele Anwendungen im Unternehmensumfeld eine unabdingbare Anforderung. Der Einsatz von Clustertechnologien verspricht hier Lösungen, gestaltet sich in der Praxis aber herausfordernder als angenommen. Neben der technischen Komplexität ist auch das Spannungsfeld zwischen Skalierbarkeit und Hochverfügbarkeit aufzulösen.

In der letzten Ausgabe der Java aktuell wur- Die Schwierigkeit bei der Konzeption AS 7 verwendet und entspricht dem, was den die grundlegenden Clustering-Kon- eines Clusters ist, sowohl eine hohe Verfüg- wir als vollständige Replikation bezeichnet zepte des JBoss Application Server in der barkeit als auch eine ausreichende Skalier- haben (siehe Abbildung 1). Im Distribu- Version 7 dargestellt. Dieser Artikel stellt barkeit zu erreichen. Die Skalierbarkeit ei- tions-Modus kann im Gegensatz zur Repli- unterschiedliche Cluster-Topologien vor, nes Clusters bezeichnet dabei die Fähigkeit kation festgelegt werden, wie häufig ein die auch den Anforderungen an die Skalier- der Bewältigung wachsender Last durch Datum redundant vorgehalten wird (siehe barkeit und die Verfügbarkeit genügen und Hinzufügen zusätzlicher Ressourcen. Eine Abbildung 2). dabei die Restriktionen der Netzwerk-Infra- gute Skalierung ist beispielsweise beim Be- Bei dieser Art der Verteilung wird eine struktur und die Besonderheiten größerer trieb mehrerer voneinander unabhängiger bessere Skalierung erreicht, da die Anzahl Cluster-Umgebungen berücksichtigen. Server gegeben, die keinerlei Kenntnis da- der Redundanz unabhängig von der An- von haben, dass sie gemeinsam in einem zahl der Konten in einem Cluster ist. Da- Einführung Cluster arbeiten. Ein Lastverteiler sorgt durch wird es möglich, den Cluster durch Eine hohe Verfügbarkeit eines Clusters be- dafür, dass jeder Knoten gleichmäßig mit das dynamische Hinzufügen beziehungs- zeichnet die Fähigkeit einer Cluster-Topo- Anfragen versorgt wird. Dieses Konzept weise Entfernen von Knoten in den Dimen- logie, bei einem Ausfall einzelner Knoten skaliert sehr gut, aber wenn ein Knoten sionen „Speicher“ und „Rechenleistung“ zu die Aufgaben nahtlos an andere Knoten ausfällt, gehen die transienten Sitzungs- skalieren. Falls ein Knoten ausfällt, reorga- der Cluster-Topologie zu übertragen. daten verloren – Pech für den Nutzer, der nisiert sich der Cache, sodass die vorge- Hierzu ist es erforderlich, dass sowohl Sys- gerade seinen virtuellen Einkaufswagen schriebene Anzahl von Redundanzen wie- temkomponenten als auch transiente Sit- randvoll geladen hat. der erreicht wird. zungsdaten redundant vorgehalten wer- Eine vollständige Replikation und der Ein Nachteil ist jedoch, dass bei Dis- den. Die Verfügbarkeit wird dabei durch Betrieb unabhängiger Server sind zwei tribution ein Datum nicht unbedingt auf Hinzufügen weiterer Knoten erhöht. Dies extreme Konzepte. Es gibt auch Topologi- dem Knoten vorgehalten wird, auf dem geht jedoch zulasten der Skalierbarkeit, da en, die sowohl eine gute Skalierbarkeit als es angefragt wurde. Der jeweilige Knoten die Replikation von Daten mit anderen Kno- auch eine gute Verfügbarkeit aufweisen. wird mithilfe einer konsistenten Hash-Funk- ten der Topologie den Kommunikations- tion [2] ermittelt. Es entsteht eine höhere aufwand und Ressourcenbedarf erhöht. Replikation und Distribution Netzwerk-Kommunikation. Um diese zu Bei einem Cluster mit beispielsweise vier Im JBoss AS 7 dient der verteilte Cache verringern, kann bei Distribution ein First- Knoten und jeweils einem Gigabyte Spei- Infinispan [1] der Replikation transienter Level-Cache vor dem eigentlichen Cache cher stehen bei einer Replikation auf allen Sitzungsdaten. Beispielsweise werden die eingerichtet sein. Hierbei ist jedoch der Knoten nicht insgesamt vier, sondern nur Sitzungsdaten einer HTTP-Session oder zusätzliche Koordinationsaufwand für die ein Gigabyte Speicher für transiente Daten die Daten einer zustandsbehafteten EJB- Invalidierung von nicht mehr gültigen Da- zur Verfügung, da jedes Datum vierfach Komponente in sogenannten „Cache-Con- ten zu berücksichtigen. Ein solcher Cache vorgehalten wird. tainern“ in unterschiedlichen Regionen kann sich somit auch negativ auf die Ska- Durch das Hinzufügen weiterer Knoten verwaltet. Bei einem Ausfall kann somit lierbarkeit auswirken. wird der verfügbare Speicher also nicht der Klient transparent auf einen anderen erhöht, da alle anderen Knoten die Daten Server ausweichen und mit den redundant Synchrone und asynchrone Verteilung des neuen Knotens vorhalten und der vorgehaltenen Sitzungsdaten weiterarbei- Sowohl im Replikations- als auch im Dis- neue Knoten die Daten der bereits vorhan- ten. Ein Infinispan-Cache-Container kann tributions-Modus können die Daten syn- denen. Darüber hinaus ist auch ein erhöh- dabei in verschiedenen Modi betrieben chron oder asynchron verteilt sein. Bei ei- ter Aufwand für die Verteilung der Daten werden. Für Hochverfügbarkeit sind die ner synchronen Verteilung wird der Aufruf zu berücksichtigen. Allerdings wird eine zwei Varianten „Replikation“ und „Distribu- bis zur vollständigen Verteilung blockiert. höhere Verfügbarkeit durch die Erhöhung tion“ interessant. Replikation wird in den Im Fehlerfall erfolgt ein Rollback der Trans- der Redundanz erreicht. Standard-HA-Konfigurationen des JBoss aktion. Bei einer asynchronen Verteilung

Java aktuell 3-2013 | 11 JBoss

Abbildung 1: Infinispan-Replikation Abbildung 2: Infinispan-Distribution werden hingegen die jeweiligen Knoten den vorkonfigurierten Distribution Cache ticast). Dabei abstrahiert JGroups von der benachrichtigt und der Aufruf nicht blo- referenzieren. jeweiligen Netzwerk-Topologie auf Basis ckiert. Kommt es zu einem Fehler während eines Transportprotokolls und eines kon- der Verteilung, erfolgt kein Rollback der Effiziente Kommunikation mit JGroups figurierbaren Protokollstapels. JBoss AS 7 Transaktion. Fehler werden lediglich proto- Infinispan nutzt für die Cluster-Kommu- verwendet standardmäßig UDP als Trans- kolliert. Diese Verteilungsart erfordert auf- nikation JGroups [4]. Es ist ebenfalls als portprotokoll. Neben UDP können auch TCP grund der Asynchronität zudem eine As- eigenständiges Subsystem im JBoss AS 7 und TUNNEL als Transportprotokoll zum Ein- soziation der jeweiligen Session mit dem eingebunden und unterstützt sowohl satz kommen. TUNNEL ist, wie der Name aktuellen Knoten, da Änderungen gegebe- Punkt-zu-Punkt-Kommunikation (Unicast) suggeriert, zur Vereinfachung der Penetra- nenfalls noch in einer internen Queue auf als auch Gruppen-Kommunikation (Mul- tion von Firewalls gedacht, indem die Ver- ihre Verarbeitung warten und somit noch nicht auf anderen Knoten verfügbar sind. Cache-Konfiguration ... Der JBoss AS 7 ist bereits für den Betrieb eines Clusters vorkonfiguriert und bietet ... entsprechende Konfigurationsprofile an. Die Profile „HA“ und „Full-HA“ enthalten im Infinispan-Subsystem unter anderem ... die Cache-Container „web“, „ejb“ und ... „hibernate“ (siehe Listing 1). Der letztge- nannte agiert als Second-Level-Cache für Hibernate. Hierfür wird der spezielle Mo- dus „Invalidierung“ [2] genutzt. ... Der Container „web“ speichert die HTTP-Sitzungsdaten. Im Container „ejb“ ... werden die transienten Daten von zu- standsbehafteten EJB-Komponenten ab- ... gelegt. Für „web“ und „ejb“ ist sowohl eine Variante für Replikation („repl“) als auch eine Variante für Distribution („dist“) ... vorkonfiguriert. Um anstelle des Repli- ... kations-Modus den Distributions-Modus zu verwenden, kann das „default cache“- Attribut des jeweiligen Cache-Containers Listing 1

12 |

iii iii iiiiii www.ijug.eu

teilung an die Empfänger über einen Rou- ter erfolgt. UDP verwendet IP-Multicasts, TCP versendet an jeden Empfänger einen ... TCP-Unicast. Bei UDP und TUNNEL muss jeder Multicast vom Server nur einmal versendet werden, während bei TCP jeder ... Multicast an jeden Clusterknoten geson- dert zugestellt wird. Aufbauend auf dem jeweiligen Trans- portprotokoll liegen diverse zusätzliche Listing 3 Protokolle im Stapel. Beim Senden durch- läuft eine Nachricht den Stapel von oben lerdings steigt mit der Größe des Clusters die sowohl Hochverfügbarkeit als auch nach unten, sie passiert also zuletzt das die Netzwerklast. Skalierbarkeit bietet und mit JGroups eine Transportprotokoll. Beim Empfangen wird Im JGroups-Subsystem des JBoss AS 7 effiziente Kommunikation auch in größe- der Stapel genau umgekehrt durchlaufen. ist bereits ein kompletter, auf TCP basie- ren Umgebungen ermöglicht. Eine weitere Neben Protokollen zur Cluster-Formierung render Protokollstapel bereitgestellt. Der Möglichkeit ist die Unterteilung größerer und dem Auffinden fehlerhafter Knoten TCP-Protokollstapel wird durch Ändern des Cluster-Topologien in mehrere Subcluster. befinden sich in der Standard-Konfigu- „default-stack“-Attributs in Benutzung ge- Innerhalb eines jeden Subclusters werden ration von JGroups die Protokolle UFC nommen (siehe Listing 3). die transienten Sitzungsdaten redundant (Unicast-Flow-Control) und MFC (Multi- Damit ist die Sache aber leider noch vorgehalten, aber nicht über die Grenzen cast-Flow-Control). Diese stellen sicher, nicht erledigt, denn in diesem Protokoll- eines Subclusters hinweg (siehe Abbil- dass Pakete in einer Frequenz versendet stapel wird zum Auffinden anderer Clus- dung 3). Somit kann der Cluster gut ska- werden, in der die Empfänger diese auch terknoten IP-Multicast über das Protokoll lieren, indem Subcluster hinzufügt bezie- empfangen und verarbeiten können. Ist MPING verwendet. Daher muss ein ande- hungsweise entfernt werden. die Bandbreite des Netzwerks durch hohes res Protokoll als Alternative zum Auffinden Die Größe eines Subclusters kann das Kommunikationsvolumen ausgereizt, aber anderer Clusterknoten her. JGroups bietet Maß an Verfügbarkeit bestimmen. Auf ei- noch Prozessorkapazität vorhanden, dann eine große Auswahl an PING-Protokollen nem so aufgebauten Cluster kann auch ein kann JGroups den Netzwerkverkehr kom- an, angefangen bei FILE_PING, das ein ge- sogenanntes „Rollendes Update“ durch- primieren. Hierzu wird der Protokollstapel meinsames Dateisystem nutzt, über Proto- geführt werden, indem jeweils ein kom- um das Protokoll COMPRESS erweitert, wie kolle wie S3_PING und RACKSPACE_PING, pletter Subcluster aktualisiert wird. Im Ge- Listing 2 zeigt. die Cloud Storages verwenden, bis hin zu gensatz zu Distribution besteht auch nicht TCPPING. Bei dem Protokoll TCPPING wer- das Problem, dass der Abruf eines Datums den die Clusterknoten jeweils Anhand ei- häufig über das Netzwerk erfolgen muss, ner statischen Liste initialer Clusterknoten da jeder Subcluster-Knoten alle replizier- konfiguriert. Über diese Liste versucht je- ten Daten vorhält. der Clusterknoten, eine Verbindung zu den konfigurierten Knoten aufzubauen. Sobald Subcluster konfigurieren eine Verbindung zu einer initialen Min- Um das Subcluster-Konzept umzusetzen, Listing 2 destanzahl an Knoten vorhanden ist, wird sind im Wesentlichen zwei Konfigurationen der Cluster formiert. Im folgenden Listing erforderlich. Zu einem muss die Replika- Angepasst an das Netzwerk mit JGroups ist eine Beispielkonfiguration für TCPPING tion auf bestimmte Knoten begrenzt und In manchen Netzwerken, insbesondere in gezeigt (siehe Listing 4). zum anderen der jeweilige Lastverteiler so Netzwerken aus verteilten Sub-Netzen, ist anpasst werden, dass ein Failover nur über IP-Multicast nicht verfügbar. Damit schei- Das Subcluster-Konzept die Grenzen eines Subclusters hinweg er- det UDP als Transportprotokoll aus. Eine Wie bereits angerissen, ist die Infinispan- folgt, wenn keine Server des Subclusters Alternative ist das TCP-Transportprotokoll. Konfigurations-Distribution eine Lösung, mehr verfügbar sind. Die Größe eines Da JGroups für Gruppennachrichten mit TCP die Kommunikation durch einzelne Ver- bindungen zu jedem Gruppenmitglied rea- lisiert, wird die Kommunikation in diesem Fall mit steigender Clustergröße immer 1.2.3.4[7600],1.2.3.5[7600] ineffizienter. In der Praxis sind jedoch vie- 2 le Switches und Router für TCP optimiert. 2000 Deshalb kann TCP trotzdem sowohl eine höhere Nachrichtenrate als auch einen hö- heren Nachrichtendurchsatz liefern [5]. Al- Listing 4

Java aktuell 3-2013 | 13 JBoss

Quell-offen und basiert auf dem JBoss AS 7 der Community.

Links [1] http://www.jboss.org/infinispan [2] http://en.wikipedia.org/wiki/Consistent_hashing [3] https://docs.jboss.org/author/display/ISPN/ Clustering+modes#Clusteringmodes-Invalida- tionMode [4] http://www.jgroups.org/manual-3.x/html/in- dex.html [5] http://www.jgroups.org/perf/perf2006/Report. html

Heinz Wilming [email protected]

Abbildung 3: Innerhalb eines Subclusters wird Infinispan-Replikation betrieben. Ein Lastverteiler sorgt dafür, dass Lastverteilung und Failover nur innerhalb eines Subclusters stattfinden

Subclusters lässt sich mit der Standard-HA- Fazit Konfiguration beschränken. Dazu wird für Mit den grundlegenden Technologien jeden Subcluster eine gesonderte Multi- „JGroups“ und „Infinispan“ für die Cluster- cast-Adresse verwendet. Diese kann so- Kommunikation und für die Verteilung Heinz Wilming ist Leiter des JBoss Competence Centers der akqui- wohl bei der „domain.sh“ als auch bei der transienter Daten sind mit einer etwas net AG. Er beschäftigt sich dort mit Technologien und Architek- „standalone.sh“ über den Parameter „-u“ angepassten Konfiguration auch größere turen für verteilte Anwendungen. Sein Fokus liegt dabei auf der angegeben werden. Ein Aufruf sieht dann Cluster-Topologien realisierbar. Die Teilung Java-EE-Plattform und auf Open-Source-Technologien. beispielsweise so aus: „./standalone.sh -c einer großen Cluster-Topologie in Subclus- standalone-ha.xml -u 230.0.1.4“. ter ermöglicht neben einer guten Skalie- Die Lastverteilung lässt sich bei Verwen- rung auch die Aktualisierung einzelner dung von mod_cluster über sogenannte Komponenten des Clusters ohne Ausfall- „Lastverteilungsgruppen“ realisieren. Last- zeiten der gesamten Umgebung. Hierbei Immanuel Sims verteilungsgruppen arbeiten so, dass Last- müssen jedoch weitere Restriktionen, wie [email protected] verteilung und Failover nur innerhalb ei- zum Beispiel ein gemeinsames Datenbank- ner solchen Gruppe erfolgen, es sei denn, Schema, berücksichtigt werden. Die Bei- es existieren keine Server mehr in dieser spiele aus diesem Artikel beruhen auf der Gruppe. Dafür muss jeder Subcluster eine aktuellen Version des JBoss AS 7. Für den eigene Lastverteilungsgruppe haben. Die- Einsatz in Produktiv-Umgebungen ist je- se werden auf Seiten des JBoss AS 7 im doch die gesondert qualitätsgesicherte mod_cluster-Subsystem konfiguriert (sie- Enterprise Application Platform (EAP 6) he Listing 5). von Red Hat empfohlen. Diese ist ebenfalls

... Immanuel Sims ist als Werkstudent bei der akquinet AG tätig. Er studiert Informatik an der Humboldt Universität Berlin und hat sich intensiv mit dem Thema „Clustering“ im Kontext des JBoss AS 7 beschäftigt. Listing 5

14 |

iii iii iiiiii www.ijug.eu

Lightweight AOP mit CDI und JPA

Prof. Dr. Michael Helbig, Hochschule Rosenheim

Ab Java EE 6 kann man mithilfe von „Contexts and Dependency Injection“ (CDI, JSR 299) sogenannte „Cross-Cutting-Concerns“ (wie Logging, Transaktionen, Security etc.) elegant von der eigentlichen Business- Logik abspalten, also aspektorientiert programmieren (AOP). Auch das „Java Persistence API“ (JPA, JSR 220) bietet mit dem EntityListener eine solche Eigenschaft auf Datensatz-Ebene, etwa relevant für Auditierung.

Der Artikel zeigt an konkreten Code-Bei- ting 1). Neben Performance-Logging (a) Account-Datensatz ein Zeitstempel sowie spielen CCCs, AOP, CDI sowie JPA wie man und Transaktionshandling (b) werden dem ein User hinzugefügt (c). Darüber hinaus die Struktur bestehender Anwendungen verbessert. Als Erstes werden die ver- @RequestScoped wendeten Begrifflichkeiten erklärt: Cross- public class AccountService { Cutting-Concerns (CCC) sind sogenannte @Inject Logger log; „querschnittliche Belange“ einer Software. @Inject EntityManager em; ... Die zugehörigen Code-Fragmente sind normalerweise quer über den gesamten public void saveAccount(Account account) throws Exception { Code verstreut, da sie durch herkömmli- // (a) Performance Logging che Programmierung nicht so einfach mo- long time = System.nanoTime(); dularisiert werden können [1]. Beispiele, log.debug(“[saveAccount] params=[account=“+account+“]“); die fast in jeder Software vorkommen, sind // (b) JPA Transaction Handling meist nicht-funktionale Anforderungen, EntityTransaction tx = em.getTransaction(); die nicht zur eigentlichen Geschäftslogik try { gehören: if (!tx.isActive()) { tx.begin(); }

// (c) Audit • Logging account.setAcc_last_edit_usr(... .getRemoteUser()); • Security-Anforderungen account.setAcc_last_edit_ts(new Date(System.currentTimeMillis())); • Fehlerbehandlung • Datenbankzugriff // BUSINESS LOGIC: save to db • Transaktionsverwaltung if (account.getId() == null) { em.persist(account); } else { account = em.merge(account); } • Audit-Fähigkeit // (d) Write Audit-Log Weitere Informationen dazu stehen unter AccountAudit accountAudit = new AccountAudit(); [2]. Um diesen Code an einer Stelle zen- accountAudit.setAcc_balance(account.getAcc_balance()); tral zu formulieren und an den richtigen ... Stellen automatisch anzuwenden, steht em.persist(accountAudit); das allgemeine Konzept der aspektorien- // (b) JPA Transaction Handling tierten Programmierung (AOP) zur Verfü- if (tx != null && tx.isActive()){ tx.commit(); } gung [3]. Hier sind diese CCCs von der Ge- } catch (Exception e) { schäftslogik getrennt, was in einem besser if (tx != null && tx.isActive()){ tx.rollback(); } lesbaren Code resultiert. Zur konkreten throw e; } Umsetzung stehen neben dem mächtigen, aber schwergewichtigen AspectJ im Java- // (a) Performance Logging EE-6-Standard sowie in Java SE „CDI“ und log.debug(“[saveAccount] return - “ + „JPA“ zur Verfügung. Zuvor werden CCCs TimeUnit.MILLISECONDS.convert(System.nanoTime()-time,TimeUnit.NANOSECONDS) + an einem Beispiel vorgestellt. “ ms“); }

Kontoverwaltung als Beispiel public void deleteAccount(Account account) throws Exception { ... } Es sind die Konten einer Bank zu verwal- } ten. Man denke an einen Service, der den aktuellen Kontostand speichert (siehe Lis- Listing 1: Service ohne AOP

Java aktuell 3-2013 | 15 Aspektorientiert programmieren

@InterceptorBinding @Interceptor @Target({TYPE, METHOD}) @PerformanceLogging @Retention(RUNTIME) public class PerformanceLoggingInterceptor { public @interface PerformanceLogging { } @AroundInvoke Listing 2: Annotation für das InterceptorBinding public Object performanceLogging(InvocationContext ic) throws Exception { // logic before method call // (a) Performance Logging wird ein Audit-Log (d) geschrieben. Es wird Logger log = LoggerFactory.getLogger(ic.getMethod().getDeclaringClass().getName()); also eine separate Datenbank-Tabelle mit long time = System.nanoTime(); den für die Auditierungen notwendigen String methodName = “[“ + ic.getMethod().getName() + “]“; Daten über die durchgeführte Aktion ge- log.debug( methodName + “ starting... params=“ + füllt. Technisch befinden wir uns in einer LogUtil.toLogString(ic.getParameters()) }); try { CDI-Managed-Bean – der Autor hat be- // method call wusst auf eine EJB verzichtet, die viel Funk- Object result = ic.proceed(); tionalität bereits bietet (siehe Listing 1). Es ist viel technischer Code vorhanden, // logic after method call der eigentlich nichts mit der Geschäftslo- // (a) Performance Logging log.debug( methodName + “ return result=“ + result + gik zu tun hat und den Entwickler behin- “ - “ + TimeUnit.MILLISECONDS.convert(System.nanoTime()-time,TimeUnit.NANOSEC- dert. Wir werden diesen jetzt mithilfe von ONDS) + AOP entschlacken. Konkret realisiert wird “ ms“); dies mit CDI und JPA. return result; } catch (Exception e) { log.error( methodName + “ ERROR params={}“ + Part 1: AOP mit CDI LogUtil.toLogString(ic.getParameters()),e}); CDI ist viel mehr als ein Dependency-Injec- throw e; tion-Framework. Prominente Implemen- } tierungen sind JBoss Weld (Referenz-Im- } plementierung), Apache Open WebBeans } und Resin CanDI. In CDI interessieren uns wegen AOP neben „Producers“ (realisiert Listing 3: Interceptor-Implementierung das Factory-Method-Pattern) und „Events“ (realisiert das Observer-Pattern, etwa für Bei der Interceptor-Implementierung Jetzt folgt der angenehme Teil: „Code lokales Messaging) hauptsächlich „Inter- markiert man die Methode, die den eigent- Deletion, Teil 1“. Unseren Service aus Lis- ceptors“ und „Decorators“. Letztere setzen lichen Methodenaufruf abfängt, mit der ting 1 können wir jetzt vereinfachen (siehe das Decorator-Pattern um und machen do- Annotation „@AroundInvoke“. Über den Listing 5). Die Code-Fragmente (a) und (b) mainnahes AOP möglich − es können also „InvocationContext“ können wir uns alle löschen wir einfach und stellen an deren Domain-Objekte mit Zusatzfunktionalität Informationen über die eigentlich aufge- Stelle die beiden Annotationen „@Per- angereichert werden. Dazu im Fazit mehr. rufene Methode besorgen. An diese wird formanceLogging“ und „@Transactional“. Für unser Beispiel verwenden wir ledig- durch „context.proceed()“ übergeben. Jetzt können wir diese generische Funktio- lich Interceptors. Diese stehen schon seit In Listing 4 ist beim Eintrag in der Da- nalität auch auf jede weitere Methode wie Längerem EJBs zur Verfügung − mit CDI tei „beans.xml“ die Reihenfolge der Inter- etwa „deleteAccount(Account account)“ jetzt auch „normalen“ Klassen, was wichtig ceptors zu beachten, da diese so wie dort anwenden. ist, falls wir keinen EJB-Container haben angegeben ausgeführt werden. Außerdem Man könnte jetzt natürlich einwenden: (in Tomcat, Jetty etc.). Wir werden jetzt könnte man einfach einen Interceptor Warum lagern wir den Code nicht einfach Performance-Logging (a) und Transaktions- durch Löschen des Eintrags quasi ausschal- in Hilfs-Klassen/-Methoden aus? Man könn- handling (b) mit je einem Interceptor her- ten, ohne die Anwendung neu bauen zu te ja beispielsweise die Hilfs-Methoden auslösen (siehe Listings 2 bis 5). Einen In- müssen. Den Interceptor „Transactional“ für „beginPerformanceLog(…)“ und „endPer- terceptor erstellt man in drei Schritten (hier Transaktionshandling (b) kann man auf die formanceLog(…)“ definieren. Aber: Diese beispielhaft für den „PerformanceLogging“- gleiche Weise implementieren. müsste der Entwickler in jeder Methode Interceptor): 1. Annotation für das InterceptorBinding (siehe Listing 2) de.bigdev.aop.PerformanceLoggingInterceptor de.bigdev.aop.TransactionalInterceptor 2. Interceptor-Implementierung (siehe Listing 3) 3. Aktivierung in META-INF/beans.xml (siehe Listing 4) Listing 4: Aktivierung in META-INF/beans.xml (Reihenfolge beachten!)

16 |

iii iii iiiiii www.ijug.eu

• Pre-, PostPersist public class AccountListener { • „Before/After Insert Trigger“ @PrePersist @PreUpdate • Pre-, PostUpdate public void setUserAndTs(Object entity) { • „Before/After Update Trigger“ (hier: Dir- Account account = (Account) entity; ty Check. Eintreten nur, falls Entity ge- // (c) Audit ändert) account.setAcc_last_edit_usr(... .getRemoteUser()); • Pre-, PostRemove account.setAcc_last_edit_ts(new Date(System.currentTimeMillis())); } • „Before/After Delete Trigger“

@PostPersist @PostUpdate Man kann bei Eintreten eines dieser Events public void writeAuditLog(Object entity){ auf die Entities zugreifen und zusätzliche Account account = (Account) entity; Logik hinzufügen. Bei uns ist dies Logik (c) // (d) Write Audit-Log AccountAudit accountAudit = new AccountAudit(); und (d) aus Listing 5. Um sie querschnitt- accountAudit.setAcc_balance(account.getAcc_balance()); lich verfügbar auszulagern, müssen wir ... jetzt konkret folgende Schritte tun: // obtain EntityManager via JNDI (in JPA 2.1 use injection) EntityManager em = (EntityManager) BeanManagerJNDI.getBeanByName(“em“); 1. Implementierung einer EntityListener- em.persist(accountAudit); Klasse (siehe Listing 6) } } 2. Den EntityListener an der Entity regist- rieren (siehe Listing 7) Listing 5: Service mit AOP mittels CDI Die EntityListener-Implementierung ist zu Beginn und am Ende aufrufen. Er müss- schluss, auf einen anderen Mechanismus eine ganz gewöhnliche Klasse. Lediglich te auch geeignete Parameter übergeben zurückzugreifen. die Methoden sind durch Annotationen (Name der Methode etc.) − also mehr über den Events zugeordnet. Diese werden diese Hilfsmethoden wissen. Mithilfe von Part 2: AOP mit JPA dann bei Auftreten des Events ausgeführt. CDI passiert dies alles deklarativ (Annotati- JPA ist mittlerweile der Standard für das Ar- Hier kann man dann auf die Entity zugrei- on à la „Mach es“, fertig) anstelle von impera- beiten mit relationalen Datenbanken. Der fen, die als Parameter der Methode dekla- tiv (schreibe jetzt den Anfangs-Log-Eintrag, Datenbankzugriff ist mithilfe des EntityMa- riert ist. Noch eines ist zu bemerken: Leider schreibe am Ende den zweiten etc.). Dies nager schon perfekt gekapselt. Will man kann man in einen EntityListener in JPA 2.0 wäre also nur eine Kompromisslösung. JPA für AOP nutzen, steht der EntityListe- noch nicht injizieren. Hier muss man sich Jetzt müssen wir nur noch den Ac- ner mit folgenden Events zur Verfügung: den EntityManager manuell, etwa via JNDI count-Datensatz anreichern (c) und das besorgen. Diese mangelnde Zusammen- Audit-Log (d) schreiben. Da dies auf Da- • PostLoad arbeit von JPA mit CDI ist aber in JPA 2.1 tensatz-Ebene abläuft und von jedem Teil • „After Select Trigger“ wie das Filtern von behoben. der Anwendung erfolgen soll, fiel der Ent- Daten Alternativ könnte man die Methoden der Entity-Klasse direkt in die Entity ste- @PrePersist @PreUpdate cken. Dies ist eine Geschmacksfrage des public void setUserAndTs(Object entity) { zuständigen Architekten. Die hier vorge- Account account = (Account) entity; stellte Vorgehensweise bringt den Vorteil, // (c) Audit dass man den EntityListener an mehreren account.setAcc_last_edit_usr(... .getRemoteUser()); Entities registrieren kann. account.setAcc_last_edit_ts(new Date(System.currentTimeMillis())); } Jetzt folgt wieder ein schöner Schritt: „Code Deletion, Teil 2“. Wir können unseren @PostPersist @PostUpdate Service aus Listing 5 noch weiter vereinfa- public void writeAuditLog(Object entity){ chen und die Code-Fragmente (c) und (d) Account account = (Account) entity; einfach löschen (siehe Listing 8). Es bleibt // (d) Write Audit-Log nur noch die eigentliche Business-Logik AccountAudit accountAudit = new AccountAudit(); accountAudit.setAcc_balance(account.getAcc_balance()); übrig. Der Entwickler der Service-Methode ... // obtain EntityManager via JNDI (in JPA 2.1 use injection) @Entity EntityManager em = (EntityManager) BeanManagerJNDI.getBeanByName(„em“); @EntityListeners(AccountListener.class) em.persist(accountAudit); public class Account { ... } } } Listing 7: Registrierung des EntityListener an Listing 6: EntityListener-Implementierung der Entity

Java aktuell 3-2013 | 17 Aspektorientiert programmieren

Referenzen und weitere Informationen @RequestScoped [1] http://de.wikipedia.org/wiki/Cross-Cutting_ public class AccountService { Concern ... [2] http://architects.dzone.com/articles/example- @PerformanceLogging @Transactional cross-cutting-concerns public void saveAccount(Account account) throws Exception { [3] http://de.wikipedia.org/wiki/Aspektorientierte_ // BUSINESS LOGIC: save to db Programmierung if (account.getId() == null) { em.persist(account); } [4] http://www.bigdev.de else { account = em.merge(account); } } ... } Prof. Dr. Michael Helbig [email protected] Listing 8: Service mit AOP mittels CDI und JPA

„saveAccount(…)“ muss überhaupt nichts Als Best Practice rät der Autor, AOP mehr über das Audit-Log wissen. Dies pas- mit Bedacht einzusetzen, um nicht in der siert jetzt automatisch an anderer Stelle. „Wartungshölle“ zu landen. Für technische Wir haben gesehen, dass AOP ein sehr nicht-funktionale Anforderungen, wie elegantes Mittel ist, um sich auf die eigent- hier beschrieben, sei AOP fast ausnahms- liche Business-Logik zu konzentrieren. Sie los empfohlen, da dies die Lesbarkeit des birgt auf der anderen Seite aber auch die wichtigen Codes stark erhöht; dagegen Gefahr, dass der Entwickler nicht mehr wird für fachliche funktionale Anforde- weiß, was eigentlich alles passiert, da dies rungen (Business-Logik) von AOP (reali- nicht wie in Listing 1 im Code steht. Es ste- sierbar etwa durch CDI Decorators) eher Michael Helbig ist Professor für Mathematik und Informatik an hen an der Service-Methode nur noch eine abgeraten, da man hier besser den se- der Hochschule Rosenheim. Als Freelancer ist er passionierter oder mehrere Annotationen beziehungs- quenziellen Ablauf ohne Seiteneffekte Java-EE-Entwickler, Berater und Trainer. Privat betreibt er einen weise im Falle von JPA gar nichts. erkennen soll. Blog unter http://www.bigdev.de/blog.

Java Forum Stuttgart

Die Java User Group Stuttgart e.V. veranstaltet am 4. Juli 2013 im Kultur- & Kongresszentrum Liederhalle (KKL) in Stuttgart wieder das Java Forum Stuttgart. Es werden rund 1.500 Teilnehmer erwartet. Geplant sind 49 Vorträge in sieben parallelen Tracks. Diese sind eingeteilt in „Non-Sponsored“-Talks und „Sponsored“-Talks und auch als solche im Vortragsprogramm gekennzeichnet. Zu- dem werden bis zu 40 Aussteller vor Ort sein, darunter auch der Interessenverbund der Java User Groups e.V. (iJUG). An der Community-Wand stehen sowohl offene White-Boards als auch BoF-Boards (Bird-of-a-Feather). Abends gibt es die Gele- genheit, sich bei verschiedenen BoF-Sessions mit Gleichgesinnten zu treffen, um über ein bestimmtes Thema zu diskutieren und sich auszutauschen. Darüber hinaus wird es wieder eine Jobbörse/Karriereecke für die Besucher geben.

Workshop „Java für Entscheider“ Die eintägige Überblicksveranstaltung am Vortag (3. Juli 2013) zeigt Begrifflichkeiten und wichtige Technologien aus der seit Jah- ren in der Industrie etablierten Plattform Java. Ausgehend von strategischen Gesichtspunkten wie Bedeutung und Verbreitung reicht der Blick über das Client-seitige Java (Java SE) und die wesentlichen Entwicklungswerkzeuge bis zum Server-seitigen Java (Java EE). Dort stehen dann die Bedeutung von Java als Integrationsplattform und die verschiedenen Technologien im Mittel- punkt. Weiterhin wird noch der Einsatz von Java in den immer wichtiger werdenden mobilen Lösungen (Android, iOS) gestreift. Abschließend kommen noch das Ausrollen von Java-Lösungen und das sehr interessante Eclipse als Rich-Client zur Sprache, um dann den Bogen von der Software-Entwicklung hin zum Betrieb zu schlagen.

Experten-Forum Stuttgart Am 5. Juli 2013 findet wieder im Anschluss an das Java Forum Stuttgart ein Experten-Forum Stuttgart statt. Auf dem Programm stehen zwölf halbtägige Workshops in sechs parallelen Tracks. Die Workshops in kleinen Gruppen mit maximal 25 Teilnehmern ermöglichen einen intensiven Austausch zwischen Trainer und Zuhörern.

Anmeldung und weitere Informationen unter www.java-forum-stuttgart.de

18 |

iii iii iiiiii www.ijug.eu

Software modular bauen

Ulf Fildebrandt, SAP AG

Modularität wird in der Zukunft eine immer größere Bedeutung bei der Software-Entwicklung spielen. Moderne Systeme verwenden Frameworks wie OSGi und Spring, um die Java-Anteile zusammenzusetzen. Aber Frameworks reichen nicht aus, denn sie gewährleisten allein noch keine gute Architektur. Design Pattern und Regeln sind notwendig, um Systeme zu erstellen, die auch über Jahre weiterentwickelt werden können.

Zu Beginn der Software-Entwicklung ent- deren verbunden. Damit soll angedeutet genommen werden und Module mit ihren stehen die meisten Programme durch werden, dass dieses Modul die Schnittstel- klar definierten Schnittstellen sind eine Lö- einzelne Entwickler, manchmal arbeiteten len der anderen verwendet und auf diese sung für dieses Problem. auch einige wenige Entwickler zusammen. Weise mit ihnen interagiert. Der Zugriff auf Modularität zieht sich durch die verschie- Im Laufe der Zeit werden die Teams immer die interne Implementierung ist nicht ge- denen Abstraktions-Ebenen eines Systems größer und auch die Systeme, die erstellt stattet. hindurch. Entscheidend ist die Entkopp- wurden, wachsen. Genau wie bei den Teams lung der Teile auf den Ebenen der Architek- Strukturen geschaffen werden, bilden die tur. Auf der untersten Ebene, Coding, muss Entwickler innerhalb der Software Abgren- der Sourcecode so gestaltet sein, dass kei- zungen, um die Komplexität beherrschen ne direkten Abhängigkeiten zwischen den zu können. Im schlechten Fall entspricht die Klassen erzeugt werden, zumindest keine Struktur der Software der organisatorischen unerwünschten. Eine Ebene darüber müs- Struktur, im guten Fall werden fachlich defi- sen die Module geeignet definiert sein, nierte Module erstellt. um den Anforderungen der Ersetzbarkeit Abbildung 2: Ersetzbarkeit und Erweiterbarkeit zu genügen. Auf der Definition der Module höchsten Ebene muss das gesamte System Mit der Modul-Definition ist bereits das Das zweite Ziel der Software-Entwick- die Module zusammenbauen, ohne Zyklen Zauberwort gefallen. Ein Modul ist eine lung besteht darin, Teile der Software wie und damit Kopplung zu erlauben. abgeschlossene, funktionale Einheit einer in Abbildung 2 zu ersetzen, weil das Pro- Software, bestehend aus einer Folge von gramm an neue Anforderungen angepasst Modulare Laufzeitumgebung Verarbeitungsschritten und Datenstruk- werden muss und die alte Implementie- Nach der Definition eines Moduls stellt sich turen. Entscheidend für ein Modul ist die rung nicht mehr umgestellt werden kann. die Frage, wo es ausgeführt wird. Eine nor- Trennung von Schnittstelle und Implemen- male Laufzeit führt Anweisungen aus, aber tierung. um Modularität zu erreichen, bietet es sich Die Schnittstelle eines Moduls defi- an, eine modulare Laufzeitumgebung zu niert die Daten-Elemente, die das Modul verwenden. Da Module in eine Schnittstelle als Eingabe benötigt und als Ergebnis der und eine Implementierung aufgeteilt sind, Verarbeitung liefert. Die Implementierung muss die modulare Laufzeitumgebung die- enthält den tatsächlichen Programmcode. se Aufteilung unterstützen. Die Implemen- Module dienen in der Software-Entwick- tierung ist komplett gekapselt und nicht lung zwei Zielen: Erweiterbarkeit und Er- Abbildung 3: Weiterentwicklung eines Systems außerhalb des Moduls erreichbar. Nur die setzbarkeit. Schnittstelle ist verfügbar. Genau diese Abbildung 1 zeigt verschiedene Modu- Wenn die Teile eines Systems diese Eigenschaften müssen durch die Laufzeit- le. Eines davon ist nicht direkt mit den an- Kriterien erfüllen, kann es über die Zeit umgebung unterstützt werden. verändert werden, sodass es niemals kom- Im Laufe der letzten Jahre hat sich auf plett neu geschrieben werden muss (siehe der Java-Seite OSGi als Standard für eine Abbildung 3). Gerade in der heutigen Zeit modulare Laufzeitumgebung durchge- mit den häufig und sich schnell ändernden setzt. Innerhalb einer OSGi-Laufzeitum- Anforderungen ist dieses Verhalten sehr gebung werden Bundles ausgeführt. Ein erstrebenswert, denn meistens werden Bundle exportiert Java-Packages, um sie Systeme über viele Jahre gewartet, ohne zur Verwendung freizugeben. Abhängig- dass sie neu geschrieben werden können. keiten werden durch importierte Packages Abbildung 1: Erweiterbarkeit Die Änderungen müssen in Schritten vor- definiert. Die gesamte Implementierung

Java aktuell 3-2013 | 19 Modularität

ist nach außen nicht erreichbar. Listing 1 Manifest-Version: 1.0 zeigt, wie die Beschreibung eines Bundles Bundle-ManifestVersion: 2 in OSGi aussehen könnte. Bundle-Name: Basic Dabei ist vor allen Dingen auf die bei- Bundle-SymbolicName: Basic den Anweisungen für Packages zu achten, Bundle-Version: 1.0.0.build20120412 denn über die exportierten Packages wird Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: arch.test bekannt gegeben, was nach außen sicht- Import-Package: org.osgi.framework bar ist, also die Schnittstelle. Die importier- ten Packages müssen von anderen Bund- les exportiert werden und definieren, was Listing 1 das Bundle verwenden darf. OSGi in Java benutzt Classloading für die Entkopplung. Jedes Bundle besitzt einen eigenen Class- public interface IDataAggregator { public List get(); loader, sodass nur Klassen geladen und ver- public void addDataSource(IDataSource inf); wendet werden können, die in der Beschrei- public void addDataSource(List infs); bung des Bundles spezifiziert wurden. } Für alle weiteren Betrachtungen ist es notwendig, dass eine solche Strukturie- Listing 2 rung in Modulen vorausgesetzt wird. Die Software, in Java geschrieben, besitzt nicht ziierenden Objekte nicht näher festgelegt diese Schnittstelle. Die beiden Objekte ha- nur eine Struktur durch die Packages und werden. Durch diese Abstraktion entkop- ben also eine Schnittstelle ausgehandelt. die damit verbundenen Namenskonven- pelt eine Factory die Verwendung eines Ein Framework sorgt dafür, dass eine tionen, sondern jedes Bundle gruppiert Objekts von der Erzeugung. Im Rahmen der Instanz des zu verwendenden Objekts er- zusammengehörende Code-Teile als Im- Modularität sind diese beiden Funktionen zeugt und in das andere Objekt injiziert plementierung und eine Schnittstelle für nach der Einführung einer Factory vonein- wird. Durch die Schnittstelle sind die bei- Verwender. ander getrennt. Die Anweisung in Listing 3 den Implementierungen nicht mehr eng zeigt die Verwendung einer Factory. miteinander gekoppelt. Sie können aus- Design Pattern für Modularität Beide Design Pattern bieten eine getauscht werden, solange sie sich an die Design Pattern sind jedem Software-Ent- Schnittstelle an. Sowohl die Erzeugung von Schnittstelle halten. wickler durch das Standardwerk der Soft- Objekten als auch der Zugriff auf Objekt- Dependency Injection hat sich in den ware-Entwicklung bekannt (Gamma, Helm, Instanzen wird somit im Coding bereits von letzten Jahren durchgesetzt und wird von Johnson, Vlissides: Design Pattern). Dabei Schnittstellen strukturiert. vielen Frameworks angeboten. Spring war handelt es sich um Implementierungsvor- sicher eines der ersten Frameworks, die gaben, mit denen immer wiederkehrende SOLID Dependency Injection zum Prinzip erho- Probleme einheitlich gelöst werden können. Sind die Design Pattern im Prinzip auf Co- ben. JEE 5 hat diese Art der Pflege von Ab- Genau wie ein Rad nicht immer wieder er- ding festgelegt, gibt es eine Gruppe von hängigkeiten übernommen. funden werden muss, können Design Pat- Prinzipien, die Robert Martin definiert hat: Um das Prinzip von Dependency In- tern für verschiedene Systeme und in ver- SOLID. Jeder Anfangsbuchstabe steht für jection zu verdeutlichen, wird an dieser schiedenen Kontexten angewendet werden. ein Prinzip: Single Responsibility, Open- Stelle kurz eine solche Deklaration ge- Eine Menge von Design Pattern dient auch Closed, Liskov, Interface Segregation und zeigt. Zunächst einmal geht es darum, das dazu, klare Grenzen zwischen den Teilen Dependency Injection. Genau wie die De- verwendende Objekt zu definieren, im eines Software-Systems zu ziehen. An die- sign Pattern sind diese Prinzipien für Co- vorliegenden Fall eine Instanz der Klasse ser Stelle sollen nur zwei genannt werden, ding sehr sinnvoll, sie lassen sich aber auch „DisplayServlet“. Diese Klasse besitzt eine die sehr gut geeignet sind, Modularität auf eine Ebene höher auf Module anwenden. Property „dataAggregrate“. Der entschei- Coding-Ebene zu erreichen. Eine „Façade“ Zunächst einmal sollen jedoch diese Prin- dende Punkt ist, dass durch diese Dekla- ist eine einheitliche und meist vereinfach- zipien erklärt werden. ration das Framework die Aufgabe über- te Schnittstelle zu einem Teil der Software. Dependency Injection ist ein Prinzip, nimmt, die Property mit einer Instanz zu Die Ähnlichkeit zur Definition eines Mo- bei dem die direkte Abhängigkeit zwi- belegen (siehe Listing 4). Die Instanz mit duls ist sehr offensichtlich. Die Schnittstel- schen zwei Objekten aufgehoben wird. Bei der Referenz „DataAggregate“ wurde auf len-Definition in Listing 2 beschreibt die schlechtem Coding würde ein Objekt ein genau dieselbe Weise deklarativ erzeugt Façade eines Daten-Aggregators. Zugriffe anderes unmittelbar verwenden. Die bei- (siehe Listing 5). darauf erfolgen nur noch über die Schnitt- den Objekte wären auf alle Zeiten mitein- An dieser Stelle soll nur kurz angemerkt stelle. ander gekoppelt. Wenn man Dependency sein, dass Spring und OSGi sich voneinander Eine „Factory“ definiert eine Schnittstelle Injection anwendet, dann wird eine Schnitt- unterscheiden. Spring kann als Framework zur Erzeugung einer Familie von Objekten, stelle im verwendenden Objekt definiert. innerhalb einer bestehenden Lösung ver- wobei die konkreten Klassen der zu instan- Das zu verwendende Objekt implementiert wendet werden, OSGi legt den Grundstein

20 |

iii iii iiiiii www.ijug.eu

pieren und geeignet anzuordnen. Das IDataAggregator aggregator = gruppierende Element ist ein Subsystem. DataAggregatorFactory.getInstance(tableObject.getType()); Ein Subsystem bündelt eine Menge von se- Listing 3 mantisch zusammengehörenden Modulen in dem zu entwickelnden System. Sollte ein neues System entwickelt werden, kann die Zusammenstellung der Module selbstver- ständlich auch wieder neu definiert werden. Die Subsysteme werden jetzt verschie- Listing 4 denen Schichten innerhalb der Architektur eines Systems zugewiesen. Ein Subsystem darf nur Subsysteme tieferer Schichten ver- wenden. Auf diesem Weg soll eine zu große Kopplung der Module und damit der Sub- systeme vermieden werden. Listing 5 Je tiefer ein Modul in einer Schicht an- geordnet wird, desto größer ist normaler- für die Implementierung. OSGi ist demnach sich Gedanken zu machen. Die Definition weise der Grad der Wiederverwendung. invasiver und bietet auch noch andere Ei- von Modulen ist ein notwendiger Schritt Daraus ergibt sich umgekehrt, dass ein Sub- genschaft wie die Versionierung von Mo- für die modulare Software-Entwicklung, system so hoch wie möglich angeordnet dulen. Im Beispiel eines Bundle-Deskriptors die besten Module nützen allerdings sein sollte, um ungewünschte Abhängig- war die Versionsnummer enthalten, wäh- nichts, wenn sie beliebig miteinander in- keiten zu vermeiden. Je tiefer ein Subsys- rend Spring die Beans nicht versioniert. teragieren können. tem angeordnet ist, desto mehr Subsyste- Es ist möglich, beide Frameworks gleich- Um diesen Gedanken zu verdeutlichen, me dürfen es verwenden. zeitig zu verwenden. Hier wurde Spring stelle man sich einfach eine Menge von Mo- Abbildung 4 verdeutlicht dieses Prinzip. gewählt und darauf verwiesen, weil es sich dulen vor, bei der jedes Modul wieder mit In diesem Beispiel existieren fünf Schichten. dabei um das bekannteste Dependency-In- den anderen verbunden ist. Durch die klar Die unterste Schicht bietet eine Schnitt- jection-Framework handelt. In OSGi gibt es definierten Schnittstellen wäre es möglich, stelle an, um Datenquellen allgemein zu ähnliche Frameworks zur Deklaration von jedes Modul auszutauschen, in der Realität definieren. Auf der Schicht darüber sind die Abhängigkeiten. „Blueprint“ ist die Einbet- jedoch gestaltet sich ein solches Vorgehen zwei Datenquellen angesiedelt. Nochmal tung der Spring-Konzepte in OSGi, davor als sehr schwierig, da eine größere Anzahl eine Schicht oberhalb existiert eine Anwen- wurden „Declarative Services“ verwendet. von Abhängigkeiten dazu führt, dass die dung zur Darstellung der Daten. Entscheidend ist aber die Verwaltung der Module nicht mehr einzeln betrachtet wer- Abhängigkeiten durch das Framework, den können. Sie erscheinen in ihrem Verhal- Zyklen nicht mehr durch das Coding selbst. Die ten wie ein einzelnes Modul. Ein spezieller Aspekt von Schichten in der Objekte werden voneinander entkoppelt. Daher ist man in komplexen Systemen Architektur besteht darin, dass Zyklen ver- Der zweite Grundsatz, der einen nähe- dazu übergegangen, die Module zu grup- boten sind. Abhängigkeiten von Subsyste- ren Blick wert ist, ist das Liskov-Prinzip. Da- runter versteht man, dass ein Objekt einer Klasse durch ein Objekt einer Subklasse ersetzt werden kann. Durch die Beziehung der Klasse zu ihrer Subklasse wird festge- legt, dass jede Instanz der Klasse durch eine Instanz der Subklasse ersetzt werden kann. Vereinfacht gesagt, definiert die Klasse wieder einen Vertrag, der von den abgeleiteten Klassen eingehalten werden muss. Ersetzbarkeit ist zum Prinzip erho- ben worden, zunächst auf Klassen-, aber auch auf Modulebene.

Schichten Nachdem durch die Design Pattern und SOLID hauptsächlich Prinzipien für das Co- ding und Module angesprochen wurden, ist es an der Zeit, sich über das System an Abbildung 4: Einfaches Beispiel für Schichten

Java aktuell 3-2013 | 21 Modularität

men aus einer tieferen in höhere Schich- ten sind nicht erlaubt, um die Kopplung zwischen den Subsystemen minimal zu halten. Jede weitere Abhängigkeit eines Subsystems führt dazu, dass es schwieriger wird, es auszutauschen oder zu erweitern. Dieses Prinzip gilt nicht nur für die Ebene der Subsysteme, sondern genauso für Coding. Java-Klassen, die sich gegen- seitig referenzieren, führen dazu, dass die Klassen schwerer weiterzuentwickeln sind, weil eine Änderung zu unerwarteten Fol- gen in den anderen Klassen führen kann. Wenn man Software modular entwi- Abbildung 5: Verfahren zur modularen Software-Entwicklung ckeln will, sollte man Zyklen auf allen Ebe- nen der Architektur vermeiden. Durch Zy- eines Moduls direkt erkennbar werden. Es hängigkeiten von Modulen statt. Uner- klen werden die entsprechenden Teile der existieren weitere Metriken, um Module wünschte Abhängigkeiten können durch Software gekoppelt und können danach und Coding zu vermessen. Anmerkung: Dependency Injection vermieden werden. als ein Modul gelten, auch wenn sie formal Die beiden beschriebenen Metriken die- Am Ende wird das System vermessen. in zwei Modulen oder Klassen abgelegt nen nur als Beispiel. Man ermittelt die Metriken für die Module sind. Sie sind nicht mehr unabhängig von- und analysiert, ob Kopplung und Kapse- einander zu entwickeln. Es handelt sich Anwendung der Verfahren lung der Vorgabe entsprechen. Die Über- nicht mehr um modulare Software. Nach der Vorstellung der Konzepte und prüfung dieser Metriken lässt sich in einen Prinzipien stellt sich die Frage, wie man automatischen Build integrieren, sodass Metriken diese anwenden muss, um ein System die Architektur eines Systems automatisch Obwohl man es anders vermuten könnte, modular aufzubauen (siehe Abbildung 5). getestet und jeder Verstoß gemeldet wird. ist Modularität nicht nur durch Prinzipien Als Grundbedingung wird eine modulare Die Weiterentwicklung eines Systems läuft zu erreichen, sondern sie kann auch direkt Laufzeitumgebung angenommen. Für das jetzt auf die iterative Anwendung dieses im Coding geprüft werden. Wie bei allen System wird ein Framework ausgewählt, Verfahrens hinaus. anderen Tatsachen, die geprüft werden um Module auszuführen. Danach besteht sollen, muss man Messbarkeit erreichen – der erste Schritt darin, die Module passend dafür existieren Metriken. An dieser Stelle zu den Anforderungen zu definieren. Der sollen nur ein paar beschrieben werden, Zweck eines Moduls muss klar festge- um das Prinzip zu verdeutlichen. legt sein und dementsprechend auch die Die Kopplung („coupling“) eines Mo- Schnittstelle dieses Moduls. Für die Defini- duls wird durch die Abhängigkeiten zu tion der Schnittstelle sind Design Pattern anderen Modulen bestimmt. Dabei sind wie „Factory“ und „Façade“ notwendig. Ulf Fildebrandt die ausgehenden („efferent coupling“ = Für das Modul selbst müssen Depen- [email protected] Ce) und eingehenden („afferent coupling“ dency Injection und auch das Liskov-Prin- = Ca) Abhängigkeiten zu unterscheiden. zip beachtet werden. Ein Modul und das Die Instabilität berechnet sich über „I = Ce Coding darin sollten nie direkte Abhän- / (Ca + Ce)“. Je mehr Module das betrachte- gigkeiten aufbauen, das Zusammenspiel te Modul verwenden, desto instabiler wird der Module sollte vielmehr über Depen- das Modul selbst. Als zweite Metrik soll die dency Injection gewährleistet sein. In der Kapselung vorgestellt werden. Sie gibt das weiteren Implementierung muss darauf Verhältnis aller Typen (T) im Vergleich zu geachtet werden, dass das Liskov-Prinzip den privaten Typen (pt) an. Damit berech- eingehalten wird. Die Schnittstelle sollte net sich die Kapselung über „ep = pt / T“. aussagekräftig genug sein, um die Ersetz- Je mehr sich die Zahl der privaten Ty- barkeit des Moduls zu garantieren. pen der Zahl aller Typen annähert, desto Wenn das implementierte Modul diese mehr nähert sich die Kapselung dem Wert Konzepte erfüllt, dann kann man an die 1. Wenn die Kapselung falsch verstanden Zusammenstellung des Systems gehen. Ulf Fildebrandt arbeitet für SAP seit 1998 in verschiedenen Be- wird und einfach die gesamte Implemen- Die Module werden zu Subsystemen zu- reichen als Development Architect. Dort hat er Java in vielen Be- tierung offengelegt wird, dann geht pt sammengefügt und diese werden den reichen wie Eclipse und auf dem Server verwendet. Während der gegen 0 und somit auch ep. Daraus folgt Schichten zugewiesen. An dieser Stelle letzten Jahre war er verantwortlich für verschiedene Produkte im unmittelbar, dass schmale Schnittstellen findet eine weitere Überprüfung der Ab- SOA-Umfeld auf Basis von Java und OSGi.

22 |

iii iii iiiiii www.ijug.eu

Software – weniger kaufen, mehr bauen

Erik Dörnenburg, ThoughtWorks Deutschland GmbH

Wenn ein Unternehmen eine neue IT-Lösung braucht, möglicherweise, weil sich die Geschäftsbedin- gungen ändern oder weil ein existierender manueller Prozess automatisiert werden soll, so fragen sich die Umsetzungsverantwortlichen üblicherweise schnell: „Sollen wir die Lösung selbst bauen oder sollen wir sie kaufen?“ Lange Zeit war die gängige Auffassung, dass es grundsätzlich besser sei, eine Lösung zu kaufen. Selbst zu entwickeln kam nur dann in Frage, wenn es keine passende Lösung auf dem Markt gab.

In diesem Artikel werden die Gründe für Eigenentwicklung die eigentlich logische zusätzlich üblicherweise so, dass diese be- die Präferenz von Kauf-Lösungen unter- Antwort und als machten es Probleme reits fertiggestellt ist, bevor der Kauf getä- sucht. Vor allem will der Autor die vor- damit unausweichlich, den Kaufansatz zu tigt wird. In dem Fall besteht nicht einmal herrschende Meinung hinterfragen und wählen. Daher stellt sich die Frage, wel- das Risiko, dass die Software zum benötig- dabei erklären, warum er glaubt, dass die che Probleme diejenigen sind, die die Ent- ten Zeitpunkt nicht fertig ist. Veränderungen der letzten zehn Jahre in scheider dazu bringen, lieber eine fertige Die offensichtliche Frage ist, ob Soft- der Software-Entwicklung dafür sorgen, Lösung zu kaufen. ware-Entwicklung wirklich so grundle- dass sich die Antwort auf die „Kaufen oder gend risikobehaftet ist, dass viele Projekte Bauen“-Frage weg vom Kaufen und mehr Software-Entwicklung ist riskant scheitern mussten. Auf der einen Seite ist in Richtung „Bauen“ bewegt. Dabei geht Das am meisten genannte Argument ge- die Software-Entwicklung natürlich eine der Autor nicht so weit zu behaupten, dass gen die Eigenentwicklung ist die Annah- junge Disziplin, zum Bespiel im Vergleich Bauen die neue Standard-Antwort sein me, dass Software-Entwicklung risikoreich zur Architektur oder zur industriellen Pro- sollte, aber er meint, Software selbst zu sei. Es gibt beliebig viele Geschichten von duktion von Gütern. Aus diesem Grund entwickeln sollte öfter in Erwägung gezo- gescheiterten Software-Projekten, von Pro- gibt es weniger Erfahrung und viele Ideen gen werden, sogar dann, wenn passende jekten, die den Zieltermin nicht einhalten, und Konzepte sind noch nicht in wieder- Lösungen auf dem Markt existieren. oder von solchen, die das Budget nicht nur holbaren Prozessen umgesetzt. Auf der Seiner Erfahrung nach wird die Ent- um ein paar Prozentpunkte überschreiten, anderen Seite jedoch ist Software flexibel scheidung zum Kauf selten auf Basis von sondern um ein Vielfaches der ursprünglich und unendlich formbar. Mit den richtigen Argumenten getroffen, die zeigen, warum veranschlagten Kosten. Eine Möglichkeit, Techniken sollte es möglich sein, nicht nur der Kauf eine gute Idee ist. Üblicherweise diese Risiken zu vermeiden, ist, die Software exakt das zu produzieren, was benötigt geht die Analyse eher dahin zu belegen, zu einem vorher festgelegten Preis von ei- wird, sondern es sollte genauso möglich warum selbst zu entwickeln eine schlechte nem Anbieter zu kaufen. Das verlagert das sein, Teile der Software bereits vor der Idee ist. Diese Tatsache spricht in gewisser Risiko von Budgetüberschreitungen direkt Fertigstellung des Gesamten zu nutzen. Weise für sich selbst. Es klingt, als wäre die zum Anbieter. Bei Standard-Software ist es Zusätzlich sollte es möglich sein, die Soft-

Java aktuell 3-2013 | 23 Software-Entwicklung

ware veränderten Geschäftsbedingungen Wenn nun also der Fachabteilung mit Eigen-Entwicklungen ist, dass die Imple- anzupassen. All das würde das Risiko ho- einer Eigenentwicklung besser geholfen mentierung eine Menge Zeit und Aufwand her Investitionsaufwendungen verringern. werden kann, ist es dann möglich, der IT- erfordert. Eine Geschäftsfunktion, die auf Aus Unternehmensperspektive ist die Abteilung das Umsetzungsrisiko abzuneh- wenigen Seiten beschrieben werden kann, Fragestellung noch eine andere: Wessen men? Zunächst einmal haben im letzten erfordert mehrere Hundert Zeilen Code. Um Risiko wird durch den Software-Kauf ei- Jahrzehnt bedeutende Durchbrüche in diese zu schreiben und zu testen, braucht gentlich reduziert? In vielen Unternehmen den Entwicklungsmethoden dafür gesorgt, ein Entwickler Wochen und es dauert so- gibt es eine IT-Abteilung, die für den Kauf dass Software-Entwicklung viel vorhersag- gar noch länger, um sie in eine Produkti- von Software und für Eigenentwicklungen barer geworden ist. Prozesse, die um das onsumgebung auszurollen. verantwortlich ist. Sie ist jedoch in aller Re- agile Wertesystem gebaut wurden, liefern Komplexe Systeme, die nur auf mehre- gel nicht die Abteilung, die die Software funktionierende Software in kurzen Iterati- ren Hundert Seiten beschrieben werden nutzt. Gemessen wird die IT-Abteilung oft onen. Sie liefern dabei nicht nur inkremen- können, erfordern sogar Jahre, um sie zu eher an der pünktlichen Lieferung und tell Funktionalität, sondern bieten sowohl entwickeln. Eine offensichtliche Antwort der Einhaltung gegebener Budgets als an dem Business die Chance, zeitnahes Feed- wäre, mit der Ineffizienz zu leben, aber der Gesamtlösung oder dem realisierten back zu geben, als auch den Entwicklern zumindest die Umsetzungszeit zu reduzie- Potenzial. Es gibt für sie also wenig bis gar die Möglichkeit, die Software bei Bedarf ren, indem ein größeres Team an die Auf- keinen Anreiz, Software selbst zu entwi- anzupassen. Das verringert das Risiko im- gabe gesetzt wird. Unglücklicherweise ist ckeln, denn ein Kauf verlagert das gesam- mens, dem Business eine Software zu lie- es inzwischen sehr klar, dass die Geschwin- te für die IT-Abteilung relevante Risiko zum fern, die nicht seinen eigentlichen Bedürf- digkeit bei der Software-Entwicklung nicht externen Software-Anbieter. nissen entspricht. Die Fähigkeit, iterativ zu mit der Menge der Entwickler im Team ska- Für das Business hingegen sieht die Si- entwickeln und auf Veränderungen schnell liert. Ab einem bestimmten Punkt über- tuation etwas anders aus. So besteht nicht zu reagieren, wird den Software-Entwick- steigt der wachsende Kommunikations- nur die Möglichkeit, dass eine Eigenent- lungsteams mit Techniken und Praktiken und Koordinations-Aufwand jede weitere wicklung kostengünstiger wäre und da- wie zum Beispiel Extreme Programming Brainpower. durch früher den ROI erreicht hätte, es ist und Continuous Delivery gegeben. Genauso, wie der Kauf von Standard- genauso möglich und nicht unüblich, dass Software das Risiko auf den Anbieter verla- die gekaufte Standard-Software nicht exakt Risiko-Minimierung gert, verlagert er auch das Problem effizien- das bietet, was die Fachabteilung braucht. Noch interessanter ist die Möglichkeit der ter Lieferung auf den Anbieter. Der Käufer Das wiederum führt zu verringerter Produk- Risiko-Minimierung durch Verlagerung muss nur noch einen Ausschreibungs- und tivität und ungenutzten Chancen. Selbst- der Ziele. Was, wenn das Hauptziel nicht Beschaffungsprozess durchlaufen und verständlich sollten diese Punkte mit in den mehr darin besteht, eine große Menge an die Installation der Software überwachen. Entscheidungsprozess einfließen. Unglück- Function Points in vorgegebener Zeit und Noch viel besser: Kaufen mehrere Parteien licherweise wird dieser jedoch normaler- mit festgesetztem Budget zu liefern? Was, dieselbe Software, kann der Anbieter die weise von der IT-Abteilung durchgeführt wenn das Kernziel wäre, die zum jeweili- Entwicklungskosten über alle Käufer ver- und diese ist mehr an der Minimierung ihrer gen Zeitpunkt am dringendsten benötigte teilen. Er verteilt damit auch die Auswir- eigenen Risiken interessiert. Entsprechend Funktionalität so effizient und effektiv wie kungen von Ineffizienz auf alle Käufer. Auf ist es nicht unwahrscheinlich, dass der Aus- möglich zu liefern? Auch hier würden agile die Installation selbst kommen wir später wahl- und Entscheidungsprozess zwar das Praktiken ganz klar helfen, aber wie welt- zu sprechen. Risiko der IT-Abteilung minimiert, jedoch fremd wäre das denn? 1982 eröffnete Tom Aber ist Software-Entwicklung wirklich nicht die beste Lösung für das Unterneh- DeMarco sein einflussreiches Buch zum so langwierig und ineffizient, wie die Be- men als Ganzes findet. Thema „Software-Entwicklung“ mit dem fürworter von Kauflösungen behaupten? Ein gutes Beispiel für diesen Konflikt Satz: „Was man nicht messen kann, … kann Was kann getan werden, um sie effizienter ist die Einführung einer CRM-Lösung bei man nicht kontrollieren.“ Interessanterwei- zu machen? Fred Brooks erklärte in seinem Australiens größtem Telekommunikations- se schreibt er im Jahr 2009 in einer IEEE- Paper aus dem Jahre 1987, warum keine anbieter. Hier kaufte man ein System von Veröffentlichung [2], dass wir uns in den einzige Entwicklung in Technologie oder einem der Marktführer, was eindeutig das vergangenen vierzig Jahren mit unserer in Management-Techniken eine Produkti- Risiko der IT-Abteilung minimierte. Wie je- Unfähigkeit, ein Software-Projekt pünkt- vitätssteigerung welcher Größenordnung doch eine Zeitung berichtete, meinen die lich und innerhalb des vorgegebenen Bud- auch immer verspricht [3]. Er fügte jedoch Händler an der Vertriebsfront des Unter- gets zu beenden, gequält hätten, dass das hinzu, dass viele ermutigende Innovatio- nehmens, dass die unpraktische Kunden- aber nie das primäre Ziel hätte sein sollen. nen in Gange seien und dass die diszipli- und Abrechnungsplattform im Zentrum Viel wichtiger sei Transformation; Software nierte, fortlaufende Anstrengung, diese der mehrere Milliarden schweren IT-Trans- zu kreieren, die die Welt oder Unterneh- Innovationen zu entwickeln, zu verbreiten formation sie einiges an Geschäftspotenzi- men verändert oder die verändert, wie ein und zu nutzen, am Ende tatsächlich zu ei- al kostet [1]. Für die IT-Abteilung minimier- Unternehmen sein Geschäft betreibt. Das ner messbaren Verbesserung führen wür- tes Risiko bedeutete in dem Fall nicht die hätte ich nicht besser ausdrücken können. de. Der Autor glaubt, dass er Recht hatte optimale Lösung für das Unternehmen. Ein anderes gängiges Argument gegen und dass in den fünfundzwanzig Jahren,

24 |

iii iii iiiiii www.ijug.eu

nachdem er dieses Paper geschrieben hat, Code geschrieben wird, zu steigern, son- durch etwas noch Besseres ersetzt worden: substanzielle Verbesserungen in der Ent- dern auch die Entwicklungsgeschwindig- Open-Source-Frameworks. Viele Entwick- wicklerproduktivität erzielt wurden. keit bei wachsender Größe der Code-Basis ler und Unternehmen haben festgestellt, Brooks macht eine wichtige Unter- aufrechtzuerhalten. dass es dem eigenen Unternehmen nicht scheidung zwischen essenzieller und ne- Entwickler-Workstations sind wesent- schadet, Quell-Code öffentlich verfüg- bensächlicher Komplexität. Essenzielle lich schneller geworden und erlauben bar zu machen, sondern dass es vielmehr Komplexität ist die Komplexität des Ge- damit den Einsatz komplexerer IDEs und nutzt. Unternehmen profitieren von der schäftsproblems, das implementiert wird. anderer Werkzeuge. Verbesserte Compiler frei verfügbaren Entwicklungskapazität Es mag so aussehen, als könnte das IT-Team zum Beispiel erzeugen besser optimierten anderer Mitstreiter. Ein weiterer Vorteil von nichts tun, um diese essenzielle Komplexi- Code, ohne dass die Entwickler sich über direkt von und für Anwendungsentwickler tät zu verringern. Das Team kann und soll- Details wie Register-Zuteilungen Gedan- geschriebenen Frameworks ist die Tatsa- te Business-Anforderungen nicht ändern. ken machen müssen. Der entscheidende che, dass ihr Funktionsumfang von echten Interessanterweise gibt es in Projekten mit Produktivitätsschub wird aber mit einer Anforderungen bestimmt ist und nicht von langer Laufzeit (Jahre) jedoch die Tendenz schnellen Internetverbindung erreicht. Funktionschecklisten. Die Innovation fin- der Fachbereiche, sehr spekulativ zu sein Statt zu experimentieren oder Probleme det auch auf den öffentlichen Portalen, auf und von vornherein jede nur erdenkliche in Mailing-Listen oder Newsgroups disku- denen die Frameworks bearbeitet werden, Funktionalität zu fordern. Dies geschieht tieren zu müssen, können Entwickler jetzt statt. Es entstehen immer flexiblere und ef- aus lauter Angst, auf die Entwicklung neu- auf Online-Communities zugreifen, die die fektivere Wege, Code zu teilen. er Anforderungen ansonsten sehr lange Antwort auf die meisten Fragen innerhalb warten zu müssen. Mit einem priorisierten, von Minuten verfügbar machen, sei es, weil Software-Entwicklung ist nicht unsere iterativen Entwicklungsansatz kann das frühere Diskussionen zum Problem durch- Kernkompetenz Business hingegen ein Projekt stoppen, suchbar sind, oder, weil Kollegen in Echtzeit In den letzten dreißig bis vierzig Jahren ha- wenn alle wirklich benötigten Features via Internet Relay Chat (IRC) antworten. ben Software-Lösungen mehr und mehr fertiggestellt sind. Das reduziert natürlich Die Hardware-Verbesserungen wirken Geschäftsbereiche erobert. Es ist jedoch nicht die essenzielle Komplexität, aber es sich nicht nur auf Entwickler-Workstations wichtig, sich daran zu erinnern, dass sie reduziert die Menge der implementierten aus, sondern haben natürlich auch große ursprünglich als Werkzeuge für operative Funktionalität meiner Erfahrung nach er- Auswirkungen auf Produktionsumgebun- Effizienz eingesetzt wurden. Vermutlich heblich. gen. In vielen Fällen können Entwickler glauben aus genau diesem Grund viele Zurück zu Brooks´ Unterscheidung. jetzt etwas mehr Großzügigkeit beim Unternehmen, dass Software-Entwicklung Nebensächliche Komplexität ist diejeni- Ressourcen-Verbrauch zur Laufzeit gegen nicht zu ihren Kernkompetenzen gehört. ge, die durch die bei der Entwicklung ver- eine erhöhte Produktivität während der Einige beziehen sich hier auf Beispiele aus wendeten Tools und Techniken erzeugt Entwicklung eintauschen. So ist es zum dem frühen zwanzigsten Jahrhundert, als wird. Diese Komplexität würde ohne die Beispiel möglich, statt viel Aufwand in das Fabriken noch ihre eigenen Elektrizitäts- Implementierung nicht existieren. Wie von Schreiben von Code zur Speicherverwal- werke hatten. Die Analogie ist klar: Die Brooks vorhergesagt, hat es keine Reduzie- tung zu stecken, mit dem Einsatz eines Fabriken wechselten sofort zu Strom aus rung von nebensächlicher Komplexität im automatischen Garbage Collectors die dem Netz, als er verfügbar war, denn selbst Bereich von Größenordnungen gegeben. nebensächliche Komplexität, die mit ma- Elektrizität herzustellen, gehörte nicht zu Endnutzer-Entwicklung oder automatische nueller Speicherverwaltung verbunden ist, ihrem Kerngeschäft. Ihre Kernkompetenz Programmierung, wie Brooks sie nann- zu verringern. Es wird sogar argumentiert, lag woanders, zum Beispiel in der Produk- te, ist nicht sehr verbreitet. Die einzige dass automatische Speicherverwaltung tion von Autos. Warum sollte also heute Ausnahme bisher sind Excel-Tabellenkal- die Effizienz auf moderner Hardware stei- zum Beispiel ein Unternehmen, das sich kulationen. In Zukunft allerdings haben gert, da sie lokalere Referenzen und damit auf das Verwalten von Versicherungen Domain-spezifische Sprachen (DSLs) das verbesserte Cache-Nutzung bietet. Aber spezialisiert hat, auch Kompetenzen in der Potenzial, hier doch noch einen Durch- selbst wenn die automatische Speicher- Software-Entwicklung haben? Tatsächlich bruch zu schaffen. verwaltung langsamer ist, lohnt sich mit stellt sich im Zusammenhang mit Cloud Etwas, das Brooks unterschätzt hat, sind Ausnahme von ganz speziellen Einzelfäl- Computing sogar die Frage, ob Unterneh- integrierte Entwicklungsumgebungen len der Einsatz eines Garbage Collectors. men überhaupt IT-Kompetenzen haben (IDEs). Die Möglichkeiten, die sie im Hin- Brooks und viele andere haben in den oder ob sie nicht stattdessen alles in die blick auf Code Navigation und automati- frühen Neunzigern einen wachsenden Cloud auslagern sollten. Genau wie die Fa- sches Code Refactoring bieten, resultieren Markt für Komponenten-Lösungen vor- briken ihr Strom-Problem in das Netz aus- in beeindruckenden Produktivitätsgewin- hergesagt. Diese sollten einen Mittelweg gelagert haben. nen. Automatisches Refactoring in Verbin- zwischen dem Kauf kompletter Software- Dieser Punkt unterscheidet sich von dung mit Test Driven Development ermög- Pakete und der Eigenentwicklung dar- den beiden oben diskutierten. Die Beur- licht es Entwicklern, mit weniger Aufwand stellen. Das hat sich allerdings im Großen teilung von Risiko und Effizienz ändert sich hohe Software-Qualität zu erzeugen und und Ganzen nicht bewahrheitet. Es gibt aufgrund der Vorteile in der Art und Weise, dadurch nicht nur die Effizienz, mit der Ausnahmen, aber allgemein ist die Idee wie Software entwickelt und geliefert wird.

Java aktuell 3-2013 | 25 Software-Entwicklung

Die Kompetenzfrage wird stark davon be- die IT-Abteilung gut funktionierende Ent- einflusst, wie sich die Unternehmen än- wicklungskapazität hat, die auf agile Me- dern. Software-Lösungen sind nicht länger thoden und Continuous Delivery setzt. mehr nur Werkzeuge, die es ermöglichen, Es scheint, dass, selbst wenn Software- bestimmte Geschäftsprozesse effizienter Entwicklung in den meisten Unternehmen zu machen. Software-Lösungen ermög- keine Kernkompetenz ist, es doch strate- lichen überhaupt völlig neue Wege, Ge- gisch immer wichtiger wird, sie zu einer NetBeans IDE 7.3 ist verfügbar schäfte abzuwickeln. solchen zu machen. Das mag schmerzvolle Vor etwa fünfundzwanzig Jahren profi- Veränderungen und einen Wandel in der Die NetBeans Integrated Develop- tierten Zeitungen von der Einführung des Unternehmenskultur erfordern, aber neue ment Environment (IDE) ist nun in der elektronischen Desktop Publishing. Das Realitäten zu ignorieren, hat noch nie ge- Version 7.3 allgemein verfügbar und war jedoch nur ein Weg, das Layouting von holfen. bringt eine bessere Unterstützung Seiten effizienter zu machen. Es gab kaum von HTML5, JavaScript und CSS, um einen Grund, dafür eigene Software zu Quellen die Entwicklung von Rich-Web-Appli- schreiben. Heutzutage, da sich ein Groß- [1] Mitchell Bingemann, Dealers still fuming at cations und mobilen Anwendungen ‘clumsy’ Telstra system. The Australian, 2 June teil der Geschäftsgrundlage ins Internet 2009, http://www.theaustralian.com.au/news/ zu vereinfachen. verlagert hat, ist die Software hinter einer dealers-still-fuming-at-clumsy-telstra-system/ Netbeans bietet nun eine bessere Zeitungs-Website strategisch entschei- story-e6frgal6- 1225719947511 Unterstützung der Java-Plattform. So [2] Tom DeMarco, Software Engineering: An dend für den Geschäftserfolg der Zeitung. Idea Whose Time Has Come and Gone? IEEE enthält der Editor neue Hints und Re- So zählt zum Beispiel nicht mehr nur der Software, July/August 2009, http://www.com- factorings. Verbessert wurde auch die loyale Zeitungsleser zum Publikum. Ge- puter.org/portal/web/computingnow/0709/ Unterstützung der FXML-Layout-Da- whatsnew/software-r nauso wichtig ist der Nutzer, der über eine teien in JavaFX-Projekten. Was HTML5 [3] Frederick Brooks, No Silver Bullet: Essence and Suchmaschine zum Artikel gelangt. Bietet Accidents of Software Engineering. Computer, angeht, so unterstützt NetBeans nun die Site nun leichten Zugriff auf verwandte April 1987, http://www.cs.nott.ac.uk/~cah/ die jüngsten HTML5-Elemente. Bei Inhalte, so bleibt der Nutzer länger, sieht G51ISS/Documents/NoSilverBullet.html einem neuen HTML5-Projekt können mehr Anzeigen und erhöht damit den Um- sich Developer die Arbeit erleichtern satz der Zeitung. Die richtigen Inhalte zu Übersetzung aus dem Englischen: und direkt aus einer Liste von be- finden, ist immer noch eine Angelegenheit Elke Bethke, liebten Online-Templates ein Projekt von Editoren und Autoren. Sie zum richti- ThoughtWorks Deutschland GmbH erzeugen. Diese definieren in diesem gen Zeitpunkt im richtigen Zusammen- Fall die Dateien, Bibliotheken und hang verfügbar zu machen, ist allerdings Struktur des Projekts. eine Funktion der Software. Auch die Einbindung vom Frame- Das Zeitungsbeispiel ist nur eines von Erik Dörnenburg work jQuery wurde auf Vordermann vielen. Der Trend, dass Software zum stra- [email protected] gebracht. Zudem gibt es jetzt für Java­ tegischen Erfolgsfaktor für die Geschäfts- Script im Übrigen auch einen neuen entwicklung wird, ist in vielen Bereichen Editor und Debugger, der auf dem und Vertikalen zu finden. Wenn nun also Nashorn-Projekt basiert. Auch neue ein Stück Software strategisch wichtig für CSS-Regeln werden nun von NetBeans das Geschäft ist, sollte klar sein, was es be- berücksichtigt. Developer können üb- deutet, dieselbe Standard-Software wie rigens jetzt in Real Time sehen, wie sich die Konkurrenz zu kaufen: Man hat wenig ihre Änderungen im CSS-Style-Fenster bis gar keinen Wettbewerbsvorteil. Wie auf das Aussehen der Webseite auswir- vorhin diskutiert, mag es weniger risiko- ken. Darüber hinaus ermöglicht eine reich für die IT-Abteilung sein, Standard- bidirektionale Integration von Google Software zu kaufen, aber es macht es für Chrome und dem internen WebKit- das Unternehmen definitiv schwieriger, basierten Browser eine vereinfachte einen Vorteil gegenüber den Mitbewer- Live-Code- und Web-Page-Synchroni- bern zu erlangen. Diese können schließlich Erik Dörnenburg ist Software-Entwickler, Berater und Head of sierung. aus denselben Standard-Lösungen wählen. Technology bei ThoughtWorks. In Projekten hilft er Kunden bei Ende März 2013 ist bereits der erste Schlimmer noch, es dauert viel länger, auf der Entwicklung von Enterprise Software sowie der Optimierung Patch für NetBeans 7.3 veröffentlicht Marktveränderungen zu reagieren oder agiler Praktiken. Häufig mit übermäßig komplexer Software worden. Um diesen einzuspielen, muss konfrontiert, entwickelte er ein starkes Interesse an einfachen Ar- eine brillante neue Idee umzusetzen, wenn zuvor NetBeans 7.3 installiert sein. chitekturen und an Möglichkeiten, Software zu visualisieren, um ein externes Produkt mit externem Liefe- sie dadurch verständlicher zu machen. In den letzten zehn Jahren ranten involviert ist. Die Cycle-Time – also Weitere Informationen unter: hat er auf vielen internationalen Konferenzen Vorträge gehalten, die Zeit von der Idee bis zur Live-Stellung Kapitel zu verschiedenen Buchprojekten beigetragen und einige https://netbeans.org – kann erheblich reduziert werden, wenn Open-Source-Projekte geleitet.

26 |

iii iii iiiiii www.ijug.eu

Diagramm-Bibliotheken für Android

Falko Krische, buschmais GbR

Die visuelle Aufbereitung geschäftlicher Daten auf mobilen Endgeräten stellt häufig eine große Herausfor- derung dar. Der Artikel befasst sich mit fünf Bibliotheken für Android, die dieser Aufgabe begegnen.

Internet, Kommunikation, Unterhaltung Anpassbarkeit der erzeugten Diagramme Tutorials oder kommentierte Beispiele – das, wofür man bis vor ein paar Jah- untersucht. Dazu werden folgende Punkte auf der projekteigenen beziehungswei- ren noch einen Desktop-PC oder Laptop betrachtet: se auf der Google-Code-Seite vorhanden benötigte, kann man heute in der einen sind. Die JavaDoc ist in den meisten Fällen Hand halten und mit der anderen bedie- • Titel ausreichend. Glücklicherweise gibt es ein nen. E-Mails lesen auf dem Smartphone, Lässt sich der Diagrammtitel anpassen? Beispiel-Projekt, dessen Quellen man ein- Surfen im Internet und Chatten auf dem • Achsen sehen kann. Diese hilft die Bibliothek zu Tablet gehört heute zum Alltag. Eine Viel- Lassen sich die Diagrammachsen an- verstehen und zu benutzen. zahl von Apps steht dafür bereit. passen, die Farben ändern, die Achsen- Im Issue-Tracker der Google-Code-Seite Anders als im Consumer-Bereich sind skalierungen ändern, die Skalierungs- gibt es sporadische Anfragen, die von den professionelle Anwendungen noch rar ge- beschriftungen (Labels) anpassen? Entwicklern auch beantwortet werden. sät. Warum überwachen Administratoren • Achsentitel Falls man auf Probleme mit der Bibliothek nicht mobil ihre Server-Landschaft, prüfen Lassen sich diese anpassen? oder Bugs in ihr stoßen sollte, kann man Sales-Manager nicht die Verkaufszahlen • Datenbereich hier auf Unterstützung hoffen. der letzten Tage oder sehen Fußballtrainer Kann man den Hintergrund ändern? nicht den aktuellen Trainingsstand ein? Ist eine Zoom- beziehungsweise Scroll- AndroidPlot Damit diese Anwendungsfälle realisiert Funktion bereits in der Bibliothek im- Die aktuelle Version von AndroidPlot ist werden können, sind Bibliotheken zur visu- plementiert? Kann das Gitternetz geän- 0.5.2. Diese Bibliothek ist ebenfalls ein ellen Aufbereitung von Daten erforderlich. dert werden? Open-Source-Projekt. Sie bietet nur die Diese Bibliotheken werden nachfolgend • Datenbeschriftung vier verschiedenen Diagramm-Typen (Li- für Android unter die Lupe genommen. Kann man einzelne Messpunkte be- nien-, Balken-, Streuungs- und Schritt- schriften und wenn ja, kann diese Be- Diagramme). AndroidPlot ist ebenfalls ab Ausgepackt, angeschaut, ausprobiert schriftung angepasst werden? Android-Version 1.6 einsetzbar und steht Die Untersuchung der Bibliotheken ge- • Datendarstellung auch unter der 2.0 (siehe schieht unter rein pragmatischen Gesichts- Lassen sich Linien, Balken, Punkte etc. Abbildungen 5 und 6). punkten. Dabei geht es weitestgehend um in Größe und Aussehen ändern? Auf der projekteigenen Webseite gibt Fragen wie: „Ist das API umgänglich?“, „Ist • Legende es einen Quickstart-Guide, der den Einstieg die JavaDoc verständlich?“, „Kann ich die Lässt sich die Legende anpassen? in diese Bibliothek vereinfacht. Auf dieser gezeichneten Diagramme relativ einfach • Implementierungsspezifika Seite stehen noch weitere Tutorials, die die auf meine Bedürfnisse anpassen?“ oder Wie lassen sich die Diagramme darstel- grundlegenden Funktionen veranschau- „Wo finde ich schnelle Hilfe?“ len und wie werden sie deklariert? lichen. Die JavaDoc ist leider sehr mangel- Als Szenario für die Demo-Applikation haft. Viele der Klassen beziehungsweise dient folgendes Bild: Ein Wartungsingeni- Tabelle 1 zeigt das Ergebnis der Untersu- Methoden sind gar nicht oder nur rudimen- eur läuft durch eine Halle mit Maschinen chung. tär dokumentiert. Es gibt jedoch auf der Bit- und lässt sich die Ausfälle (also Fehler) ei- bucket-Seite des Projekts weitere Beispiele ner jeden Maschine in einem bestimmten AChartEngine mit Quellcode, um tiefer in die Materie vor- Zeitraum anzeigen. Alle Demo-Applikatio- AChartEngine ist eine Open-Source-Bib- zustoßen. Glaubt man der Projekt-Webseite, nen basieren auf der gleichen Datenbasis, liothek, deren Quelltext bei Google-Code so wird AndroidPlot schon in mehr als fünf- um die Vergleichbarkeit zu gewährleisten. gehostet ist. Die Bibliothek unterstützt alle hundert Apps eingesetzt. Es gibt auf der Die Demo-Applikationen sind als Down- gängigen Diagramm-Typen wie Linien-, Seite auch ein Forum mit reger Beteiligung. load verfügbar (siehe Absatz „Beispiele Balken- und Torten-Diagramme (siehe Abbil- zum Herunterladen“ am Ende des Artikels). dungen 2 bis 4). Sie steht unter der Apache Li- AFreeChart cense 2.0, als minimale Android-Version wird AFreeChart ist ebenfalls ein Open-Source- Übersicht 1.6 gefordert. Die aktuelle Version ist 1.0.0. Projekt. Die aktuelle Version ist 0.0.4. Ein- Nachdem die prinzipielle Verwendungs- Der Start mit dieser Bibliothek geht setzbar ist es ab Android-Version 2.1. Die weise der Bibliotheken klar ist, wird die relativ schnell vonstatten, obwohl keine Bibliothek wird unter der GNU-Lesser-GPL

Java aktuell 3-2013 | 27 Android

AChartEngine AndroidPlot AFreeChart aiCharts TeeChart Titel ändern Größe x - x - - Farbe - - - x x Position - - - - - einblenden/ausschalten x - (1) x x x Achsen Skalierung ändern x - - - - Skalierung umbenennen (statt 1, 2 ... a, b) x x x x x Farbe anpassen x x - x x beschriften x x (1) x x x Label-Größe anpassen x - x - - Label-Farbe anpassen x - - x x Labels rotieren (90°) x - x x - Achsentitel Größe anpassen x - x - - Farbe anpassen - - - x - Position ändern (Abstand von Achse) - - x - - Datenbereich Hintergrundfarbe ändern x (2) x - - x Hintergrundbild hinzufügen - - - - - hinein-/herauszoomen x - x (3) x x Bei Start Teilbereich darstellen x - x (3) x Datenbereich verschieben (rechts/links oder x - x (3) x x hoch/runter) Gitternetz hinzufügen/ausblenden x x x x x Gitternetzfarbe anpassen x x x x - Gitternetzstil anpassen - - x x - Datenbeschriftung verfügbar - x - x x Größe anpassen - - - - - Farbe anpassen - x - x - Datendarstellung Farbe anpassen x x x x x Linienbreite etc. anpassen x x x x x Linienstil etc. anpassen x x x x x Legende verfügbar x x x x x Größe anpassen x - x - - Farbe anpassen - - x - - Position ändern - - - - x Implementierungsspezifika Vollbild (kompletter Bereich) x x x x x eingebettet (neben anderen View-Elementen) x x x x x Deklaration per XML (in Layout-XMLs) - x - x - Deklaration per Java-Code x x x (4) x x

Tabelle 1: Die Anmerkungen dazu stehen im Kasten auf Seite 29

28 |

iii iii iiiiii www.ijug.eu

Anmerkungen zur Tabelle: (1) Wenn nichts angegeben, wird De- fault-Text angezeigt (2) Funktionsaufrufe sind da, zeigen aber keine Wirkung (3) Durch Anpassungen des sichtbaren Bereichs und durch Überschreiben der on-TouchEvent(MotionEvent­ ev)­ -Funktionen der View, die das Dia- gramm zeichnet (4) Überschreiben der onDraw()-Me- thode einer View

ausgeliefert. Die Entwickler haben es sich zur Aufgabe gemacht, JFreeChart auf die Android-Plattform zu portieren. Dabei ha- Abbildung 2: AChartEngine – Torten-Diagramm ben sie eine Vielzahl der Funktionen von JFreeChart übernommen, jedoch nicht alle. AFreeChart unterstützt unter ande- rem Balken-, Linien-, Kuchen- und Streu- ungs-Diagramme (siehe Abbildungen 7 bis 9). Die Bibliothek wird bei Google-Code gehostet. Der Einstieg in die Bibliothek von AFree­ Chart gestaltet sich im Vergleich zu den anderen Bibliotheken relativ schwierig. Es existiert weder ein Quickstart-Guide noch ein Tutorial. Die Beispiel-Applikation, die sich auf der Google-Code-Seite herunter- laden lässt, zeigt eine Vielzahl möglicher Diagramme. Jedoch ist der Beispiel-Quell- code, der sich ebenfalls auf dieser Seite einsehen lässt, nicht der, der zu der Appli- kation gehört. Dessen Umfang ist um eini- ges geringer. Das verwirrt noch mehr. Abbildung 3: AChartEngine – Linien-Diagramm Eine Brücke lässt sich bei dieser Biblio- thek zu JFreeChart schlagen. Da die meisten Klassen, die von dort portiert wurden, ihre Namen behalten haben, kann man auf der JFreeChart-Seite nach Verwendung und Hilfe suchen. Andererseits ist aber die Java- Doc sehr gut und hilft auch beim Vertiefen der Bibliothek. Leider gibt es offensichtlich keinerlei Feedback der Entwickler auf Pro- bleme der Nutzer. Im Issue-Tracker auf der Google-Code-Seite sind noch Beiträge von Anfang 2011 offen und unkommentiert. aiCharts aiCharts der Firma ArtfulBits ist eine Biblio- thek, deren Quellcode nicht offen ist und für die man zur Nutzung einen Entwickler- Account und eine einjährige Subscription benötigt. Es besteht jedoch die Möglich- Abbildung 4: AChartEngine – Balken-Diagramm

Java aktuell 3-2013 | 29 Android

Abbildung 5: AndroidPlot – Linien-Diagramm Abbildung 6: AndroidPlot – Balken-Diagramm

Abbildung 7: AFreeChart – Torten-Diagramm Abbildung 8: AFreeChart – Linien-Diagramm

TeeChart TeeChart ist eine Diagramm-Bibliothek der Firma Steema Software. Auch hier benö- tigt man eine Entwickler-Lizenz und eine jährliche Subscription. Die Bibliothek un- terstützt alle gängigen Diagrammtypen wie Linien-, Balken-, Häufigkeiten- und Schnittmengen-Diagramme. Die aktuel- le Version ist 2012, TeeChart lässt sich ab Android-Version 2.1 einsetzen. Das Download-Paket umfasst – wie auch schon bei aiCharts – eine Menge an Abbildung 9: AFreeChart – Balken-Diagramm Tutorials und Beispiel-Anwendungen nebst Quellcode, sodass der Einstieg in die Biblio- thek relativ leicht fällt und schnell vonstat- keit, einen Trial der Versionen 1.7 (stable) gestaltet sich dadurch relativ einfach. Die tengeht. Leider ist die JavaDoc nicht ganz beziehungsweise 2.0 (beta) herunterzula- JavaDoc ist sehr gut. Es finden sich sogar in so hilfreich wie gehofft. Die Klassen-Be- den. Die Bibliothek ist ab Android-Version wichtigen Klassenbeschreibungen Bilder schreibungen bestehen nur aus Copyright- 1.5 einsetzbar. Die Palette der Bibliothek ist und Beispiele, wie man etwas implemen- Informationen und viele Beschreibungen weit gefächert. tieren sollte. So kennt man es auch von der der Funktionen scheinen generiert. Durch den im Download-Paket mitgelie- JavaDoc des Android-API. ArtfulBits bietet Neben dem Support, den Subscription- ferten Quick-Start-Guide und die ausführ- neben dem Support, den man sich mit der User von Steema bekommen, gibt es auf lichen Quellcode-Beispiele ist der Einstieg Subscription sichert, noch ein Forum, in der Webseite auch ein Forum, in dem ge- in diese Bibliothek schnell gemacht. Auch dem die Entwickler der Bibliothek detail- stellte Fragen recht schnell beantwortet das weitere Arbeiten mit der Bibliothek liert auf Fragen der Benutzer eingehen. werden. Als einzige der untersuchten Bib-

30 |

iii iii iiiiii www.ijug.eu

liotheken kann TeeChart Diagramme auch chen es dem Benutzer da schon einfacher: in 3D darstellen. Sie bieten Views an, die in manchen Fällen Die erste Java-EE-7-Spezifikationen sogar per Layout-XML deklariert werden sind final Weitere Bibliotheken können. Es gibt natürlich noch weitere Bibliotheken, Die nächste Version der Java-EE-Spe- mit denen sich Diagramme zeichnen las- Beispiele zum Herunterladen zifikation biegt auf die Zielgrade ein. sen. Dazu gehören unter anderem RChart, • achartengine-demo-debug.apk und Quel- Die ersten vier Spezifikationen sind DroidCharts, Android Chart und Snowdon. len: http://www.buschmais.de/wp-con- bereits Ende März 2013 erfolgreich Diese wurden jedoch aus der Betrachtung tent/uploads/2013/02/achartengine-de- durch den „Final Approval Ballot“ des herausgenommen, da deren letzte Aktivi- mo-debug.apk und http://www.buschmais. Java Community Process (JCP) gegan- tät (hinsichtlich Quellcode-Commits oder de/wp-content/uploads/2013/02/achar- gen und damit inhaltlich final. Die Vor- Foren-/Wiki-Einträgen) mehr als zwei Jahre tengine-demo-src.zip reiter sind: zurückliegt. • androidplot-demo-debug.apk und ChartDroid, dessen letzte Aktivität auch Quellen: http://www.buschmais.de/ • Java Message Service 2.0 (JSR 343, im November 2011 zu verzeichnen ist, bietet wp-content/uploads/2013/02/andro- http://www.jcp.org/en/jsr/detail noch einen weiteren Ansatz der Diagramm- idplot-demo-debug.apk und http:// ?id=343) Erstellung. Statt die Bibliothek in die zu www.buschmais.de/wp-content/up- • Bean Validation 1.1 (JSR 349, http:// erstellende Applikation einzubinden, wird loads/2013/02/androidplot-demo-src.zip www.jcp.org/en/jsr/detail?id=349) von der Applikation vorausgesetzt, dass • afreechart-demo-debug.apk und Quel- • Batch Applications for the Java eine weitere Applikation – in diesem Fall len: http://www.buschmais.de/wp-con- Platform (JSR 352, http://www.jcp. ChartDroid – auf dem Zielgerät vorhanden tent/uploads/2013/02/afreechart-demo- org/en/jsr/detail?id=352) ist. ChartDroid wird dann per Intent gerufen debug.apk und http://www.buschmais. • Java API for JSON Processing (JSR und stellt das Diagramm anschließend be- de/wp-content/uploads/2013/02/af- 353, http://www.jcp.org/en/jsr/detail reit. Dieser Ansatz scheint jedoch nicht prak- reechart-demo-src.zip ?id=353) tikabel genug, um ihn weiter zu verfolgen. Links Mit Ausnahme des Batch JSR 352 Fazit • AchartEngine: http://code.google.com/p/ wurden alle Einstimmig befürwortet. Alle Bibliotheken tun genau das, wozu achartengine und http://www.acharten- Werner Keil, als einziges persönliches sie entwickelt wurden. Und das nicht mal gine.org Mitglied im Executive Committee (EC), schlecht. Abgesehen von AndroidPlot • AndroidPlot: http://androidplot.com äußerte Bedenken im Hinblick auf die decken alle eine weite Palette an Dia- • AfreeChart: http://code.google.com/p/ nicht einheitliche Lizensierung der di- gramm-Typen ab. Benötigt man einen sehr afreechart versen Ergebnisse des JSRs. So finden speziellen Typ, so muss man sich die Be- • aiCharts: http://www.artfulbits.com/pro- sich im JavaDoc Hinweise wie „Co- schreibungen der Bibliotheken ansehen, ducts/android/aicharts.aspx pyright © 2012. All Rights Reserved“, um zu erkennen, ob diese Bibliothek den • TeeChart: http://www.steema.com/ obwohl Technology Compatibility Kit gewünschten Typ unterstützt. Um zu ent- teechart/mobile (TCK) und Referenzimplementierung scheiden, welche Bibliothek man einsetzen (RI) laut original JSR eigentlich einheit- möchte, stellt sich hier nur die Frage, inwie- lich Apache 2.0 lizensiert sein sollten. weit man die aufgelisteten Bibliotheken be- Falko Krische Die Interpretation mag valide sein ziehungsweise deren erstellte Diagramme [email protected] und formell ist dies sicherlich nicht in an die eigenen Wünsche anpassen kann. Ordnung. Bleibt abzuwarten, ob für Ein anderes Entscheidungskriterium die kommenden Versionen hier Abhil- könnte die Art und Weise sein, wie die Dia- fe entsteht. gramme zur Anzeige gebracht werden. So Die aktuell noch in Entwicklung be- bietet zum Beispiel AFreeChart keine Views findliche Version der Java EE 7 konfor- für die verschiedenen Diagramm-Typen, men Referenz-Implementierung ist der sondern der Entwickler muss die „onDraw()“- GlassFish 4.0. Die verfügbaren promo- Methode einer Kind-View überschreiben. ted builds (http://dlc.sun.com.edgesui- In dieser wird dann das Diagramm auf den te.net/glassfish/4.0/promoted/) ent- View-Bereich gezeichnet. Diese Art der halten die vier Spezifikationen bereits. View-Darstellung passt eigentlich nicht in Jeder Interessierte ist eingeladen, die- das Android-Umfeld und ist sicher dem se bereits heute auszuprobieren und Umstand geschuldet, dass diese Bibliothek Falko Krische ist Berater bei der buschmais GbR. Sein Schwer- eventuelle Fehler über den GlassFish von einer Swing-Bibliothek portiert wur- punkt liegt auf der Entwicklung von Unternehmensanwendun- Bugtracker (http://java.net/jira/brow- de. Andere Bibliotheken (AChartEngine, gen im eCommerce- und Enterprise-Bereich. Die Entwicklung von se/GLASSFISH) zu melden. AndroidPlot, aiCharts und TeeChart) ma- Android-Anwendungen ist sein großes Steckenpferd.

Java aktuell 3-2013 | 31 Inhalt

WebID: Das Web als Social Network

Angelo Veltens, http://datenwissen.de

Mit Linked Data lassen sich Daten im Web verbinden. Weitet man das Konzept auf Personen und deren Interaktion aus, entsteht ein „Social Web of Data“. Anstelle Dutzender Accounts bei unzähligen Diensten tritt eine globale Identität, die WebID. Sie dient Angeboten im WWW als Quelle von Profil-Informationen und zur Authentifizierung. Auch als Single Sign-on im Unternehmens-Intranet kann WebID eine Option sein.

Wer heute im Web aktiv ist, muss eine Viel- Sicht. Statt unzähliger Accounts erhalten tare und viele andere Inhalte. Linked Data zahl von Nutzer-Accounts bei unterschied- die Nutzer eine Identität im Web, die sie ist wie dafür geschaffen, diese Beziehun- lichen Diensten anlegen und verwalten. bei Bedarf selbst hosten können und über gen abzubilden. Im Grunde genommen Dutzende Profile wollen ausgefüllt und die sie den genutzten Diensten beliebige erzeugt jeder Klick auf einen „Gefällt mir“- gepflegt werden, verlangen Nutzernamen Profil-Informationen bereitstellen können. Button ein RDF-Tripel. Dessen „Subjekt“ ist und Passwörter. Dies alles scheint im Soci- Dadurch wird das Web selbst zu einem de- der klickende Nutzer, „gefällt“ ist das Prädi- al Web nötig zu sein, um Nutzer zu iden- zentralen sozialen Netzwerk. kat und die dem Nutzer gefallende Seite ist tifizieren und sich mit anderen Nutzern in das Objekt (siehe Abbildung 1). Kontakt bringen zu können. Rückblick: Daten verlinken Doch die soziale Interaktion ist in der In den letzten Ausgaben wurde Linked Freunde von Freunden Regel auf die jeweiligen Dienste begrenzt Data thematisiert. Das WWW ist bereits Die Linked-Data-Prinzipien von Tim Ber- und lässt sich bestenfalls auf sogenann- heute ein Netz aus miteinander verlinkten ners-Lee [1] verlangen zunächst, dass te Social Networks wie Facebook, Twitter Dokumenten. Linked Data weitet dieses „Dinge“ – nicht nur Dokumente – mittels und Google+ ausweiten. Letztere werden Konzept der Links auf Daten aus, indem es URI identifiziert werden. Auch Personen auch oft als Authentifizierungsdienst he- nicht nur Dokumente, sondern auch Dinge können dabei durch einen URI identifiziert rangezogen. Dies führt zu einer Zentrali- über URIs identifiziert und miteinander in werden. Sobald dies geschehen ist, kön- sierung des eigentlich dezentralen Social Beziehung setzt. Dazu dient das Datenmo- nen sie als Subjekt oder Objekt in einem Webs zu monolithischen Social-Network- dell RDF, das Daten als „Tripel“ abbildet. Ein RDF-Tripel verwendet werden. Mein URI Plattformen. Dienste, die sich zur Authen- solches Tripel besteht aus Subjekt, Prädikat lautet etwa „http://me.desone.org/person/ tifizierung auf diese Plattformen verlassen, und Objekt. Subjekt und Objekt werden aveltens#me“ und mit folgendem RDF-Tri- werden von deren API und ihren Beschrän- über das Prädikat miteinander verlinkt. pel sage ich aus, dass ich Tim Berners-Lee kungen abhängig. Im Social Web bestehen vielerlei Bezie- kenne (siehe Listing 1). Mit Linked Data und dem WebID-Pro- hungen: Nutzer knüpfen digitale Freund- In dem Beispiel wird die FOAF-Ontologie tokoll ist ein Ausweg aus dem Dilemma in schaften, veröffentlichen Fotos, Kommen- [2] verwendet, um die Bekanntschafts-

32 |

iii iii iiiiii www.ijug.eu

(ohne „#me“). Letzterer identifiziert ein Do- kument, der erste eine Person (siehe Abbil- dung 2). Über „http://me.desone.org/per- son/aveltens.rdf“ und „http://me.desone. org/person/aveltens.html“ werden zudem zwei verschiedene Repräsentationen des Abbildung 1: „Gefällt mir“-Beziehung als RDF-Graph generischen Dokuments identifiziert (RDF/ XML und HTML). Wie man sieht, ist es leicht, ein Social- Network-Profil mithilfe von Linked Data foaf:knows zu erzeugen und mit anderen Profilen . und Web-Ressourcen zu verlinken. Aber das allein reicht noch nicht, um soziale Listing 1 Interaktionen im WWW zu ermöglichen. Mit bewährten, asynchronen Verschlüsse- lungsmechanismen und dem WebID-Pro- tokoll eignet sich ein FOAF-Profil auch zu a foaf:Person; foaf:familyName “Veltens“; Authentisierung im Web. foaf:givenName “Angelo“; foaf:homepage ; Das WebID-Protokoll foaf:basedNear . Authentifizierung im Social Web bedeutet, nachweisen zu können, dass einem Nutzer Listing 2 ein bestimmtes Profil gehört. Bei zentral organisierten Social-Network-Plattformen beziehung auszudrücken. FOAF steht me.desone.org/person/aveltens#me“ im kann dies durch die Eingabe des entspre- für „Friend of a Friend“ und ist eine weit Browser auf, erhält man eine menschenles- chenden Benutzernamens und des zu- verbreitete Ontologie, die strukturierte bare HTML-Seite. Verlangt man im HTTP-Ac- gehörigen Passworts erfolgen. In einem Aussagen über Personen und deren Be- cept-Header jedoch „application/rdf+xml“, dezentralen Social Web aus verlinkten ziehungen trifft. In Listing 2 ist ein Auszug antwortet der Server mit maschinenles- FOAF-Profilen soll eine Nutzerin nachwei- aus meinem FOAF-Profil in der RDF-Syntax barem RDF/XML. Das RDF-Dokument hat sen können, dass das unter einem bestimm- „Turtle“ zu sehen: auch einen eigenen URI und lässt sich über ten URI abrufbare Profil das ihre ist. Dieser In der ersten Zeile steht der URI des Sub- „http://me.desone.org/person/aveltens. Nachweis soll zudem gegenüber beliebi- jekts, über das Aussagen getroffen werden. rdf“ direkt aufrufen. gen Diensten im Web möglich sein. Es folgen Prädikat-Objekt-Paare, durch Im Web of Data werden Dinge von Do- Das WebID-Protokoll erreicht dies durch Semikolon getrennt. Aus den Daten geht kumenten unterschieden. Eine Person ist geschickte Kombination bewährter Web- hervor, dass es sich um eine Person handelt etwas anderes als deren Profilseite im Web. Standards. Neben einem persönlichen URI („a foaf:Person“). Auch Vor- und Nachna- Daher benötigen beide einen eigenen und einem darunter verfügbaren FOAF- me sind im Profil hinterlegt. Da es sich bei URI. Während ich als Person durch „http:// Profil benötigt ein Nutzer zusätzlich ein der Homepage um eine Web-Ressource me.desone.org/person/aveltens#me“ (Man X.509-Zertifikat und den dazu gehörigen handelt, wird sie über ihren URI verlinkt beachte den Fragment-Identifier „#me“, privaten Schlüssel. Alle heutigen Brow- und nicht wie die Namen als String-Literal der Teil des URI ist) identifiziert werde, lau- ser enthalten eine Zertifikatsverwaltung, hinterlegt. Die große Stärke von Linked tet der generische URI meiner Profilseite in der diese bequem hinterlegt werden Data liegt auch hier in der Verlinkung von „http://me.desone.org/person/aveltens“ können. Auch die Authentifizierung mit beliebigen Ressourcen im Web of Data. „foaf:basedNear“ verweist daher auf den URI der Stadt Braunschweig beim Dienst „geonames.org“. Folgt man diesem Link, erhält man weitere Informationen zur Stadt, beispielsweise deren Einwohnerzahl. Natürlich ist man in einem Profil nicht auf FOAF beschränkt, sondern kann alle im Web verfügbaren Ontologien nutzen und bei Bedarf eine eigene entwickeln. Für die Bedürfnisse von Anwendungen im Social Web ist in Ergänzung zu FOAF die SIOC- Abbildung 2: Dank Content-Negotiation kann unter dem Profil-URI sowohl ein menschen- (HTML, Ontologie [3] geeignet. Ruft man „http:// links) als auch maschinenlesbares Profil (RDF/XML, rechts) ausgeliefert werden

Java aktuell 3-2013 | 33 WebID

solchen Zertifikaten gegenüber einem bereitstehen und die Authentifizierung Web-Server ist keine neue Erfindung, son- über das WebID-Protokoll gewährleistet ist, ping:to . dern eine seit Langem funktionierende bleibt noch die Frage offen, wie die Kom- Technologie. Der neue Weg, den WebID munikation zwischen WebID-Nutzern ab- einschlägt, ist die Verknüpfung dieser Zer- laufen kann. Wie kann ich beispielsweise je- Listing 4 tifikate mit FOAF-Profilen. mandem mitteilen, dass ich ihn oder sie als Zum einen wird im Zertifikat der URI Freund hinzufügen möchte. Natürlich kann rende Social-Web-Anwendungen Links zu des Nutzers als „Subject Alternative Name“ man einfach ein entsprechendes RDF-Tripel Daten anderer Dienste setzen. Abbildung hinterlegt. Ein Server, der die Authentifi- im eigenen Profil ergänzen, doch möchte 4 zeigt, wie das Profil der WebID-Nutzerin zierung durchführt, kann den URI auslesen man sein Gegenüber vielleicht über diesen „Alice“ mit verschiedenen Inhalten im und die dort hinterlegten Daten abrufen. Link informieren, ihr die Gelegenheit ge- Social Web verlinkt ist. In diesem fiktiven Um zu beweisen, dass dieses Profil tatsäch- ben, die Freundschaft zu bestätigen und Beispiel hostet Alice ihr FOAF-Profil selbst lich dem Nutzer gehört, fügt dieser neben einen Backlink zu setzen. und hat sich mit ihrer WebID bei einem den gewünschten Profildaten auch seinen Dazu gibt es einen „Pingback“-Mecha- Bilderdienst eingeloggt. Nach einem Klick öffentlichen Schlüssel dort ein. Die dazu nismus, ähnlich wie man ihn schon von auf den dortigen „Gefällt mir“-Button wird nötigen Prädikate stellt die Cert-Ontologie Blogs kennt. Verlinkt eine Ressource auf der in Alices Profil angegebene Pingback- [4] zur Verfügung (siehe Listing 3). eine andere, kann sie die Information darü- Dienst benachrichtigt, der daraufhin ein Der öffentliche Schlüssel ist vom Typ ber über HTTP-POST an einen bestimmten RDF-Tripel im FOAF-Profil ergänzt. Alice „cert:RSAPublicKey“ und wird über das URI senden. Welcher URI das ist, kann die hat außerdem im Blog eines Freundes ei- Prädikat „cert:key“ mit der entsprechen- verlinkte Ressource wiederum selbst be- nen Kommentar hinterlassen. Auch dieser den Person verlinkt. „cert:exponent“ und kannt geben. Auch dafür gibt es eine pas- wurde mit ihrem Profil verlinkt, ebenso mit „cert:modulus“ beinhalten die entsprechen- sende Ontologie, das Semantic Pingback dem Blogartikel, auf den er sich bezieht. den Daten des Schlüssels. Optional kann Vocabulary [5]. Das folgende Listing gibt Eine Vielzahl von kleinen, auf eine Kern- der Schlüssel auch über ein „rdfs:label“ be- über das Prädikat „ping:to“ an, dass sich aufgabe spezialisierten Diensten kann sich nannt werden. Die Zusammenhänge sind der Pingback-Dienst von „my-profile.eu“ so zu einem Social Web of Data vernetzen. in Abbildung 3 schematisch dargestellt. um eingehende „Pings“ zu meinem Profil In der Summe bieten diese Dienste ihren Authentisiert sich nun eine Nutzerin kümmert (siehe Listing 4). Nutzern weit mehr Möglichkeiten als zen- über ihr Zertifikat an einem Web-Server, Logge ich mich mit meiner WebID bei tralisierte Social-Network-Plattformen und kann dieser das Profil abrufen und die digi- „my-profile.eu“ ein, bekomme ich einge- dennoch entfällt die Notwendigkeit, für tale Signatur mithilfe des dort hinterlegten hende „Pings“ in der Web-Oberfläche an- diese Vielfalt mehrere Accounts zu führen. öffentlichen Schlüssels prüfen. Das Web­ gezeigt. Im Artikel „Friending on the Social Die Herausforderung ist jedoch noch, dass ID-Protokoll setzt hier also auf bewährte Web“ haben Henry Story, Andrei Sambra viele Dienste WebID unterstützen müssen Public-Key-Authentifizierung, um die Zu- und Sebastian Tramp semantische Ping- und die Handhabung ähnlich einfach wer- gehörigkeit des FOAF-Profils zum Nutzer backs näher beschrieben [6]. den muss wie die von Facebook & Co. nachzuweisen. Diese Vorgehensweise ist nicht nur si- Daten-Silos überwinden Semantische Zugriffskontrolle cher, sondern auch benutzerfreundlich. Mit Linked Data und WebID kann es gelin- Ein FOAF-Profil muss keinesfalls komplett Ein Klick auf einen Link genügt, um sich gen, die abgeschotteten Daten-Silos des öffentlich sein. Über semantische Access gegenüber beliebigen Diensten im Web Web 2.0 zu öffnen und ein echtes Social Control Lists (ACL) ist es möglich, genau zu authentisieren. Weder müssen sich Nut- Web zu spinnen. Da sowohl Personen als zu definieren, wer welche Informationen zer komplizierte Passwörter merken, noch auch Inhalte über ihre URIs global ver- sehen darf. Diese ACL funktionieren ähn- müssen sie ihren URI eintippen. Denn letz- linkbar sind, entfällt die Notwendigkeit lich, wie man es bereits von Dateisyste- terer ist bereits im Zertifikat enthalten. eines zentralen Social-Network-Dienstes. men kennt, nur dass nun Personen und Wie auch im dokumentenbasierten WWW Gruppen über URIs identifiziert werden. Digitale Freundschaften schließen Links zu beliebigen anderen Seiten mög- Angenommen, Alice wird durch „http:// Nachdem nun Nutzerdaten im FOAF-Profil lich sind, können auf Linked Data basie- me.example.org/person/alice#me“ iden- tifiziert und stellt unter diesem URI einige unkritische Informationen über sich öf- cert:key <#publickey>. fentlich. Gleichzeitig will sie aber engen Freunden auch Zugriff auf ihr Geburtsda- <#publickey> tum und ihre Telefonnummer geben. Dazu a cert:RSAPublicKey; rdfs:label “Angelos Public Key“; hinterlegt sie diese Daten im Dokument cert:exponent 65537; „http://me.example.org/person/alice/pri- cert:modulus “ACE0[...]“^^. vate“ und verlinkt es in ihrem eigentlichen Profil (siehe Listing 5). Man beachte, dass Listing 3 in diesem Beispiel der relative URI „private“

34 |

iii iii iiiiii www.ijug.eu

Verfahren (SSO). Selbst wenn Mitarbeiter- daten über mehrere Systeme verteilt sind, können diese als Grundlage für ein unter- nehmensweites SSO dienen. Die Systeme müssen dazu lediglich die Daten, wie oben beschrieben, als RDF bereitstellen. Ein zen- traler Authentifizierungsdienst mit Kennt- nis aller Legitimationsdaten ist jedoch nicht notwendig. Insbesondere, wenn konsequent auf Linked Data gesetzt wird, können Unter- nehmen darüber hinaus auch von verbes- sertem Wissensmanagement profitieren. Mit Linked Data und semantischen Tech- nologien lässt sich Wissen organisieren und besser auffinden. Oft steht ein solches Wissensmanagement jedoch vor dem Pro- blem, dass Informationen nicht in den ge- eigneten Formaten vorliegen. Abbildung 3: Schematische Darstellung der Beziehungen zwischen Nutzer, Zertifikat und FOAF-Profil Identifiziert man Mitarbeiter über WebID, können RDF-Tripel als Nebenprodukt der genügt, da das Dokument in der Pfadhie- WebID-Protokoll authentifizieren, die ACL täglichen Arbeit entstehen. Angenommen, rarchie direkt unterhalb des öffentlichen auswerten und anschließend den Zugriff eine Mitarbeiterin liest im Unternehmens- Profil-Dokuments liegt. Nun gilt es noch, verweigern oder gestatten. Wiki die Dokumentation über ein Web- den Zugriff auf die privaten Informationen Wer WebID ausprobieren möchte, kann Framework. Sie bekommt dort einen Button zu schützen. Dazu hinterlegt Alice eine sich leicht bei „http://my-profile.eu“ ein „kenne mich aus“ zur Verfügung gestellt. Autorisierung in der ACL-Ontologie [7] in Profil anlegen. Dabei wird ein Zertifikat im Ein Klick darauf verlinkt ihre WebID entspre- ihrem privaten Dokument (siehe Listing 6). Browser erzeugt und installiert. Das zuge- chend mit dem Web-Framework. Projekte, Das Beispiel nutzt nicht mehr die Turtle- hörige FOAF-Profil wird bei „my-profile.eu“ die gerade planen, das Framework einzu- Syntax, sondern die ähnliche, aber mächti- gehostet. Anschließend kann man sich mit setzen, sehen diese Beziehung und können gere Notation 3. Da die ACL selbst keinen seiner WebID beispielsweise bei „http:// das Fachwissen der Mitarbeiterin bei Bedarf eigenen URI benötigt, ist sie in den ersten picserv.desone.org“ anmelden und dort zu Rate ziehen. Die dazu nötigen Kontakt- fünf Zeilen in eckigen Klammern als soge- ein Bild hochladen. Die nächste Ausgabe daten sind im FOAF-Profil ersichtlich. nannter „blank node“ hinterlegt. Das Prä- wird den praktischen Einsatz von WebID dikat „acl:accessTo“ teilt mit, welche Res- intensiver behandeln und zeigen, wie eine source durch die ACL geschützt wird. Das Anwendung Nutzer über WebID authenti- leere Klammernpaar „<>“ stellt im Grunde fizieren kann. wieder einen relativen URI dar, verweist also auf das aktuelle Dokument „http:// Linked Data und WebID im Unternehmensnetz me.example.org/person/alice/private“. WebID kann auch für den Einsatz im Unter- Über „acl:mode acl:Read“ wird ausgesagt, nehmens-Intranet eine Option sein. Zum dass es um den Lesezugriff geht. einen eignet es sich als Single-Sign-on- „acl:agentClass“ schließlich legt fest, wer zugriffsberechtigt ist. Das Prädikat ver- weist auf einen Typ, dem eine Ressource angehören muss, um Zugriff zu erlangen. Über „acl:agentClass foaf:Person“ könnte man beispielsweise allen Personen Zugriff auf eine Ressource gestatten. Alice will ihre Daten jedoch nur engen Freunden zugänglich machen und gruppiert diese daher in einem eigenen Typ „#closeFriend“. Ein Web-Server oder eine Web-Anwen- dung, die das Profil von Alice beherbergt, kann nun bei versuchtem Zugriff auf die private Ressource den Nutzer über das Abbildung 4: Verlinkung des WebID-Profils von Alice mit Inhalten im Social Web

Java aktuell 3-2013 | 35 WebID

bringt WebID die soziale Komponente in [5] http://purl.org/net/pingback # In http://me.example.org/person/alice/private [6] http://bblfish.net/tmp/2011/05/09 dieses Web. Nicht nur Dinge werden durch [7] http://www.w3.org/ns/auth/acl foaf:birthday “11-30“; URIs identifiziert, sondern auch Personen. foaf:phone . Durch Links lassen sich die URIs dieser Personen mit den Dingen im Web in eine # In http://me.example.org/person/alice Beziehung setzen. Die sozialen Beziehun- gen der Nutzer untereinander lassen sich Angelo Veltens foaf:givenName “Alice“; rdfs:seeAlso . ebenso abbilden wie die Verbindungen zu [email protected] den Inhalten, die sie im Web erzeugen und http://datenwissen.de Listing 5 teilen. Die Möglichkeiten, die uns heute auf Social-Network-Plattformen geboten werden, lassen sich so auf das gesamte [ offene Web ausweiten. Es entsteht eine acl:accessTo <>; direkte Interaktion zwischen den Profilen acl:mode acl:Read; der Nutzer, die sie bei Bedarf selbst hosten acl:agentClass <#closeFriend> können, und der Vielzahl an Diensten im ]. Web. Die Notwendigkeit für eine zentrale <#closeFriend> is rdf:type of Plattform entfällt ebenso wie das stän- , dige Anlegen von Accounts bei neuen . Diensten.

Angelo Veltens studierte Angewandte Informatik an der Dualen Listing 6 Referenzen Hochschule Baden-Württemberg Karlsruhe und befasste sich in [1] http://www.w3.org/DesignIssues/LinkedData. Studienarbeiten und Abschlussarbeit mit Linked Data und seman- Fazit html [2] http://xmlns.com/foaf/spec tischem Wissensmanagement. Heute ist er als Software-Entwickler Während Linked Data das Web aus Doku- [3] http://sioc-project.org in Braunschweig tätig, arbeitet in seiner Freizeit am „Social Web of menten zu einem Web aus Daten erweitert, [4] http://www.w3.org/ns/auth/cert# Data“ und referiert auf Konferenzen zu diesem Thema.

Berliner Expertenseminare • Wissensvertiefung für Oracle-Anwender • Mit ausgewählten Schulungspartnern • Von Experten für Experten

10./11. September 2013 Buchen Sie 2 Tage englischsprachige Intensiv-Schulung zum Thema JavaServer Faces (JSF 2.2), dem Standard Web-Appli- kations-Framework für Java EE. mit Ed Burns

www.ijug.eu www.doag.org

36 |

iii iii iiiiii www.ijug.eu

Vermittlungsinstanzen sind gefragt

Tobias Hartwig, Red Hat GmbH

Cloud-Computing, Software für mobile Endgeräte und Big Data rücken die Middleware in das Blickfeld von Entwicklern. Open-Source-basierte Middleware vereinfacht die Erstellung der dazu benötigten anspruchs- vollen Anwendungen.

In großen Unternehmen ist die IT-Infra- Die meisten Unternehmen kämpfen nigen. Darüber hinaus kann Middleware struktur historisch gewachsen und meist auch heute noch mit einer Vielzahl isolier- entscheidend dazu beitragen, Geschäfts- heterogen. Sie setzt sich aus unterschied- ter Anwendungs- und Informationssilos, prozesse zu optimieren, zu automatisie- lichen Hardware- und Betriebssystem- die eine Falle für Geschäftsdaten darstellen ren, zu dynamisieren und damit effizienter Plattformen, verschiedenen Datenbanken und komplexe Abstimmungen zwischen zu gestalten. und File-Systemen sowie einer Mischung den Anwendungen erforderlich machen. aus Standard-Applikationen und Individu- Middleware schafft Abhilfe und sorgt für Innovation und Entwickler-Produktivität al-Software zusammen. Viele Geschäftspro- die Interoperabilität von Anwendungen, Das Einsatzspektrum von Middleware hat zesse greifen dabei auf mehrere Anwen- ermöglicht den Aufruf von Diensten, die in sich seit einiger Zeit schon deutlich erwei- dungen zu, die koordiniert werden müssen. den unterschiedlichsten Programmierspra- tert, nachdem eine Vielzahl neuer interner Für Unternehmen wird es auch immer wich- chen implementiert wurden und liefert und externer Datenquellen sowie Anwen- tiger, sich schnell und zielgerichtet den dy- Endgeräten jeder Art Verzeichnis- und Ver- dungen auf den unterschiedlichsten mo- namischen Marktbedingungen anpassen mittlungsdienste zum Zugriff auf entfernte bilen Endgeräten und aus den verschiede- zu können. Die Herausforderungen kön- Clients. Damit vereinfacht Middleware den nen Cloud-Modellen dazugekommen sind. nen dabei sehr unterschiedlich sein – neue Datenzugriff und senkt die Entwicklungs- Als Folge hat die Komplexität massiv zuge- IT-Lösungen, die unternehmenskritische und Administrationskosten. Die wichtigs- nommen. Web- und Java-Entwickler benö- Geschäftsprozesse unterstützen sollen, ten Vorteile aus Business-Sicht: Middle- tigen flexible Entwicklungs-Plattformen, erfordern einen hohen Grad an Flexibilität, ware bietet vielfältige Möglichkeiten, um um anpassungsfähige Anwendungen zu um heutigen und künftigen fachlichen An- die Produktivität der Entwickler zu steigern erstellen. Die Entwickler-Produktivität spielt forderungen optimal gerecht werden zu und den Markteintritt von Produkten und hierbei auch eine entscheidende Rolle. In können. digitalen Dienstleistungen zu beschleu- diesem Zusammenhang hat der Open-

Abbildung 1: Das Produktportfolio von JBoss Enterprise Middleware auf einen Blick

Java aktuell 3-2013 | 37 Middleware

Abbildung 2: Open-Source-Middleware für Unternehmen muss zuverlässig und stabil laufen

Source-Ansatz eine besondere Bedeutung, in Zukunft weitere Gerätetypen, darun- sichere Lösungen, um heute schon unter- denn er erweist sich als zentraler Inno- ter beispielsweise auch neue Formen von schiedlichste Deployment-Paradigmen vationstreiber. Die Entwicklung wird in Sensoren, mit denen sich automatisch unterstützen zu können − physisch, virtu- Community-Projekten durch eine Vielzahl laufende Prozesse überwachen lassen. ell, in privaten, öffentlichen oder hybriden von Beteiligten vorangebracht, die aktu- Um die zunehmend heterogenen Mobil- Clouds, und das, ohne die Anwendungen elle Themen und Trends sehr schnell auf- geräte bedienen zu können, werden Ent- dafür jeweils anpassen zu müssen. greifen und in Software umsetzen können. wickler verstärkt auf Open-Source-fähige Unternehmen wollen zudem das Know- Plattformen wie Red Hats JBoss Enterprise Middleware und Frameworks zurückgrei- how der Entwickler, das sie beim Aufbau Middleware (siehe Abbildung 1) unterstüt- fen, die offene Standards unterstützen einer Applikation für den internen Ein- zen aktuelle Technologien sowie offene und vom grundlegenden Java-Paradigma satz von Applikationen benötigen, auch Standards und ermöglichen eine schnelle „write once, run anywhere“ profitieren bei Cloud-Anwendungen einsetzen. Dazu und produktive Entwicklung. Open-Sour- (siehe Abbildung 2). bietet sich Middleware an, die im Web die ce-Plattformen sind damit auf die neuen gleichen Funktionen bereitstellt wie im lo- Herausforderungen durch mobile Anwen- Middleware und die Cloud kalen Netzwerk. dungen, Cloud Computing und Big Data Beim Cloud-Computing sind vor allem die Entwickler müssen hier vor allem die gut vorbereitet. Platform-as-a-Service-Lösungen (PaaS) auf hohen Anforderungen an die Sicherheit Middleware angewiesen. PaaS-Dienstleis- der Daten berücksichtigen. Behörden, aber Anforderungen durch mobile Anwendungen ter stellen in der Cloud eine Plattform für auch Finanzdienstleister und Unternehmen Die Zahl mobiler Anwendungen ist enorm die Entwickler von Web-Anwendungen aus dem Gesundheitswesen, die neue Tech- gestiegen. Immer mehr Anwender wollen zur Verfügung. Sie bieten ihren Kunden nologielösungen für interne und externe von unterwegs genauso einfach auf ihre eine Laufzeitumgebung, die sich einfach User einsetzen wollen, legen großen Wert gewohnten Daten und Applikationen zu- administrieren lässt und die den gesamten auf die Common-Criteria-Zertifizierung. Die greifen wie an ihrem Schreibtisch. Entspre- Lebenszyklus einer Software vom Design JBoss Enterprise Application Platform (EAP) chende Apps für das iOS von Apple und für über die Entwicklung, den Test bis hin zum beispielsweise erfüllt den internationalen die Android-Welt gibt es bereits und nahe- Betrieb der Anwendungen in der Cloud Common-Criteria-Sicherheitsstandard für zu täglich kommen neue hinzu. Zum einen umfasst. Parallel dazu geht es darum, nicht Behörden und Unternehmen auf einer der integrieren immer mehr Unternehmen mo- nur den reinen Applikationsserver über die höchsten Stufen, dem Evaluation Assurance bile Anwendungen in komplexe Backend- Cloud zur Verfügung zu stellen, sondern Level 4+. Applikationen wie CRM- oder ERP-Systeme. ihn auch mit anderen Anwendungen zu Zum anderen fächert sich das Angebot an verknüpfen und mit einem Workflow- und Big Data Mobilgeräten in Zukunft weiter auf. Zu den Prozess-Management auszustatten. Ge- Neben mobilen Anwendungen und Cloud- Smartphones und Tablet-PCs gesellen sich fragt sind flexible und vor allem zukunfts- Computing ist Big Data momentan das drit-

38 |

iii iii iiiiii www.ijug.eu

Neue Standards für Middleware eine vereinfachte Paketierung. wendungen sind nicht proprietär, Standards vereinfachen die Software- sondern laufen auf allen mobilen Ge- Entwicklung im Bereich Middleware und • BPMN 2.0 räten und PCs. HTML 5 ist damit vor sorgen dafür, dass die Kommunikation Immer mehr Unternehmen nutzen allem für mobile Anwendungen von zwischen den Applikationen reibungslos Business Model and Notation 2, kurz Bedeutung. funktioniert. Dabei sind folgende Stan- BPMN 2.0. Dahinter steckt eine grafi- dards von besonderer Bedeutung: sche Spezifikationssprache, mit der • Advanced Messaging Queuing Pro- sich Geschäftsprozesse in Diagram- tocol (AMQP) • Java EE 6 men darstellen lassen. Die entstehen- Das AMQP ist noch verhältnismäßig In der Spezifikation der Java Enter- den Grafiken haben große Ähnlichkeit neu und wurde erst im Herbst 2011 prise Edition werden Standards de- mit Flussdiagrammen. Das Ziel von in der Version 1.0 verabschiedet. Be- finiert, die die Interoperabilität von BPMN ist es, einen grafischen Standard teiligt an der Entwicklung waren ne- Softwarekomponenten und Diens- zu entwickeln, den alle an einem Ge- ben IT-Unternehmen wie Red Hat, ten sicherstellen soll, die primär in schäftsprozess Beteiligten verstehen. VMware und Microsoft auch die IT- der Programmiersprache Java erstellt Abteilungen diverser Finanzinstitute werden. Dies ermöglicht die Realisie- • HTML 5 wie etwa JPMorgan, Bank of America rung verteilter, mehrschichtiger Ap- Der aktuelle Standard der Hyper- oder die Deutsche Börse. Bei AMQP plikationen. Die aktuelle Version Java text Markup Language vereint Tech- handelt es sich um ein herstellerneu- EE 6 führte einige Neuerungen zur Er- nologien, die den Browser von einem trales, freies und offenes Protokoll, das höhung der Entwicklerproduktivität Dokument-Betrachter in eine An- den Nachrichtenaustausch zwischen ein. Beispiele sind erweiterte Annota- wendungs-Plattform für Webappli- unterschiedlichen Systemen ermög- tionen, die Unterstützung eines einfa- kationen verwandeln – und zwar auf licht. AMQP kommt primär im Finanz- chen Objektmodells („POJO”) oder allen Plattformen. Das heißt, die An- sektor zum Einsatz.

te große Thema der IT-Welt. Marktforschern ten kontinuierlich ausweiten, weil beispiels- re“ profitieren. Middleware beschleunigt wie IDC zufolge wächst das Datenvolumen weise neue Märkte erschlossen werden und damit die Entwicklung anspruchsvoller in den Unternehmen um jährlich bis zu 60 neue Vertriebskanäle hinzukommen, müs- und komplexer Applikationen vor allem Prozent. Aufgabe von Big-Data-Anwen- sen Middleware technisch skalierbar und bei Cloud-Computing, Software für mobile dungen ist es, Informationen aus einer gleichzeitig die betriebswirtschaftlichen Endgeräte und Big Data. Leistungsfähige Vielzahl unterschiedlichster Datenquellen Kosten transparent kalkulierbar sein. Nicht Middleware unterstützt den Einsatz der am besten in Echtzeit aufzubereiten und nur technisch, auch unter Kostenaspekten Applikationen in physischen und virtuel- zu analysieren. Solche Anforderungen kann Open-Source-Middleware hier punk- len Umgebungen, aber auch in privaten, entstehen beispielsweise im Finanzwesen ten. Unterstützt eine Middleware-Lösung öffentlichen oder hybriden Clouds. beim Überwachen von Börsengeschäften, offene Standards, ist es einfach und kos- bei Telekommunikationsunternehmen, bei tengünstig möglich, bestehende Lösun- Internet-Suchmaschinen oder in großen gen zu ergänzen, zusätzliche Bausteine mit Online-Shops, bei denen jeden Tag für Tau- vorhandenen zu verbinden und nahezu Tobias Hartwig sende von Kunden riesige Datenmengen beliebig miteinander zu kombinieren. [email protected] anfallen. Vielfach geht es darum, sowohl große Fazit Mengen strukturierter als auch unstruk- Middleware vereinfacht die Arbeit der Pro- turierter Information einbeziehen zu müs- grammierer und steigert deren Produktivi- sen. Die Aufgabe der Middleware besteht tät, da sie den Aufwand bei der Erstellung darin, die gewonnenen Informationen von Applikationen reduziert. Deutliche Vor- über eine stabile und an offenen Standards teile zeigen sich beim Testen, bei der Inte­ ausgerichtete Prozess- und Analyseplatt- gration in bestehende Umgebungen sowie an anderen Applikationen verfügbar bei der Skalierung und der Verwaltung. Mit zu machen oder weiterzugeben. moderner Middleware, die sich an offenen Standards orientiert, können sich Entwick- Skalierbarkeit ist gefragt ler voll auf die inhaltlichen Anforderungen Auch dann, wenn Unternehmen schnell einer Applikation konzentrieren und dabei Tobias Hartwig ist Business Unit Manager EMEA für JBoss wachsen und ihre geschäftlichen Aktivitä- vom Vorteil des „write once, run anywhe- Enterprise Middleware bei Red Hat.

Java aktuell 3-2013 | 39 Wicket

Anspruchsvolle Web-Anwendungen mit Wicket 6

Jochen Mader, Senacor Technologies AG

Wicket 6 stellt mit seiner starken Ausrichtung an objektorientierten Prinzipien nahezu einen Exoten unter den Web-Frameworks dar. Strikte Trennung von Markup und Logik, transparente Ajax-Integration und ausge- zeichnete Unit-Test-Unterstützung sind nur ein paar der Highlights, die in diesem Artikel beleuchtet werden.

Komponentenorientierung ist ein wichtiger des Artikels werden verschiedene Beispie- Guice, CDI) zu zwingen, wird ein API be- Bestandteil moderner Rich-Client-Frame- le anhand des Quickstarts aufgebaut. reitgestellt, das eine Integration erleichtert. works wie Eclipse oder NetBeans. Viele der Natürlich kann man auf vorgefertigte Mo- gängigen Web-Frameworks fühlen sich im dule zurückgreifen („wicket-spring“, „wicket- Gegensatz dazu etwas altbacken an. Oft ar- guice“ und „wicket-cdi“). Diese sind Teil der beitet man an den Konzepten der Objekto- Kern-Distribution, jedoch grundsätzlich von rientierung vorbei und „Copy & Paste“ wird Wicket losgelöst. Somit hat man nun die plötzlich wieder zum beliebten Entwick- Qual/Freude der Wahl. Eines wird jedoch lungsmuster. Seit ein paar Jahren hat hier vorausgesetzt: Ein Servlet-2.5-Container ein Umdenken eingesetzt. Verschiedene sollte es schon sein. Web-Frameworks haben damit begonnen, die Konzepte der Komponentenorientie- Komponenten rung zu adaptieren. Die herausragendsten Komponenten bilden die Basis einer Viel- Vertreter dieser Gattung sind nach Ansicht zahl von UI-Frameworks, angefangen von des Autors Wicket und sein geistiger Vater Eclipse RCP über NetBeans RCP bis hin zu Tapestry. Ihr Ziel ist es, die Entwicklung von JavaFX. Seit einigen Jahren hat sich hier Web-Anwendungen wieder näher an den auch eine kleine Gruppe von Web-Frame- Entwickler zu bringen und Web-Anwen- works etabliert, mit ihren bekanntesten dungen zu dem zu machen, was sie eigent- Vertretern Tapestry, JSF und eben auch Wi- lich sind: Objektorientierte Anwendungen, cket, die genau diesem Ansatz folgen. die HTML produzieren. Was Wicket von diesen abhebt, ist die Abbildung 1: Quickstart-Struktur strikte Trennung von Markup und Logik. Quickstart Während man bei beinahe allen Konkur- Nach dem Ausführen von „mvn archetype: Konfiguration renten die Möglichkeit hat, verschiedene generate - DarchetypeGroupId=org.apache Auf XML-Konfigurationsdateien wird voll- Formen von Skriptsprachen (JUEL, Groovy .wicket -DarchetypeArtifactId=wicket-arche ständig verzichtet. Alle relevanten Konfigu- etc.) direkt im Template zu verwenden, sieht type-quickstart­ -DarchetypeVersion=6.6.0 rationsoptionen werden in der „WicketAppli- Wicket diese Funktion nicht vor. Im Gegen- -DgroupId=com.senacor -DartifactId=demo- cation“ festgelegt. Wie heutzutage üblich teil: Man bemüht sich, diese Arbeitsweise DarchetypeRepository=https://repository. regiert auch hier das Prinzip von „Conventi- komplett zu verhindern, indem ein Templa- apache.org/ -DinteractiveMode=false“ hat on over Configuration“, Anpassungen sind te ein simples XHTML-Dokument mit erwei- man eine vollständig lauffähige Wicket- also nur in Ausnahmefällen notwendig. tertem Namespace ist. Mehr dazu später. Anwendung erzeugt. Besonders faule Men- Falls man doch mal etwas machen muss, Egal, ob eine vollständige Page oder ein schen können sie sich auch auf der Wicket- kann man in der „init“-Methode via „Getter“ Label – alle Wicket-Komponenten unterlie- Homepage erzeugen lassen. Diese lässt sich auf die verschiedenen Interfaces aus „org. gen einer festgelegten Struktur. Abbildung entweder direkt per „mvn jetty:run“, über die apache.wicket.settings“ zugreifen. Außer- 2 zeigt den entsprechenden Aufbau. Hier im Test-Ordner hinterlegte „Start“-Klasse oder dem lassen sich hier Page-Mounts definie- gibt es die eigentliche Komponentenklas- als Web-Anwendung in der IDE starten. ren, mit denen Pages auf feste URLs gelegt Ein Quickstart eignet sich beispielswei- werden können. Ein Blick in „JavaDoc“ zu se als Ausgangspunkt für eigene Anwen- den „mount“-Methoden verrät die Details. dungen, als Anhang für einen Bug-Report oder um mal kurz etwas außerhalb der Unmanaged eigentlichen Anwendung ausprobieren zu Wicket ist ein „Unmanaged“-Web-Frame- können. Abbildung 1 zeigt den Inhalt der work. Statt den Entwickler zur Verwendung frisch erzeugten Anwendung. Im Verlauf eines bestimmten Glue-Layers (Spring, Abbildung 2: Komponente

40 |

iii iii iiiiii www.ijug.eu

Damit wird der Komponente beschrieben, public class HomePage extends WebPage { public HomePage(final PageParameters parameters) { wie sie an ihre Daten kommt und Eingaben ... zurückgibt. Ein Label wird „IModel.getOb- final IModel input1 = Model.of(“default1“); ject()“ erst bei seiner Darstellung aufrufen. final IModel input2 = Model.of(“default2“); Gleichzeitig werden Eingaben via „IModel. Form testForm = new Form(“testForm“) { setObject(Object)“ entgegengenommen. @Override protected void onSubmit() { Dieses simple Interface hat gleich mehrere System.out.println(“Input1 “+input1.getObject()); Vorteile. System.out.println(“Input2 “+input2.getObject()); Der wichtigste ist, dass das Laden von } Daten entspannt erfolgt. Daten werden nur }; dann abgerufen, wenn sie tatsächlich not- TextField inputField1 = new TextField(“inputField1”, input1); TextField inputField2 = new TextField(“inputField2”, input2); wendig sind, und der entsprechende Aufruf geschieht zum Zeitpunkt der Verwendung. add(testForm Der zweite Vorteil liegt in der Möglichkeit, .add(inputField1) Modelle zu verketten. Listing 4 zeigt dieses .add(inputField2) Konzept. Das „userModel“ greift auf einen ); Service zu, um eine bestimmte User-Entität } } zu laden. Das „passwordField“ verwendet ein „PropertyModel“, das eine „Property- Listing 1: HomePage.java Expression“ benutzt, um selbige am verket- teten User-Model zu finden. Das „getObject“ ... liefert hier den String aus der „password“-

Property des Users. Ein „setObject“, das durch eine Eingabe im „TextField“ ausgelöst wird, schreibt in eben diese. Der wichtigste Aspekt dieses Konstrukts ist aber die voll-