Ich versuche, einen JBoss-Dienst zu erstellen, der jedes Mal, wenn der Server gestartet wird, automatisch gestartet werden sollte.Automatisches Starten eines JBoss-Dienstes (MBean)
Ich habe die folgende Klassenstruktur für meinen Dienst bekommt:
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 starte ich automatisch diesen Dienst?
Ich erwartete, dass JBoss die Methode start() als Teil des Ladevorgangs aufrufen wird, aber es ist nicht: Ich habe eine Menge Logging-Code in meiner start() -Methode, aber ich habe keine gesehen Ausgabe.
Wenn ich jedoch den MBean-Status mithilfe der JMXConsole anschaue, ist der Status (StateString) "Gestartet".
Problem gelöst
ich die Lösung für mein Problem gefunden. Ich überschrieb die Methoden start(), stop(), destroy() und create(); Da ich jedoch die abstrakte Klasse ServiceMBeanSupport erweitere, sollte ich die Methoden startService(), stopService() usw. überschreiben.
Ich habe gerade meinen Code von der Methode start() in die Methode startService() und verschoben jetzt verhält sich alles so, wie ich es brauchte: sobald seine 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 ruft create(), start(), stop() und destroy(), verwendet die Implementierung der abstrakten Klasse ServiceMBeanSupport diese Methoden, um das Leben zu behandeln Zyklus. Dennoch bietet es die geschützten Methoden * Service(), um dem Programmierer die Teilnahme am Lebenszyklus zu ermöglichen.
"automatisch"?Startet der Dienst nicht, wenn der App-Server gestartet wird? Wenn die JMX-Konsole angibt, dass sie gestartet wurde, welches Verhalten lässt Sie daran glauben, dass dies nicht der Fall ist? – duffymo
Ich habe einige Logging-Code innerhalb der Start() -Methode, aber es wird nicht ausgeführt. Ich habe einen Logging-Code im Konstruktor der Klasse, und ich kann seine Ausgabe sehen, aber das war's. – nozebacle