Posted by Clayton Casteli On July - 18 - 2015 0 Comment

Nesse post vamos tratar de alguns temas para criação e configuração de uma Fila JMS no IBM Websphere, bem como exemplificar o uso em um MBD.

  • Criação do Barramento;
  • Criação do Destino da Fila;
  • Criação da JNDI da fila e associação com o destino;
  • Criação da conection factory da fila;
  • Criação do ponto de ativação da fila;

Criação do Barramento

No WebSphere em “Integração de Serviços > Barramentos” como mostrado na figura abaixo, podemos utilizar um barramento já disponível ou criar um novo.

bar_web_1

Criação do Destino da Fila

Após criado o barramento ou utilizado um existente, um destino de fila deve ser criado, o destino de fila é efetivamente o lugar onde a persistência dos dados ocorre e onde as trocas de mensagens são feitas, produtor-consumidor.

bar_web_2_destino_fila

Criação da JNDI da fila e associação com o destino criado anteriormente.

Menu - Recursos > JMS > Filas

Para conseguirmos efetivamente inserir os dados no ponto de fila criado anteriormente uma JNDI deve ser criada e associada ao ponto de fila que iremos persistir os dados assim como uma conexão de fila para conseguirmos o acesso a essa fila. A conexão de fila será criada mais a frente.

Configurações mínimas necessárias;

Nome:SAMPLEJMS
Nome JNDI : jms/queue/SAMPLEJMS
Nome de Barramento : BUSSAMPLE
Nome da fila (Destino) – SAMPLE

bar_web_3_jms_jndi_fila

Criação da Connection Factory da Fila.

Menu - Recursos > JMS > Connection factories da fila.

Para configurar uma conexão ao provedor JMS.

Nome : sample_cf
Nome JNDI : jms/sample_cf
Nome de Barramento - BUSSAMPLE

bar_web_3_conexao_fila

Criação do ponto de ativação da fila

Menu : Recursos > JMS > Especificações de ativação

Analogamente a conexão de fila um ponto de ativação pode ser criada caso você precise consumir dados dessa fila, por exemplo no uso de uma MDB.

Nome : activ_SAMPLE
Nome JNDI : jms/activ/SAMPLE
Nome Barramento - SAMPLEBUS

bar_web_3_spec_fila

Exemplo de Uso em um MDB

  • Criação do MDB;
  • Criação da configuração para indicar de qual fila iremos receber os dados;

Criação do MDB no IBM WebSphere

Para o consumo das mensagens da fila criada no WebSphere podemos criar um MDB como no exemplo abaixo.

package br.com;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

/**
 * Message-Driven Bean implementation class for: SampleMDBBean
 * @author Clayton Casteli
 *
 */
@MessageDriven(
		activationConfig = { @ActivationConfigProperty(
				propertyName = "destinationType", propertyValue = "javax.jms.Queue"
		) }/*, mappedName = "jms/queue/SAMPLEJMS"*/)
public class SampleMDBBean implements MessageListener {

    /**
     * Default constructor.
     */
    public SampleMDBBean() {
        // TODO Auto-generated constructor stub
    }

	/**
     * @see MessageListener#onMessage(Message)
     */
    public void onMessage(Message message) {

    	  try {
    		    if (message instanceof javax.jms.TextMessage) {
    		            System.out.println(" MDB Text Message " + ((javax.jms.TextMessage)message).getText());
    		    }
    		    else if (message instanceof javax.jms.BytesMessage) {
    		            System.out.println("MDB: Bytes Message ");
    		    }
    		    else if (message instanceof javax.jms.StreamMessage) {
    		            System.out.println("MDB: Stream Message ");
    		    }
    		    else if (message instanceof javax.jms.ObjectMessage) {
    		            System.out.println("MDB: Object Message ");
    		    }
    		    else if (message instanceof javax.jms.MapMessage) {
    		            System.out.println("MDB: Map Message ");
    		    }
    		    else {
    		            System.out.println("MDB: Unknown Message Type ");
    		    }
    		  }
    		  catch(javax.jms.JMSException e) {
    		    System.out.println("MDB: Error occurred ");
    		    e.printStackTrace();
    		  }

    }

}

