Desenvolvendo um aplicativo corporativo para utilizar beans orientados por mensagens

Os aplicativos podem usar beans acionados por mensagens como consumidores de mensagens assíncronos. Você implementa um bean acionado por mensagens como um listener de mensagens para um destino. O bean acionado por mensagens é invocado por uma especificação de ativação ou listener JMS quando uma mensagem chega ao destino de entrada que está sendo monitorado.

Sobre Esta Tarefa

Você desenvolve um aplicativo corporativo para usar um bean acionado por mensagens como com qualquer outro enterprise bean, exceto que o bean acionado por mensagens não possui uma interface inicial ou uma interface remota.

Você deveria desenvolver um bean acionado por mensagens para delegar o processamento de negócios de mensagens de entrada a outro enterprise bean, o que fornece uma separação clara entre a manipulação de mensagens e o processamento de negócios. Essa separação também significa que o processamento de negócios pode ser invocado pela chegada de mensagens recebidas ou, por exemplo, por um cliente WebSphere J2EE. As respostas podem ser manipuladas por outro enterprise bean agindo como um bean emissor ou podem ser manipuladas no bean acionado por mensagens.

Os beans acionados por mensagens do EJB 2.0 suportam apenas o sistema de mensagens JMS (Java™ Message Service). Os beans acionados por mensagens EJB 2.1 e EJB 3 podem suportar outros tipos de sistemas de mensagens além do JMS. Todos os beans acionados por mensagens devem implementar a interface MessageDrivenBean. Para o sistema de mensagens JMS, um bean acionado por mensagens também deve implementar a interface do listener de mensagens javax.jms.MessageListener. Outros adaptadores de recursos compatíveis ao Java EE Connector Architecture (JCA) podem fornecer suas próprias interfaces do listener de mensagem que devem ser implementadas.

É possível usar o assistente Novo Enterprise Bean do Rational Application Developer para criar um enterprise bean com um tipo de bean Bean Acionado por Mensagens. O assistente cria métodos apropriados para o tipo de bean.

Por convenção, a classe de bean acionado por mensagens é denominada nameBean, em que name é o nome designado ao bean acionado por mensagens, por exemplo:
public class MyJMSppMDBBean implements MessageDrivenBean, javax.jms.MessageListener

Um bean acionado por mensagens pode ser registrado no serviço de cronômetro EJB para notificações de eventos baseados em tempo, se também implementar a interface javax.ejb.TimedObject e chamar o método de retorno de chamada do cronômetro pela seguinte chamada: void ejbTimeout(Timer). No tempo planejado, o contêiner então chama o método ejbTimeout do bean acionado por mensagens.

A classe do bean orientado por mensagem deve definir e implementar os seguintes métodos:
  • onMessage(message), que devem atender aos seguintes requisitos:
    • O método deve ter um único argumento do tipo javax.jms.Message.
    • A cláusula throws não deve definir nenhuma exceção de aplicativo.
    • Se o bean acionado por mensagens estiver configurado para usar transações gerenciadas por bean, ele deverá chamar a interface javax.transaction.UserTransaction para fazer o escopo das transações. Como estas chamadas ocorrem dentro do método onMessage(), o escopo de transação não inclui o recebimento de mensagem inicial. Para obter mais informações, consulte o tópico sobre suporte a transações de beans acionados por mensagens.

    Para tratar a mensagem no método onMessage() (por exemplo, para passar a mensagem para o outro enterprise bean), use o JMS padrão. Isto é conhecido como sistema de mensagens gerenciado por bean.

    Se estiver usando um adaptador de recursos compatível com JCA com uma interface do listener de mensagens diferente, outro método além do método onMessage() pode ser necessário. Para obter informações sobre a interface do listener de mensagens necessária, consulte a documentação que foi fornecida com seu adaptador de recursos compatível com JCA.

  • ejbCreate()

    Você deve definir e implementar um método ejbCreate para cada maneira na qual você deseja que uma nova instância de um enterprise bean seja criada.

  • ejbRemove()

    Este método é invocado pelo contêiner quando um cliente invoca o método remove herdado pela interface inicial do enterprise bean da interface javax.ejb.EJBHome. Esse método deve conter todo o código que você deseja executar antes de uma instância de enterprise bean ser removida do contêiner (e os dados associados serem removidos da origem de dados).

  • ejbTimeout(Timer)

    Esse método é necessário apenas para suportar notificações do serviço de cronômetro e contém a lógica de negócios que manipula os eventos de tempo recebidos.

