8 Stimmen

Automatischer Start eines JBoss-Dienstes (MBean)

Ich versuche, einen JBoss-Dienst zu erstellen, der automatisch gestartet werden soll, wenn der Server gestartet wird.

Ich habe die folgende Klassenstruktur für meinen Dienst:

public interface CumbiaXPMServiceMBean extends org.jboss.system.ServiceMBean
public class CumbiaXPMService extends org.jboss.system.ServiceMBeanSupport implements CumbiaXPMServiceMBean

Ich habe auch die folgende Konfigurationsdatei -- jboss-service.xml -- für meinen Dienst :

<server>
    <mbean code="uniandes.cumbia.xpm.jboss.CumbiaXPMService"
       name="jcumbia:service=JCumbiaEngine">
      <depends>jcumbia:service=cumbiaConsole</depends>
      <attribute name="LocationInCumbia" attributeClass="java.lang.String">XPMEngine</attribute>    
    </mbean>
</server>

Meine Frage ist: Wie kann ich diesen Dienst automatisch starten?

Ich hatte erwartet, dass JBoss die Methode start( ) als Teil des Ladevorgangs aufruft, aber das ist nicht der Fall: Ich habe eine Menge Logging-Code in meiner start( ) Methode, aber ich habe keine Ausgabe gesehen.

Wenn ich mir jedoch den Status der MBean mit der JMXConsole ansehe, lautet der Status (StateString) "Started".

Problem gelöst

Ich habe die Lösung für mein Problem gefunden. Ich habe die Methoden start( ), stop( ), destroy( ) und create( ) überschrieben; da ich jedoch die abstrakte Klasse ServiceMBeanSupport erweitere, sollte ich die Methoden startService( ), stopService( ), etc. überschreiben.

Ich habe gerade meinen Code von der Methode start( ) zur Methode startService( ) verschoben, und jetzt verhält sich alles so, wie ich es brauche: Sobald die Abhängigkeiten erfüllt sind, wird mein Dienst gestartet und die Methode startService( ) ausgeführt.

Ich denke, die Schlussfolgerung ist: Obwohl der Lebenszyklus einer MBean den Aufruf von create( ), start( ), stop( ) und destroy( ) beinhaltet, verwendet die Implementierung der abstrakten Klasse ServiceMBeanSupport diese Methoden zur Handhabung des Lebenszyklus. Dennoch stellt sie die geschützten Methoden *Service( ) zur Verfügung, um dem Programmierer die Teilnahme am Lebenszyklus zu ermöglichen.

6voto

nozebacle Punkte 396

Problem gelöst

Ich habe die Lösung für mein Problem gefunden. Ich habe die Methoden start( ), stop( ), destroy( ) und create( ) überschrieben; da ich jedoch die abstrakte Klasse ServiceMBeanSupport erweitere, sollte ich die Methoden startService( ), stopService( ), etc. überschreiben.

Ich habe gerade meinen Code von der Methode start( ) zur Methode startService( ) verschoben, und jetzt verhält sich alles so, wie ich es brauche: Sobald die Abhängigkeiten erfüllt sind, wird mein Dienst gestartet und die Methode startService( ) ausgeführt.

Ich denke, die Schlussfolgerung ist: Obwohl der Lebenszyklus einer MBean den Aufruf von create( ), start( ), stop( ) und destroy( ) beinhaltet, verwendet die Implementierung der abstrakten Klasse ServiceMBeanSupport diese Methoden zur Handhabung des Lebenszyklus. Dennoch stellt sie die geschützten Methoden *Service( ) zur Verfügung, um dem Programmierer die Teilnahme am Lebenszyklus zu ermöglichen.

2voto

Roland Schneider Punkte 3575

Für mich war es hilfreich, die Stopp- und Startmethoden in der MBean-Schnittstelle zu definieren:

public interface MyServiceMBean {
    ...

    // Lifecycle callbacks
    void start() throws Exception;
    void stop();
}

Der Vorteil ist, dass Sie ServiceMBean oder ServiceMBeanSupport nicht erweitern müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X