Kolumne

Altruismus, Profit und IT

Programmierer leiden immer öfter unter Burnouts, größer werdenden Verantwortungsbereichen und einem steigendem Druck, Kunden mehr und mehr Funktionalität zu liefern. Aber welche Rolle müssen Entwickler überhaupt im Geschäftsleben spielen? Und was ist der wahre Zweck eines Unternehmens?

Aus der Java-Trickkiste: Microbenchmarking

Performancemessungen sind notorisch schwierig. Je kürzer ein Stück Code läuft, desto schwieriger wird es, sinnvolle Werte zu ermitteln. Und wenn es um einige wenige Statements geht, überdecken die Effekte des Messens leicht das Verhalten des zu messenden Codes.

Es tut sich was im Web: Servlet 4.0 mit HTTP/2

Mit jeder neuen Java-EE-Version gibt es auch eine neue Servlet-Version. Diese Regel gilt schon seit J2EE 1.2, und sie wird auch mit Java EE 8 Bestand haben. Der Plan lautet, dass mit Java EE 8 Servlet 4.0 ausgeliefert wird. Neu ist allerdings, dass die neue Servlet-Spezifikation auf einer neuen HTTP-Version basiert. Alle bisherigen Servlet-Versionen seit 2.3 basieren auf HTTP/1.1, das es seit 1999 gibt.

Apache Tomcat meets Docker: Webanwendungen als Docker-Images herstellen

Das Docker-Ökosystem ist die ideale Umgebung, um Webanwendungen zu implementieren. Verschiedene Anwendungen auf einer Gruppe von Rechnern isoliert voneinander bereitzustellen, ist unser täglich Brot. Leider ist es mit der viel gelobten Portabilität im Java-Umfeld so eine Sache: Unsere Anwendungen müssen dennoch an die jeweilige Umgebung angepasst werden. Docker-Container können hier helfen, die Anwendungen und ihre Umgebung betriebsbereit und portabel zu produzieren. Wie in den meisten Fällen existieren unterschiedlichste Möglichkeiten, eine Anwendung zu verpacken. In diesem Beitrag werden verschiedene Bereitstellungen von Webanwendungen mit Docker beschrieben.

Version 2.0 der CDI Specification auch in Java SE nutzbar

Bisher ist CDI ein Komponentenframework, das Dependency Injection zur Verfügung stellt, allerdings nur für Java-EE-Anwendungen. Die aktuell gültige Version ist das Maintenance-Release 1.2. Wie wir bereits in der letzten Kolumne berichteten, hat die Spezifizierung von CDI 2.0 aber schon begonnen. Und sie bringt ein durchaus interessantes Feature, mit dem es möglich sein wird, CDI auch außerhalb eines Java-EE-Containers standardisiert zu benutzen. CDI soll in Java SE nutzbar werden. Wir werden in dieser Kolumne vorstellen, wie das API aussehen könnte und was noch fehlt.

Asynchrone Events in CDI 2.0

CDI ist seit der Version 1.0 in Java EE 6 der neue Enterprise-Komponentenstandard. Während es mit CDI 1.1 in Java EE 7 nur ein Minor Update gab, kann für Java EE 8 wieder mit einem größeren Entwicklungsschritt gerechnet werden. Die Spezifizierung von CDI 2.0 hat bereits begonnen. Eines der Themen, die auf der Agenda stehen, ist die asynchrone Verarbeitung von Events. Wir werfen in dieser Kolumne einen Blick auf den aktuellen Stand der Spezifikation und geben einen Ausblick darauf, was für Möglichkeiten asynchrone Events bieten.

Design-Dev-Ops: Benutzerfreundlichkeit ist das A und O

Beim Thema „Benutzerfreundlichkeit“ tendieren wir dazu, an eine Art von zusätzlicher digitaler Service-Schicht zu denken, die über die reine Funktionalitäts- oder Operabilitätsschicht aufgestülpt wird. Benutzerfreundlichkeit wird als eine Eigenschaft einer Oberfläche behandelt, die zwischen dem Nutzer und der Applikationsfunktionalität vermittelt.

