2009-06-18 9 views
8

J'essaie de créer un service JBoss qui doit être démarré automatiquement à chaque démarrage du serveur.Démarrage automatique d'un service JBoss (MBean)

J'ai la structure de classe suivante 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 suivante - 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 démarrer automatiquement ce service? Je m'attendais à ce que JBoss appelle la méthode start() en tant que processus de chargement, mais ce n'est pas le cas: J'ai beaucoup de code de log dans ma méthode start(), mais je n'en ai vu aucun sortie. Cependant, lorsque je regarde l'état MBean à l'aide de JMXConsole, son état (StateString) est 'Started'.

Problème résolu

J'ai trouvé la solution à mon problème. Je remplaçais les méthodes start(), stop(), destroy() et create(); néanmoins, puisque j'étend la classe abstraite ServiceMBeanSupport, je devrais surcharger les méthodes startService(), stopService(), etc.

Je viens de déplacer mon code de la méthode start() à la méthode startService() et maintenant tout se comporte comme j'ai besoin: dès que ses dépendances sont remplies, mon service est démarré et la méthode startService() est exécutée. Je pense que la conclusion est: bien que le cycle de vie d'un MBean implique l'appel de create(), start(), stop() et destroy(), l'implémentation de la classe abstraite ServiceMBeanSupport utilise ces méthodes pour gérer la vie cycle. Néanmoins, il fournit les méthodes protégées * Service() afin de permettre au programmeur de participer au cycle de vie.

+0

"automatiquement"?Le service ne démarre-t-il pas lorsque le serveur d'applications est démarré? Si la console JMX dit qu'elle a démarré, quel comportement vous fait croire que ce n'est pas le cas? – duffymo

+0

J'ai un code de journalisation dans la méthode start(), mais il n'est pas en cours d'exécution. J'ai du code de journalisation dans le constructeur de la classe, et je peux voir sa sortie, mais c'est tout. – nozebacle

Répondre

6

Problème résolu

J'ai trouvé la solution à mon problème. Je remplaçais les méthodes start(), stop(), destroy() et create(); néanmoins, puisque j'étend la classe abstraite ServiceMBeanSupport, je devrais surcharger les méthodes startService(), stopService(), etc.

Je viens de déplacer mon code de la méthode start() à la méthode startService() et maintenant tout se comporte comme j'ai besoin: dès que ses dépendances sont remplies, mon service est démarré et la méthode startService() est exécutée. Je pense que la conclusion est: bien que le cycle de vie d'un MBean implique l'appel de create(), start(), stop() et destroy(), l'implémentation de la classe abstraite ServiceMBeanSupport utilise ces méthodes pour gérer la vie cycle. Néanmoins, il fournit les méthodes protégées * Service() afin de permettre au programmeur de participer au cycle de vie.

2

Pour moi, il a aidé à définir l'arrêt et méthodes de démarrage dans l'interface MBean:

public interface MyServiceMBean { 
    ... 

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

L'avantage est que vous n'avez pas d'étendre ServiceMBean oder ServiceMBeanSupport.

Questions connexes