Démarrage automatique d'un service JBoss (MBean)

Je suis en train de construire un service JBoss qui doit être démarré automatiquement, chaque fois que le serveur est lancé.

J'ai la suite de la structure de la classe pour mon service:

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

J'ai aussi le fichier de configuration suivant -- jboss-service.xml -- pour mon service :

<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>

Ma question est: comment puis-je démarrer automatiquement ce service?

J'ai attendu que JBoss qui fera appel à la méthode start( ) dans le cadre du processus de chargement, mais il n'est pas: j'ai beaucoup de loggin code dans la méthode start (), mais je n'ai pas vu de sortie.

Cependant, quand je regarde le MBean état à l'aide de la JMXConsole, son état (StateString) est "Commencé".

Problème Résolu

J'ai trouvé la solution à mon problème. J'ai été surchargeant les méthodes start( ), stop( ), détruire( ) et créer( ); néanmoins, depuis que je suis étendre la classe abstraite ServiceMBeanSupport, je devrais être en surchargeant les méthodes startService( ), stopService( ), etc.

Je viens de déménager mon code à partir de la méthode start( ) la méthode startService( ) et maintenant tout fonctionne comme je le voulais: dès que ses dépendances sont satisfaites, mon service est démarré et la méthode startService( ) est exécutée.

Je pense que la conclusion est la suivante: bien que le cycle de vie d'un MBean implique l'appel de créer( ), start( ), stop( ) et destroy( ), la mise en œuvre de la classe abstraite ServiceMBeanSupport utilise ces méthodes pour gérer le cycle de vie. Néanmoins, il fournit le protégé méthodes *Service( ) afin de permettre au programmeur de participer au cycle de vie.

"automatiquement"? Ne pas le service "démarrer" lorsque l'application serveur est démarré? Si la console JMX dit que c'est commencé, ce comportement vous fait croire qu'il n'en a pas?
J'ai un peu de code d'enregistrement à l'intérieur de la méthode start (), mais il n'est pas en cours d'exécution. J'ai quelques traces de code dans le constructeur de la classe, et je peux voir sa sortie, mais c'est tout.

OriginalL'auteur nozebacle | 2009-06-18