Procedimento

  1. Crie o projeto do Aplicativo Corporativo.
  2. Crie a classe do bean orientado a mensagens. É possível usar o assistente Novo Enterprise Bean do Rational(r) Application Developer para criar um enterprise bean cujo tipo de bean seja Bean Acionado por Mensagens.

    Para obter um exemplo sobre como criar a classe do bean acionado por mensagens, consulte a seção Exemplo deste tópico. Para obter informações adicionais, consulte Criando Beans Acionados por Mensagens no centro de informações do Rational Application Developer.

    O resultado dessa etapa é um bean orientado a mensagem que pode ser montado em um arquivo EAR para implementação.
  3. Opcional: Use o editor do descritor de implementação EJB para revisar e, se necessário, alterar os atributos de implementação. É possível utilizar o editor do descritor de implementação EJB para revisar atributos de implementação especificados no assistente de criação do EJB (como Tipo de Transação e Seletor de Mensagem), além de outros atributos de implementação padrão.

    Se houver necessidade, é possível substituir os valores desses atributos posteriormente, após o aplicativo corporativo ser exportado para um arquivo EAR para implementação, conforme descrito em Configuring deployment attributes for a message-driven bean against JCA 1.5-compliant resources e Configuring deployment attributes for a message-driven bean against a listener port.

    1. Na área de janela de propriedade, clique na guia Bean.
    2. No painel principal, configure o atributo Tipo de Transação.
      Tipo de Transação
      Esse atributo determina se as mensagens do bean acionado por mensagem possui suas próprias transações ou se o contêiner gerencia as transações em nome do bean.
      Bean
      O bean acionado por mensagens gerencia suas próprias transações.
      Contêiner
      O contêiner gerencia as transações em nome do bean.
    3. Em Configuração de Ativação, revise os seguintes atributos:
      acknowledgeMode
      Esse atributo determina como a sessão reconhece quaisquer mensagens que receber.
      Confirmação Automática
      A sessão reconhece automaticamente a entrega de cada mensagem.
      Confirmação de Recebimento Duplicada
      A sessão confirma com atraso a entrega de mensagens. Essa configuração provavelmente resulta na entrega de algumas mensagens duplicadas se o JMS falhar, portanto, ela deve ser usada apenas pelos aplicativos de consumidor que são tolerantes às mensagens duplicadas.

      Conforme definido na especificação do EJB, os clientes não podem usar o método Message.acknowledge() para reconhecer mensagens. Se um valor de CLIENT_ACKNOWLEDGE for transmitido na chamada createxxxSession, as mensagens serão automaticamente reconhecidas pelo servidor de aplicativos e o método Message.acknowledge() não será usado.

      Nota:

      A confirmação será enviada quando a mensagem for excluída.

      Se possuir um bean acionado por mensagens não transacional, o sistema excluirá a mensagem quando o bean acionado por mensagens for iniciado ou concluído. Se o bean acionado por mensagens gerar um exceção e, portanto, não for concluído, o sistema executará uma das seguintes ações:
      • Se o sistema for configurado para excluir a mensagem quando o bean acionado por mensagens for concluído, a mensagem será despachada para uma nova instância do bean acionado por mensagens, de modo que a mensagem tenha outra oportunidade de ser processada.
      • Se o sistema for configurado para excluir a mensagem quando o bean acionado por mensagens for iniciado, ela será perdida.

      A mensagem será excluída quando o bean acionado por mensagens for iniciado se a qualidade de serviço for configurada como Melhor esforço não persistente. Para todas as outras qualidades de serviço, a mensagem será excluída quando o bean acionado por mensagens for concluído.

      destinationType
      Esse atributo determina se o bean acionado por mensagens usa um destino de fila ou de tópico.
      Fila
      O bean acionado por mensagens usa um destino de fila.
      Tópico
      O bean acionado por mensagens usa um destino de tópico.
      subscriptionDurability
      Esse atributo determina se uma assinatura de tópico JMS é durável ou não durável.
      Durável
      Um assinante registra uma assinatura durável com uma identidade exclusiva que é mantida pelo JMS. Objetos de assinante subsequentes com a mesma identidade retomam a assinatura no estado em que foi deixada pelo assinante anterior. Se não houver nenhum assinante ativo para uma assinatura durável, o JMS reterá as mensagens de assinatura até que elas sejam recebidas pela assinatura ou expirem.
      Não-durável
      As assinaturas não duráveis duram o tempo de vida do objeto do assinante. Isso significa que um cliente vê as mensagens publicadas em um tópico apenas enquanto o assinante está ativo. Se o assinante não estiver ativo, estará faltando mensagens do cliente publicadas neste tópico.

      Um assinante não durável somente pode ser utilizado no mesmo contexto de transação (por exemplo, uma transação global ou um contexto de transação não especificado) que existia quando o assinante foi criado.

      messageSelector
      Esse atributo determina o seletor de mensagens JMS que é usado para selecionar quais mensagens o bean acionado por mensagens recebe. Por exemplo:
      JMSType='car' AND color='blue' AND weight>2500

      A cadeia do seletor pode referir-se aos campos no cabeçalho de mensagens do JMS e aos campos nas propriedades da mensagem. Os seletores de mensagens não podem fazer referência a valores do corpo da mensagem.

    4. Especifique os atributos de implementação de ligações.

      Em Ligações do WebSphere, selecione a opção Adaptador JCA e especifique os atributos de implementação de ligações:

      Nome de JNDI de ActivationSpec
      Esse atributo especifica o nome do JNDI da especificação de ativação que é usado para implementar esse bean acionado por mensagem. Este nome deve corresponder ao nome de uma especificação de ativação definida para o WebSphere Application Server.
      Alias de Autorização ActivationSpec
      Esse atributo especifica o nome de um alias de autenticação usado para autenticação de conexões para o adaptador de recursos JCA. Um alias de autenticação especifica o ID de usuário e senha que são usados para autenticar a criação de uma nova conexão com o adaptador de recursos da JCA.
      Nome de JNDI de Destino
      Esse atributo especifica o nome da JNDI que o bean acionado por mensagens usa para procurar pelo destino da JMS no namespace da JNDI.
    5. Opcional: Especifique Link de Destino para ativar links de mensagens.

      O vínculo de mensagens permite o roteamento de mensagens para um bean acionado por mensagens específico em uma implementação. A vinculação de mensagens permite que o fluxo de mensagens seja orquestrado entre componentes no mesmo aplicativo.

      Para uma mensagem ser consumida e processada por um bean acionado por mensagens, o elemento <message-destination-link> deve ser definido no descritor de implementação associado ao bean acionado por mensagens. O destino identificado pelo elemento <message-destination-link> corresponde ao destino lógico.

      Quando o <message-destination-ref> inclui um elemento <message-destination-link>, as mensagens são consumidas nesse destino.

      Para que o bean acionado por mensagens consuma mensagens enviadas para um destino, você pode declarar um elemento <message-destination-link> no descritor de implementação ou, como alternativa, configurá-lo na especificação de ativação.

  4. Monte e empacote o aplicativo para implementação.