Criação da configuração para indicar de qual fila iremos receber os dados

Repare que na tag jca-adapter colocamos algumas configurações ja criadas acima.

Nome do MDB SampleMDBBean
Ponto de ativação - jms/activ/SAMPLE
Fila de destino - jms/queue/SAMPLEJMS
Um alias de autenticação - CellAdminAlias isso pode ser criado no WebSphere para identificar uma usuário e senha.

Com esses dados o MDB criado poderá identificar de qual fila ele deve consumir dados.

<message-driven name="SampleMDBBean"> <jca-adapter activation-spec-binding-name="jms/activ/SAMPLE" activation-spec-auth-alias="CellAdminAlias" destination-binding-name="jms/queue/SAMPLEJMS"

META-INF/ibm-ejb-jar-bnd.xml

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://websphere.ibm.com/xml/ns/javaee" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0">
 <message-driven name="SampleMDBBean"> <jca-adapter activation-spec-binding-name="jms/activ/SAMPLE" activation-spec-auth-alias="CellAdminAlias" destination-binding-name="jms/queue/SAMPLEJMS" />
 </message-driven>
</ejb-jar-bnd>

Exemplo de uso para inserir dados na fila do WebSphere

  • Criação de um Web Services - JAX-WS
  • Criação do método para inserir dados na fila do WebSphere

Criação de um Web Services - JAX-WS

@WebService (targetNamespace="http://com.", serviceName="SampleService", portName="SamplePort", wsdlLocation="WEB-INF/wsdl/)
public class SampleJAXWS{
 
    br.com.Sample sample = null;
 
   
    public void processarSample (String text) {
        sample.processarSample(String text);
    }
}

Criação do método para inserir dados na fila do WebSphere


public class Sample{

public void processarSample(String text) {
 
            String factoryName = "jms/sample_cf";
 
            String destinationName = "jms/queue/SAMPLEJMS";
 
            // Look up administered objects
            InitialContext initContext = null;
            Connection connection = null;
            try {
                 
                  // Look up administered objects
                  initContext = new InitialContext();
 
                 ConnectionFactory factory = (ConnectionFactory) initContext.lookup(factoryName);
                  Destination destination = (Destination) initContext.lookup(destinationName);
                 
                 
                  //Create JMS objects //tenha certeza de ter configurado o usuario para o barramento aceitar a conexão
//caso não queira deixar o dados de acesso expostos, pode chamar diretamente um Alias de autenticação.
            connection = factory.createConnection("admin", "admin");//
                              
            
            Session session = connection.createSession(falseAUTO_ACKNOWLEDGE);
              MessageProducer sender = session.createProducer(destination);
                     
            //Send message
            String messageText = "Clayton casteli";
            TextMessage message = session.createTextMessage(messageText);
            sender.send(message);
           
           
            } catch (NamingException e) {
                  // TODO Bloco catch gerado automaticamente
                  e.printStackTrace();
            } catch (JMSException e) {
                  // TODO Bloco catch gerado automaticamente
                  e.printStackTrace();
            }finally{
                 
                  try {
                        initContext.close();
                       
                  } catch (NamingException e) {
                        // TODO Bloco catch gerado automaticamente
                        e.printStackTrace();
                  }
                 
                 
                 
                  //Exit
            try {
                        connection.close();
                  } catch (JMSException e) {
                        // TODO Bloco catch gerado automaticamente
                        e.printStackTrace();
                  }
                 
                 
                 
            }
 
      }
}

Visualizar dados no ponto de fila criado

Os dados da Fila podem ser verificados em "Barramentos > BUSSAMPLE > Destinos > SAMPLE > Pontos de Fila".

bar_web_6_dados_ponto_fila

About the author

Clayton Casteli Atua com desenvolvimento de software, J2EE, C/C++, IBM BPM. É entusiasta de novas tecnologias, principalmente open source. Formado em Engenharia da Computação pela PUCCAMP-SP, Pós-Graduado pela UNICAMP em Engenharia de Software com enfase em SOA e Pós-Graduado em Business Intelligence pelo IBTA.

Be Sociable, Share!

Protected by WP Anti Spam