Am 14.05.2013 15:59, schrieb Jochen Theodorou:
> Hallo,
>
> Ich habe zwar schon mit MXBeans gearbeitet, aber eigene MXBeans
>
http://docs.oracle.com/javase/tutorial/jmx/mbeans/mxbeans.html habe ich
> bisher noch nicht erstellt. Hat hier jemand damit Erfahrung? Mir geht es
> hauptsᅵchlich um den Overhead und die Benutzbarkeit aus eurer Sicht.
>
> Gruss theo
>
Ich hab schon solche Beans erstellt, wobei ich aber nur den eingebauten
Container der JVM verwendet habe. Zweck der ᅵbung war Remote-Administration.
Erstellung: simpel
Performanzeinbuᅵen: keine gespᅵrt, auf Messung verzichtet
Benutzbarkeit: Man muss, wenn man Remote-Zugriff haben will, ein paar
Systemeigenschaften setzen, und die Ports freigeben. Dann mit JVisualvm
ganz OK - man kann zu den eigenen Beans mittels Explorerbaum navigieren.
(Ich setze auᅵerdem -
Dvisualvm.display.name=komponente, damit ich nicht
nur Prozess-IDs fᅵr meine 14 Java-Prozesse sehe...)
Ich wollte gerne eine ganze Menge von Komponenten (mehrere JVMs) auf
einmal administrieren. Leider bin ich daran gescheitert, einen zentralen
MBean-Server aufzubauen, bei dem sich meine Beans registrieren sollten
und dann den Remote-Zugriff auf ihre Herkunftskomponente automatisch
selbst erledigen. Ich bin dann dabei geblieben, auf jede Komponente
separat per jvisualvm zuzugreifen.
Eine MBean ist so simpel zu implementieren, weil man einfach nur ein
beliebiges Interface registrieren muss. Beispiel:
Mein Objekt implementiert ComponentControllerMBean (mit Methoden wie
restart(), stop(), etc.)
/**
* Creates and registers this instance as an MBean with the platform
MBean server.
*/
private void registerMBean() throws Exception
{
StandardMBean mbean = new StandardMBean( this,
ComponentControllerMBean.class, false );
// register the local bean
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
mbs.registerMBean( mbean, oname() );
}
private ObjectName oname() throws MalformedObjectNameException
{
ObjectName oname = new ObjectName(
ComponentControllerMBean.class.getPackage().getName() + ":type=" + getName()
+ "Controller" );
return oname;
}
Fehlerhandling ist ein anderes Thema, nicht so bequem. Die Meldung an
der Bediernerseite ist nicht immer so aussagekrᅵftig (z. B. man bekommt
eine UnmarshallException, obwohl serverseitig ein ganz anderer Fehler
vorliegt.) Da muss man evtl. etwas Arbeit investieren.
Viele Grᅵᅵe,
Sebastian