Resultados

O resultado dessa tarefa é um arquivo EAR, contendo o bean acionado por mensagens, para o aplicativo corporativo que pode ser implementado noWebSphere Application Server.

Exemplo

O exemplo a seguir mostra como criar a classe do bean acionado por mensagens. O código de exemplo mostra como acessar o texto e o ID de Mensagem JMS, a partir de uma mensagem JMS do tipo TextMessage. Neste exemplo, primeiro o método onMessage() de um bean acionado por mensagens é usado para descompactar a mensagem de texto recebida e extrair o texto e o identificador de mensagem; em seguida, um método putMessage privado (definido na mesma classe do bean de mensagem) é usado para colocar a mensagem em outra fila:

public void onMessage(javax.jms.Message msg)
{
        String text      = null;
        String messageID = null;

        try
        {
                text = ((TextMessage)msg).getText();

                System.out.println("senderBean.onMessage(), msg text2: "+text);

                //
                // armazenar o id da mensagem para uso como o valor do Correlator
                //
                messageID = msg.getJMSMessageID();

                // Chamar um método privado para colocar a mensagem em outra fila
                putMessage(messageID, text);
        }
        catch  (Exception err)
        {
                err.printStackTrace();
        }
        return;
}

O que Fazer Depois

Após ter desenvolvido um aplicativo corporativo para utilizar beans acionados por mensagens, configure e implemente o aplicativo. Por exemplo, defina especificações de ativação para os beans acionados por mensagens e, opcionalmente, altere os atributos do descritor de implementação para um aplicativo. Para obter mais informações, consulte Implementando um Aplicativo Corporativo para Usar Beans Acionados por Mensagens com Recursos Compatíveis com JCA 1.5 e Implementando um Aplicativo Corporativo para Usar Beans Acionados por Mensagens com Portas Listener.

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tmb_devap
Nome do arquivo: tmb_devap.html