Alles valide? Bean Validation in POJOs mittels aspektorientierter Programmierung

Wir berichteten im Rahmen dieser Kolumne bereits über die Neuerungen von Bean Validation 1.1. Besonders erwähnenswert war und ist dabei das neue Feature der Method Validation. Leider ist die Integration dieses Features noch nicht sehr weit vorangeschritten. Bisher ist es nur bei CDI-Beans möglich, sich darauf zu verlassen, dass z. B. ein Parameter, der mit @NotNull annotiert ist, auch wirklich niemals null ist. In allen anderen Situationen hilft es normalerweise nur, die Method Validation aus dem Code heraus „von Hand“ aufzurufen. In dieser Kolumne wollen wir eine alternative Möglichkeit vorstellen. Damit ist es möglich, in beliebigen POJOs auf Method Validation zu setzen.

Testen im Kontext: Integration Testing in Java EE

„Der Begriff Integrationstest bezeichnet […] eine aufeinander abgestimmte Reihe von Einzeltests, die dazu dienen, verschiedene voneinander abhängige Komponenten eines komplexen Systems im Zusammenspiel miteinander zu testen.“ (Wikipedia). Wie kann ich aber eine Menge an abhängigen Komponenten (also in Java EE z. B. EJBs oder CDI-Beans) gemeinsam testen, ohne das Ganze gleich auf meinem Testserver deployen zu müssen? Das Problem ist klar: Moderne Enterprise-Anwendungen basieren auf Dependency Injection. Das bedeutet, dass der Container die Abhängigkeit zwischen den Komponenten auflöst und gegenseitig in die Komponenten injiziert.

Java-Trickkiste: Der JIT-Compiler von Hotspot

Die Hotspot-JVM liest Class-Dateien ein und führt das entsprechende Java-Programm aus. An irgendeiner Stelle „kompiliert“ sie das Programm noch einmal und wendet dabei ausgefeilte Verfahren an, sodass Java-Programme bemerkenswert schnell laufen. Das ist in etwa das, was man beim Entwickeln von Geschäftsanwendungen über den JIT-Compiler wissen muss. Wenn man aber z. B. performancekritischen Code schreibt oder einfach nur neugierig ist, lohnt sich ein Blick hinter die Kulissen.

Reduce to the Max: Microservices

Es gibt wohl kaum ein Thema in der Softwareentwicklung, das derzeit so heiß diskutiert wird wie die Wunderwelt der Microservices. Von „einfach genial“ bis hin zu „alter Wein in neuen Schläuchen“ trifft man auf die unterschiedlichsten Meinungen. Nicht selten begründen sich dabei die verschiedenen Einstellungen der Diskutanten schon in der Auffassung, was sich denn genau hinter dem Begriff „Microservices“ verbirgt. Grund genug für EnterpriseTales, einen Blick hinter die Kulissen zu wagen.

Docker rockt Java: EC2 Container Service mit AWS

Bis vor Kurzem mussten Entwickler noch selbst Docker auf ihren EC2-Instanzen in Amazon Web Services installieren und das Management der Container vollständig selbst übernehmen. Mit der Einführung der Unterstützung von Docker in Elastic Beanstalk und OpsWorks wurde der Aufwand für die Nutzung von Containern bereits reduziert. Auf der Konferenz „AWS re:Invent 2014“ hat Amazon den neuen EC2 Container Service vorgestellt, der die Hürde für das Betreiben von Software in Docker-Containern noch einmal signifikant senkt.

Docker mit Maven steuern

Docker bietet eine alternative Möglichkeit, Java-Applikationen zu bauen und in Produktion zu setzen. Bisher wurden Java-Enterprise-WARs oder -EARs in vorinstallierte Java-EE-Server deployt. Jetzt können die Anwendungen direkt komplett, inklusive des Servers, in Docker-Containern ausgeliefert werden. Der Ausführungskontext wird gleich mit verpackt, und lästige Anpassungen entfallen. Mit dieser Methode können die Container überall laufen und schon in der Entwicklung für den Betrieb zusammengestellt werden.