JBoss - MBean customizado - problema com JNDI

Noite pessoal,

uso o JBoss 4.x como container de serviços.
Criei o meu próprio MBean, criando a interface MyServiceMBean, e a classe MyService que implementa a inteface.
Os únicos métodos do serviço são start() e stop(). Fiz o deployment descriptor jboss-service.xml, compilo, renomeio o jar para sar,
deploy … blz. Funciona tudo.

Problema: quero disponibilizar o meu serviço (MyService) para outros MBean dentro do JBoss.
Como associo este meu sorviço com um nome JNDI?

Código da interface:

/*
 * SCAMServiceMBean.java
 *
 * Created on September 18, 2007, 2:40 PM
 *
 */

package com.synapsis.scam.jbossservice;

import com.synapsis.scam.LoopBackSerialAdapter;
import javax.naming.NamingException;

/**
 *
 * @author Patrizio
 */
public interface SCAMServiceMBean {
    
    /**
     * Retorna o nome JNDI.
     */
    public String getJndiName();
    
    /**
     * Imposta o nome JNDI.
     */
    public void setJndiName(String jndiName) throws NamingException;
    
    /**
     * Inicia o serviço.
     */
    public void start();
    
    /**
     * Para o serviço.
     */
    public void stop();
    
//    /**
//     * Indica o estado do serviço.
//     */
//    public boolean isStarted();
    
    public LoopBackSerialAdapter getLoopBackSerialAdapter();
    
}

Código da implementação:

/*
 * SCAMService.java
 *
 * Created on September 18, 2007, 2:42 PM
 *
 */

package com.synapsis.scam.jbossservice;

import com.synapsis.scam.LoopBackSerialAdapter;
import com.synapsis.scam.MessageHandler;

import javax.naming.NamingException;

import org.apache.log4j.Logger;

/**
 *
 * @author Patrizio
 */
public class SCAMService implements SCAMServiceMBean {
    
    /** Logger do Log4j. */
    private Logger logger = Logger.getLogger(SCAMService.class);
    
    /** Nome JNDI, impostado no deployment descriptor. */
    private String jndiName;
    
    /**
     * Construtor principal.
     */
    public SCAMService() {
    }

    /**
     * Retorna o nome JNDI.
     */
    public String getJndiName() {
        return jndiName;
    }

    /**
     * Imposta o nome JNDI.
     */
    public void setJndiName(String jndiName) throws NamingException {
        this.jndiName = jndiName;
    }
    
    public void start() {
        MessageHandler.start();
        logger.info("SCAM STARTUP OK.");
    }

    public void stop() {
        MessageHandler.getInstance().stop();
        logger.info("SCAM SHUTDOWN OK.");
    }
    
    public LoopBackSerialAdapter getLoopBackSerialAdapter() {
        return LoopBackSerialAdapter.getInstance();
    }
    
}

Deployment descriptor:

<server>
    <mbean code="com.synapsis.scam.jbossservice.SCAMService" 
           name="com.synapsis.scam:service=SCAM,name=SCAM">
               
        <attribute name="JndiName">SCAM</attribute>
        
        <depends>jboss:service=Naming</depends>
        <depends>jboss.jca:service=ConnectionFactoryBinding,name=JmsXA</depends>
        <depends>jboss.jca:service=DataSourceBinding,name=MySQLSynapsis</depends>
    </mbean>
    
</server>

O problema que se escrevo:

Context context = new InitialContext();
SCAMService scamService = (SCAMService) context.lookup("java:SCAM");

o container dispara a exception

Alguma dica?

Consegui resolver, usando a classe ServiceMBeanSupport e adicionando na minha interface SCAMServiceMBean
os métodos

/**
 * Retorna o nome JNDI.
 */
 public String getJndiName();
    
/**
 * Imposta o nome JNDI.
 */
 public void setJndiName(String jndiName);

Espero que isso ajude alguem.

Valeu