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.