JBoss AS6: Treffen der sechsten Generationen

Testen leicht gemacht

Komponententests gehören schon seit längerer Zeit zum guten Ton bei der Softwareentwicklung. Eher umständlich gestaltete sich bis dato allerdings das Testen von EJBs, denn dazu musste man auf zusätzliche Frameworks zurückgreifen. Dank des JBoss Embedded AS [14] wird dies nun ebenfalls deutlich vereinfacht. Und zwar kann man im Rahmen von Unit-Tests eine Instanz des JBoss AS eingebettet starten und über das zugehörige API im eigenen Programm darauf zugreifen. Über diese Schnittstelle lässt sich die Applikationsserverinstanz nicht nur starten, stoppen und konfigurieren, sondern auch das Deployment und Undeployment von Archiven ist möglich. Zur Veranschaulichung wollen wir uns dazu ein kleines Beispiel ansehen (Listing 3).

Listing 3
JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "echo.jar")
                            .addClasses(EchoBean.class, EchoLocal.class);

JBossASEmbeddedServer server = JBossASEmbeddedServerFactory.createServer();
server.start();
server.deploy(jar);

Context ctx = new InitialContext();
EchoLocal bean = (EchoLocal) ctx.lookup("EchoBean/local");
System.out.printeln(bean.echo("Hello World!"));

server.undeploy(jar);
server.shutdown();

Das zu testende Archiv wird hierbei programmatisch mittels ShrinkWrap erstellt. Danach wird die Serverinstanz gestartet, die JAR-Datei deployt und über den JNDI-Kontext auf die EJB zugegriffen. Abschließend erfolgen die üblichen Aufräumarbeiten. Sehr viel einfacher geht es nicht mehr!

Auf die Plätze, fertig, los!

Ein weiteres Ziel bei der Weiterentwicklung des JBoss AS war die Verkürzung der Startzeit. Dafür wurde bereits in der 5er-Version der JMX-Microkernel durch den JBoss Microcontainer ersetzt. Ganz neu ist die Möglichkeit des On-Demand-Deployments.

Der Microcontainer wurde im JBoss AS6 auf die Version 2.2.0 gehoben. Dienste für diesen lassen sich nun nicht mehr nur in Form schwergewichtiger MBeans, sondern auch mittels einfacher, leichtgewichtiger POJOs realisieren. Ein Diensteinsatz außerhalb eines Applikationsservers wird so ebenfalls möglich. Der Container verwaltet die Zusammensetzung und die Abhängigkeiten zwischen den Diensten. Durch das modulare Konzept sind auch sehr kleine Konfigurationen möglich, die sich natürlich positiv auf die Startzeit auswirken.

Die Unterstützung des On-Demand-Deployments [15] stellt ein Novum dar. Und zwar wird eine solche Anwendung erst dann deployt, wenn sie tatsächlich angefordert wird. Derartige Applikationen bleiben also grundsätzlich verfügbar, verlängern aber die Startzeit nicht, da das eigentliche Deployment erst beim ersten Aufruf erfolgt. JBoss-Nutzer, die den Applikationsserver während der Entwicklungsphase trotz Hot Deployment immer wieder neu starten müssen, werden von diesem neuen Feature sicherlich begeistert sein.

Solche On-Demand-Anwendungen werden nun nicht mehr in das Deploy-Verzeichnis

psenv::pushli(); eval($_oclass[„JBOSS_HOME“]); psenv::popli(); ?>

/server/./deploy eingespielt, sondern für sie wurde der Ordner

psenv::pushli(); eval($_oclass[„JBOSS_HOME“]); psenv::popli(); ?>

/common/deploy geschaffen. Standardmäßig sind bei der Auslieferung die Konsolenprogramme dort hinterlegt. Zu beachten ist, dass jede derartige Applikation eine spezielle Konfigurationsdatei erfordert, die im bisherigen Deploy-Verzeichnis zu hinterlegen ist und typischerweise dem Namensmuster *-activator-jboss-beans.xml folgt.

Wenn ein JBoss nicht genug ist

Jeder moderne Applikationsserver unterstützt heutzutage Clustering – so natürlich auch der JBoss AS. In Verbindung mit dem 6er-Release sind zwei Änderungen besonders hervorzuheben:

  • Infinispan 4.2.0, eine nach eigenen Angaben bestens skalierende und hoch verfügbare Data-Grid-Plattform, ersetzt JBoss Cache als verteilter Cache-Provider [16] und stellt somit die neue Basis für Clustering-Dienste dar.
  • Um die Last im JBoss-Cluster besser balancieren zu können, wurde der JBoss AS6 um das Modul mod_cluster ergänzt. Dieses interagiert auch mit dem Apache HTTP Server und bedient sich zur effizienten Verteilung der Requests über den gesamten Cluster einer intelligenten Heuristik.
Fazit und Ausblick

Nachdem wir den JBoss AS bereits seit vielen Jahren erfolgreich in unseren Projekten einsetzen, beobachten wir dessen Weiterentwicklung natürlich sehr gespannt. Da er jetzt (endlich) die Java-EE-6-Web-Profile-Spezifikation erfüllt, können erfreulicherweise ab sofort viele der in den letzen Java-Magazin-Ausgaben vorgestellten Technologien eingesetzt werden. Das war zwar teilweise mit dem System der fünften Generation auch schon möglich, setzte aber in den meisten Fällen einerseits viel Zeit und andererseits Freude am Basteln voraus. Aus Entwicklersicht vereinfacht sich die Implementierung sicherlich, da nun bei Verwendung des JBoss AS6 in Sachen Java EE 6 fast aus dem Vollen geschöpft werden kann.

Für ein Resümee bzgl. Stabilität und Performance des neuen Major Releases ist es sicherlich noch zu früh. Gemäß unseren bisherigen Erfahrungen steht aber bei Problemen die sehr aktive JBoss-Community stets recht hilfreich zur Seite und Bugs werden zeitnah gefixt. Für Ende Mai 2011 ist auf der Website bereits die finale Version des JBoss AS7 angekündigt, bei der dann OSGi eine große Rolle spielen wird [17]. Die JBoss-Entwickler arbeiten also fleißig an ihrem Traum weiter, wie es der musikalische Boss formulieren würde. Somit stehen uns sicherlich jede Menge weitere glorreiche Tage bevor – ob sie gar magisch werden, das wird allerdings erst die Zukunft zeigen.

Bernhard Löwenstein (b.loewenstein[at]gmx.at) ist als Projektleiter und Softwareentwickler für die Potsdamer Intervista AG tätig. Er unterrichtet außerdem als IT-Trainer am WIFI Niederösterreich und schreibt an der TU Wien an seiner Dissertation.

Oliver Kraeft (kraeft[at]intervista.at) ist als Projektleiter und Softwareentwickler für die Potsdamer Intervista AG tätig. Er entwickelt seit vielen Jahren Java-EE-Anwendungen, die unter dem JBoss AS laufen, und betreibt nebenbei die Website runnr.de.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.