Speicherverbrauch von JEE-Anwendungen: Ein Beispiel aus der Praxis

JPA bietet viel Komfort beim Laden und Bearbeiten von Daten aus einer relationalen Datenbank. Nur darf man bei allem Komfort nicht vergessen, dass bei jeder Operation hinter den Kulissen viel geschieht. Am Beispiel von EclipseLink in einer Wicket-Anwendung zeigt sich, dass man beim Thema Speicherverbrauch auf größere Überraschungen stoßen kann.

Der Ausgangspunkt dieser Geschichte sind OutOfMemoryExceptions, die eine Web-Anwendung nach einigen Tagen Betriebsdauer warf. Ein Blick per JConsole in das Innere der Anwendung zeigte schnell, dass die durchschnittliche Session eines Besuchers knapp ein Megabyte groß war: bei vielen Besuchern ein extrem hohen Wert. Wie konnte das geschehen?

Weiter lesen…

Migration zu Apache Wicket 6: Was ist zu tun?

Apache Wicket hat viele Stärken. API-Kompatibilität zwischen den großen Versionsnummern gehört leider nicht dazu! Was muss man wissen, wenn man ein bestehendes Projekt zu Wicket 6 migrieren möchte?

Der Versionssprung von Wicket 1.4 zu Wicket 1.5 hatte schon für viel Arbeit gesorgt. Die Entwickler hatten nicht nur neue Funktionen hinzugefügt, sondern die API teilweise erheblich verändert haben. Der Wechsel von Wicket 1.5 zu Wicket 6 ist etwas leichter, doch es gibt erneut viel zu tun.

Weiter lesen…

Wie schreibe ich ein Pattern?

Pattern schreiben

Nur was man aufschreiben kann, hat man richtig verstanden! Das Pattern-Format hilft, einen Lösungsansatz so zu verstehen, dass man ihn strukturiert niederschreiben kann.

Auch wenn der große Hype rund um das Thema Patterns schon länger vorbei ist, bleibt das Pattern-Format sehr hilfreich – nicht nur dann, wenn man nach einer Lösung für ein Problem sucht, sondern auch, wenn man schon eine Lösung hat und diese für andere dokumentieren möchte. Dieser Artikel gibt eine kurze Einführung, wie man sein erstes Pattern schreibt und was man dadurch gewinnt.

Weiter lesen…

Was kostet die Welt? Internationalisierung mit den International Components for Unicode (ICU)

Wie heißt „Japan“ auf Türkisch? Wie sortiert man koreanische Begriffe alphabetisch? Und wie viele Pluralformen gibt es im Arabischen? Wer sich ernsthaft mit diesen Fragen beschäftigen muss, kommt kaum an den International Components for Unicode (ICU) vorbei.

Als Java-Entwickler bietet einem die Java 7-Plattform gute Unterstützung, um lokalisierbare Anwendungen zu entwickeln, sowohl im Funktionsumfang als auch bei den unterstützten Sprachen. Jedoch ergeben sich schnell Anforderungen, die Java von Haus aus nicht unterstützt. Glücklicherweise gibt es eine Datensammlung zusammen mit einer Java-Bibliothek, die kaum einen Wunsch offen lässt: Das Common Locale Data Repository (CLDR) zusammen mit den International Components for Unicode (ICU).

Weiter lesen…

Testgetriebene Entwicklung: Test-first oder Test-last?

Testgetriebene Entwicklung (Test-driven development, TDD) sieht vor, die Tests vor dem eigentlichen Produktivcode zu schreiben (Test-first). Wer sich dabei nicht wohl fühlt, kann aber auch mit Test-last Systeme gut strukturieren und durch Tests absichern.

Mein Kollege Lutz hat in seinem Artikel zu Code-Retreats vor kurzem beschrieben, wie man – auch durch testgetriebene Entwicklung – zu einem besseren Entwickler werden kann. Seine Erfahrungen finde ich sehr beeindruckend. Sie haben mir Lust gemacht, ebenfalls an einem Code-Retreat teilzunehmen! Nur von einem der Grundsätze testgetriebener Entwicklung bin ich nicht vollständig überzeugt.

Weiter lesen…

JEE 6 und die Applikationsserver – ein Blick aus zwei Winkeln

JEE 6 ist eine ausgereifte, jedoch sehr komplexe Technologie. Vor allem der Betrieb eines Applikationsservers bringt eine erhebliche Komplexität mit sich. Was bedeutet der Einsatz eines JEE 6-Applikationsservers, vor allem im Zusammspiel von Architekten und Administratoren?

In einem früheren Beitrag habe ich argumentiert, dass ein Applikationsserver wie z.B. Glassfish zwar hilft, ein Projekt schnell zu starten. Langfristig jedoch erschweren JEE-Applikationsserver die Wartung und Weiterentwicklung eines Systems, vor allem, wenn sie aktualisiert werden – und mit ihnen die ganze technologische Basis eines Systems.

Meine Argumente möchte ich nun etwas vertiefen und einen weiteren Blickwinkel hinzufügen.

Weiter lesen…

Designermöbel v2 – oder: Wie migriere ich jede Nacht 227.487 Bilder?

woont.com ist eine der größten Seiten für Designermöbel im Internet. Letzte Woche ist der neue Auftritt live gegangen. Eine der größten Herausforderungen dabei war, die umfangreiche Bildersammlung zu migrieren.

Aufgrund einer strategischen Entscheidung hat sich der Betreiber von woont.com dazu entschlossen, die Technik hinter dem Web-Auftritt vollständig neu zu entwickeln. Im Laufe der letzten Monate ist dabei eine java-basierte Plattform entstanden, die von jetzt an die Basis für jegliche Weiterentwicklung sein wird. Mit JEE 6 und Apache Wicket als Grundlage steht die Plattform auf soliden Füßen.

Weiter lesen…

Freiberufler werden – 5 Gründe, sich in der IT selbstständig zu machen

Auf dem Weg in die Selbstständigkeit

Eine feste Stelle anzunehmen, ist nicht jedermanns Sache. Zwar gibt es gute Gründe, als Angestellter zu arbeiten, aber vieles spricht dafür, Freiberufler werden zu wollen.

Als selbstständiger Softwareentwickler arbeite ich seit jeher freiberuflich. Ich schätze diese Arbeitsweise sehr und empfehle sie gerne weiter. Dabei erlebe ich immer wieder, dass für andere Entwickler der Wechsel von einem festen Arbeitsplatz zur Selbstständigkeit eine große Hürde ist.

Welche Gründe sprechen aus meiner Sicht für die Freiberuflichkeit?

Weiter lesen…

Code a little, Test a little, Deploy a little – Continuous Delivery im Großen

Software-Entwicklung ohne Branches und jede Code-Änderung sofort produktiv setzen. Das klingt abwegig? Die Großen machen es uns vor!

Boris Bokowski von Google hielt einen der beeindruckendsten Vorträge auf der diesjährigen OOP. Er berichtete darüber, wie bei Google Software entwickelt wird:

Weiter lesen…