JBoss AOP im Container - JAXenter

JBoss AOP im Container

Christian Grobmeier

AOP ist in aller Munde! Während es manchmal als Ersatz für das objektorientierte Programmierparadigma angesehen wird, findet es seinen Einsatz eher als komplexe Erweiterung desselben. EJB3-Container wie JBoss machen von den Vorteilen dieser Technologie bereits Gebrauch. Gerade in Verbindung mit den mit Java 5 eingeführten Annotations verbreitet sich AOP nicht nur im Geek- und Freak-Umfeld, sondern erfreut sich, trotz seiner Komplexität, selbst bei den Entwicklern, die noch von sich behaupten können ein Privatleben zu haben, immer größerer Beliebtheit.

Und weil wir gerade bei JBoss sind: der Application Container dieser Open-Source-Gruppe bietet angenehme Möglichkeiten, AOP in das eigene Projekt zu integrieren. Basis hierfür ist der JBoss AS ab Version 4. Ab dieser Version prägten die JBoss-Entwickler den Begriff „aspektorientierte Middleware“, vermutlich vor allem um die eigene Arbeit zu erleichtern. Folglich haben Sie auch einiges an Code bereitgestellt, um anderen Entwicklern die aspektorientierte Erweiterung möglichst leicht zu machen. Stellt sich die Frage: Wozu das Ganze?

AOP – Denn sie wissen nicht, was alles getan wird

Stellen Sie sich vor, Sie haben eine Menge Code geschrieben. Das Projekt wird erstmals auf der Systemtestumgebung deployed und es stellt sich heraus, die Performance verhält sich unter realistischeren Bedingungen anders als erwartet. Was nun?
Ohne AOP würde man nun beginnen Logging-Ausgaben mit Zeitmessungen einzufügen, und das bei vielen Methoden, nicht nur einer. Überall dort, wo ein Flaschenhals vermutet wird, wird Code angepasst. So etwas ist natürlich immer mit einem Risiko verbunden, funktionierender Code kann beispielsweise beschädigt werden, vor allem, wenn man diese Ausgaben wieder entfernt. Manch einer hat sich sicherlich bereits gewünscht, eine Art Schema zu haben, nachdem bestimmte Methoden „einfach loggen würden“, wenn man es gerade braucht.

Grundsätzliches

Wenn Sie irgendwo definieren könnten, wo was zu loggen ist, perfekt! Stellen Sie sich vor, die Methode hauptzweig() ruft die Methode nebenzweig() auf. Sie möchten die Zeit von Betreten zu Verlassen dieser nebenzweig()-Methode messen.

Wir benennen die Stellen, an denen Sie eingreifen können, „Joinpoints“. Sie sind implizit, d. h. prinzipiell gibt es vor jedem Methodenaufruf einen Joinpoint. Es gibt mehrere Joinpoints, z. B. wäre der Zugriff auf eine Objektvariable ebenso ein möglicher Joinpoint. Genaueres ist in der jeweiligen Dokumentation des AOP-Herstellers zu finden (in unserem Fall JBoss AOP). Der Joinpoint verstreicht, wenn Ihre Methode nicht einem bestimmten Muster, dem „Pointcut“, entspricht. Trifft dieses Muster auf die Methodendeklaration von nebenzweig() zu, wird ein Aspekt ausgeführt. Ein Aspekt ist also nichts Anderes als ein Stück Code, welches unter bestimmten Umständen ausgeführt wird. Logging ist natürlich nicht das einzige Aufgabengebiet von AOP: Persistenz, Sicherheit (ohne Code zu schreiben? Genial!) oder Validierung wären andere Aufgaben. Dieser Artikel beschränkt sich aber darauf, aufzuzeigen wie der JBoss Application Server AOP unterstützt.

Wie funktioniert das aber auf technischer Ebene? Wer ohne den JBoss AS entwickelt, benötigt in jedem Fall einen speziellen Compiler (aopc). Dieser prüft den Code auf gültige Pointcuts und webt die entsprechenden Codestellen in Ihren Code – dies geschieht auf Bytecodeebene.

Geschrieben von
Christian Grobmeier
Kommentare

Schreibe einen Kommentar

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