Salve,
To com um monte de duvidas sobre o funcionamento de MDB será que podem me ajudar?
O que preciso fazer:
Uma espécie de “bat” que roda no mainframe dispara um post, este coloca uma mensagem na fila. Quando o método onMessage do MDB é chamado ele dispara a carga no banco de dados.
As duvidas:
1 - Como garantir que somente um objeto da fila será processado por vez?
2 - Em alguns casos preciso de um flag para interromper o processamento da fila por algum tempo… Mas os objeto não processados deve continuar na fila.
3 - Gostaria de mostrar em uma pagina WEB com os objetos que estão na fila. Tem como recupera-los?
Estou usando o jboss como appserver.
meu MDB atual.
import javax.ejb.MessageDrivenBean;
import javax.jms.*;
import java.sql.*;
import java.text.SimpleDateFormat;
import javax.naming.*;
import java.util.Date;
import java.io.*;
/**
* @ejb.bean name="Carga"
* jndi-name="ejb/carga"
* acknowledge-mode="Auto-acknowledge"
* destination-type="javax.jms.Queue"
* subscription-durability="Durable"
*
* @jboss.destination-jndi-name ="queue/filaCarga
**/
public class CargaBean implements MessageDrivenBean, MessageListener {
private CargaE carga;
public void setMessageDrivenContext(
javax.ejb.MessageDrivenContext messageContext)
throws javax.ejb.EJBException {
this.messageContext = messageContext;
}
public void ejbCreate() {
}
public void ejbRemove() {
messageContext = null;
}
public void onMessage(javax.jms.Message message) {
Context ctx;
try{
ObjectMessage om = (ObjectMessage) message;
carga = (CargaE) om.getObject();
/* Executa a carga
* .
* .
*/
}
catch(JMSException jmse){
carga.setStatus("ERRO: " + jmse.getMessage());
jmse.printStackTrace();
}
catch(NamingException ne){
carga.setStatus("ERRO: " + ne.getMessage());
ne.printStackTrace();
}
catch(SQLException sqle){
carga.setStatus("ERRO: " + sqle.getMessage());
sqle.printStackTrace();
}
finally{
try{
//Serializa o Objeto carga para futuras consultas
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
}