JMX, Spring und Glassfish – Wie cool ist das denn?

Hallo zusammen,

da ich leicht erkältet bin, verbringe ich den Abend heute zu Hause – und was gibt es besseres, als sich ein wenig mit Glassfish zu beschäftigen;).

Ich habe ein wenig mit meiner Demoanwendung experimentiert (für das Aufsetzen und Auschecken am besten mal kurz diesen Eintrag lesen). Ziel war es, MBeans im Glassfish zu registrieren und diese zunächst über die jvisualvm sichtbar zu machen.

Die Architektur aktuell sieht so aus, dass die EJBs durch eine SessionFacade vom Frontend gekapselt sind.

Es genügt also vorerst, eine MBean für diese SessionFacade zu erstellen.

Hierfür erzeuge ich zunächst im EJB-Modul folgende Klasse:


@ManagedResource(objectName="md:name=ServiceFacadeMBean")
@Service("ServiceFacadeMBean")
public class ServiceFacadeMbean  {

 @Inject
 @Named("sessionFacade")
 private SessionFacade facade;

 @ManagedOperation(description="Load all Contacts")
 public List<Contact> getContact(){
 return facade.loadAllContacts();
 }
}

Zunächst mal ist es unbedingt notwendig, dass eine MBean auch als Spring-Service deklariert wird. D.h. eine MBean benötigt zwingend die @Service-Annotation. Weiterhin habe ich es mir einfach gemacht, indem ich die @ManagedResource-Annotation verwende, hierüber kann Spring die Bean automatisch als MBean identifizieren und registriert diese im MBean-Server des Glassfish (oder auch fast jedes anderen AS).

Im Spring-Kontext selbst wird folgendes deklariert:


<context:mbean-export />
 <context:component-scan base-package="de.md" />
 <context:annotation-config />

Über das Element mbean-export wird Spring angewiesen, alle MBeans soweit möglich direkt im AS zu registrieren.

Eine Alternative hierzu wäre die Deklaration einer MBeanExporter-Bean im Spring-Context. Das könnte ungefähr so aussehen:


<!-- Exporting Mbeans -->
 <bean id="exporter" lazy-init="false">
 <property name="beans">
 <map>
 <entry key="md:name=WebJMX" value-ref="sessionFacadeMBean" />
 </map>
 </property>
 </bean>

Das wars prinzipiell schon, fährt man jetzt den Glassfish hoch, kann man im Anschluss die jvisualvm-konsole hochfahren

(einfach in der Konsole jvisualvm eingeben). Glücklicherweise funktioniert das bereits Adhoc und Spring erkennt eine lokal laufende Glassfish Instanz.

Viel Spaß damit!;)

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s