Estou precisando fazer um EJB de sessão que envie mensagens. Essas mensagens devem ser recebidas por um EJB de mensagens (MDB). Como eu faço para o EJB enviar mensagens? Tentei inserir o código de acesso ao JNDI no método ejbCreate e não funcionou. Criei um método próprio para essa configuração e não funcionou. Eu devo usar InitialContext ou SessionContext para localizar a fila de mensagens?
public void ejbCreate() {
// TODO implement ejbCreate if necessary, acquire resources
// This method has access to the JNDI context so resource aquisition
// spanning all methods can be performed here such as home interfaces
// and data sources.
System.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
System.setProperty("java.naming.factory.url.pkgs", "org.jnp.interfaces");
System.setProperty("java.naming.provider.url", "localhost");
try {
contextoInicial=new InitialContext();
factory = (QueueConnectionFactory) contextoInicial.lookup( "java:/XAConnectionFactory" );
queue = (Queue) contextoInicial.lookup( "queue/FilaEJB" );
queueConn = factory.createQueueConnection();
session = queueConn.createQueueSession( false, Session.AUTO_ACKNOWLEDGE );
sender = session.createSender(queue);
} catch (NamingException ex) {
ex.printStackTrace();
} catch (JMSException e){
e.printStackTrace();
}
}
public int soma(int a, int b) {
//TODO implement soma
try {
TextMessage message = session.createTextMessage(a+" + "+b+" = "+(a+b));
sender.send(message);
} catch (JMSException ex) {
ex.printStackTrace();
}
return a+b;
}