Um monte de duvidas sobre MDB

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();
			}
			
		}
	}
	
}