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
.
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.