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?