Connection factories do JMS

Um connection factory é um objeto que um cliente do JMS (um programa do JMS que usa a API do JMS) usa para criar uma conexão com um provedor do JNDI (um provedor de sistema de mensagens como IBM® MQ).

É possível usar o IBM MQ Explorer para criar connection factories e para definir os parâmetros de conexão que o connection factory usará para criar conexões.

Os connection factories, como os destinos, são objetos administrados e armazenados em um namespace do JNDI, que é um local definido no serviço de nomenclatura e de diretório. O contexto inicial define a raiz do namespace do JNDI. No IBM MQ Explorer, todos os connection factories são armazenados em pastas Connection Factories no contexto e subcontextos apropriados, conforme mostrado na figura a seguir.

Na figura, o connection factory denominado Connection Factory 1 é armazenado na pasta Connection Factories do contexto inicial chamado Contexto Inicial do Sistema de Arquivos.

Uma captura de tela de um connection factory na pasta Connection Factories.

Ao definir um connection factory, você seleciona o provedor de sistemas de mensagens que é usado como o provedor do JMS (por exemplo, IBM MQ ou Real-time); um connection factory pode criar conexões apenas com esse provedor de sistemas de mensagens. Para que o cliente do JMS possa criar conexões com um provedor de sistemas de mensagens diferente, deve-se criar um novo connection factory e especificar o provedor de sistemas de mensagens. O transporte em tempo real não está disponível no IBM MQ 8.0. Se estiver usando o IBM MQ 8.0, você poderá definir o transporte em tempo real, mas ele falha quando é feita uma tentativa para criar uma conexão.

Connection Factories Independentes do Domínio

Há dois domínios do sistema de mensagens: o domínio do sistema de mensagens ponto a ponto e o domínio do sistema de mensagens de publicação/assinatura. Você pode criar um connection factory para criar conexões especificamente para o sistema de mensagens ponto a ponto (utilizando a interface QueueConnectionFactory) ou especificamente para o sistema de mensagens de publicação/assinatura (utilizando a interface TopicConnectionFactory). A partir do JNDI, também é possível criar connection factories que sejam independentes de domínio e, portanto, possam ser usados para o sistema de mensagens ponto a ponto e de publicação/assinatura (usando a interface do ConnectionFactory). Para obter informações adicionais, consulte Criando um Connection Factory.

Se o aplicativo JMS for destinado ao uso apenas do sistema de mensagens ponto a ponto ou apenas do sistema de mensagens de publicação/assinatura, será possível selecionar o domínio do sistema de mensagens específico ao criar o connection factory e um connection factory específico do domínio será criado.

Se, no entanto, você quiser executar ambos os trabalhos, ponto a ponto e publicação/assinatura na mesma transação, poderá criar um connection factory independente do domínio. Por exemplo, você pode querer que um aplicativo JMS assine um tópico (sistema de mensagens de publicação/assinatura) e, quando o aplicativo JMS receber uma determinada mensagem, ele enviará outra mensagem para uma fila (sistema de mensagens ponto a ponto). É difícil executar com segurança os trabalhos de ponto a ponto e de publicação/assinatura na mesma transação se você usar connection factories específicos do domínio: você deve criar um connection factory separado para cada domínio do sistema de mensagens, o que significa que o trabalho de ponto a ponto é feito em uma transação que é controlada pela sessão QueueSession e o trabalho de publicação/assinatura é feito em uma transação que é controlada pela sessão TopicSession. É difícil assegurar que as ações de envio e recebimento aconteceram ou que ambas foram restauradas.

Em vez de criar um connection factory específico do domínio para o trabalho de ponto a ponto e um connection factory específico do domínio para o trabalho de publicação/assinatura, é possível criar um único connection factory independente do domínio para ambos. Isso significa que o connection factory cria uma conexão, que cria uma sessão. A sessão cria um MessageConsumer a partir de um tópico e um MessageProducer para uma fila. Quando o aplicativo JMS recebe a mensagem publicada, a próxima mensagem pode ser enviada para a fila sob a mesma transação da sessão; ambas as operações podem ser confirmadas ou retrocedidas como uma única unidade de trabalho.

Para obter mais informações, consulte Usando classes do IBM MQ para JMS na IBM Knowledge Center.