Ajustando Conjuntos de Conexões
Utilizar conjuntos de conexões ajuda a aliviar a sobrecarga do gerenciamento de conexões e diminuir as tarefas de desenvolvimento para o acesso a dados. Cada vez que um aplicativo tenta acessar um armazenamento de backend (como um banco de dados), ele requer recursos para criar, manter e liberar uma conexão com esse datastore. Para reduzir o esforço, este processo pode estabelecer os recursos de aplicativo completamente, o servidor de aplicativos permite que os administradores estabeleçam um conjunto de conexões de backend que os aplicativos podem compartilhar em um servidor de aplicativos. O Conjunto de Conexões distribui o código extra de conexão por meio de vários pedidos de usuários, preservando os recursos do aplicativo para pedidos futuros.
Sobre Esta Tarefa

Procedimento
- Impedir um conflito de conexão. Um congelamento pode ocorrer se o aplicativo exigir mais que uma conexão simultânea por encadeamento e o conjunto de conexões com o banco de dados não for grande o suficiente para o número de encadeamentos. Suponha que cada um dos threads do aplicativo requeira duas conexões simultâneas com o banco de dados e que o número de threads seja igual ao tamanho máximo do pool de conexão. O conflito pode ocorrer quando ambas as duas seguintes condições forem verdadeiras:
- Cada encadeamento tem sua primeira conexão com o banco de dados, e todos estão sendo utilizados.
- Cada encadeamento está aguardando por uma segunda conexão ao banco de dados e nenhuma ficará disponível, já que todos os encadeamentos estão bloqueados.
Para evitar o conflito neste caso, o valor do número máximo de conexões para o conjunto de conexões do banco de dados deve ser aumentando em pelo menos um. Isso garante que pelo menos um dos encadeamentos em espera obtenha uma segunda conexão com o banco de dados e evite um cenário de conflito.
Para evitar conflitos gerais de conexão, codifique seus aplicativos para usar somente uma conexão por encadeamento. Se você codificar o aplicativo para exibir conexões com o banco de dados simultâneas C por encadeamento, o conjunto de conexões deverá suportar pelo menos o seguinte número de conexões, em que T é o número máximo de encadeamentos:T * (C - 1) + 1
As definições do pool de conexão estão diretamente relacionadas ao número de conexões que o servidor de banco de dados está configurado para suportar. Se o número máximo de conexões do conjunto for aumentado e as configurações correspondentes do banco de dados não forem aumentadas, o aplicativo poderá falhar. Os erros de exceção de SQL resultantes são exibidos nos seguintes locais:Uma das causas mais comuns de conflitos de conexão é o uso do mesmo conjunto de conexões por servlets e Enterprise JavaBeans (EJBs), e onde o servlet chama o bean direta ou indiretamente. Por exemplo, um servlet que obtém uma conexão JMS do conjunto de conexões envia uma mensagem para um Bean Acionado por Mensagens (MDB) e aguarda uma resposta. O MDB é configurado para utilizar o mesmo conjunto de conexões que o servlet, portanto, outra conexão do conjunto é necessária para o MDB enviar uma resposta ao servlet. Servlets e enterprise beans não compartilham o conjunto de conexões. Este é um caso clássico de encadeamentos simultâneos (C), em que C=2 e T é o tamanho máximo do servlet e dos conjuntos de encadeamentos do EJB.o arquivo stderr.log
o SYSOUT do servant
- Desativar o conjunto de conexões.
- Para RRAs (adaptadores de recursos relacionais) inclua a propriedade customizada disableWASConnectionPooling em suas origens de dados.
- Clique em JDBC > Origens de Dados.
- Clique no nome da origem de dados que deseja configurar.
- Clique em Propriedades Customizadas sob o título Propriedades Adicionais.
- Clique em Novo(a).
- Preencha os campos requeridos com as seguintes informações:
- Nome: disableWASConnectionPooling
- Valor: true
- Para outros adaptadores de recursos, consulte as especificações de ligação para esse adaptador de recursos configurar os aplicativos para desativar o conjunto de conexões.
- Programaticamente, desative o conjunto de conexões por meio do adaptador de recursos.
- O servidor de aplicativos otimiza o seguinte código para detectar a exceção javax.resource.NotSupportedException e desativar o conjunto de conexões:
_managedFactory.matchManagedConnections(s,subject,cri); // 169059 174269 } catch(javax.resource.NotSupportedException e){
- Para RRAs (adaptadores de recursos relacionais) inclua a propriedade customizada disableWASConnectionPooling em suas origens de dados.
- Ativar alistamento adiado.
No ambiente do servidor de aplicativos, cadastramento adiado refere-se à técnica na qual o servidor de aplicativos aguarda até a conexão ser utilizada antes que seja listada no escopo UOW (unit of work) do aplicativo.
Considere a ilustração a seguir de inscrição adiada:- Um componente de aplicativo que utiliza a inscrição adiada chama o método getConnection de dentro de uma transação global.
- O componente de aplicativo não utiliza imediatamente a conexão.
- Quando o aplicativo emite a chamada para utilização inicial da conexão, o gerenciador de transações intercepta a chamada.
- O gerenciador de transações inscreve o recurso XA para a conexão e chama o método XAResource.start.
- O gerenciador de conexão associado ao recurso XA envia a chamada ao banco de dados.
A inscrição adiada oferece melhor desempenho no caso em que uma conexão é obtida, mas não utilizada, dentro do escopo UOW. A técnica economiza o custo de participação da transação até o UOW no qual a participação deve ocorrer.
Verifique com seu provedor do adaptador de recursos se é necessário saber se o adaptador de recursos fornece essa funcionalidade. O adaptador de recursos relacional do servidor de aplicativos suporta automaticamente o alistamento adiado.
Incorporando o alistamento adiado no código:
A especificação Java™ Platform, Enterprise Edition (Java EE) Connector Architecture (JCA) Versão 1.5 e mais recente chama a otimização do cadastramento de transações técnicas lentas do cadastramento adiado. Esse suporte vem por meio de uma interface de marcador (LazyEnlistableManagedConnection) e de um método no gerenciador de conexões (LazyEnlistableConnectionManager()):package javax.resource.spi; import javax.resource.ResourceException; import javax.transaction.xa.Xid; interface LazyEnlistableConnectionManager { // application server void lazyEnlist(ManagedConnection) throws ResourceException; } interface LazyEnlistableManagedConnection { // resource adapter }
- Controlar compartilhamento do conjunto de conexões. É possível usar a propriedade customizada defaultConnectionTypeOverride ou globalConnectionTypeOverride do conjunto de conexões para uma factory de conexão ou uma origem de dados específica para controlar o compartilhamento de conexões:
- A propriedade defaultConnectionTypeOverride altera o valor de compartilhamento padrão para um conjunto de conexões. Essa propriedade permite controlar o compartilhamento de conexões para consultas diretas. Se as referências do recurso estiverem configuradas para essa origem de dados ou factory de conexão, as configurações da referência de recurso terão precedência sobre as configurações da propriedade defaultConnectionTypeOverride. Por exemplo, se um aplicativo estiver fazendo consultas diretas e as conexões não compartilhadas forem necessárias, configure a propriedade defaultConnectionTypeOverride como unshared.
- O valor especificado para a propriedade customizada globalConnectionTypeOverride tem precedência sobre todas as outras configurações de compartilhamento de conexão. Por exemplo, se você configurar essa propriedade como unshared, todas as solicitações de conexão serão não compartilhados, tanto para consultas diretas quanto para consultas de referência de recurso. Essa propriedade fornece uma maneira rápida de testar as consequências de se mover todas as conexões de uma origem de dados ou uma factory de conexão específica para não compartilhadas, ou compartilhadas, sem alterar qualquer configuração de referência do recurso.
Se você especificar valores para as propriedades defaultConnectionTypeOverride e globalConnectionTypeOverride, somente os valores especificados para a propriedade globalConnectionTypeOverride serão usados para determinar o tipo de compartilhamento da conexão.
Para incluir estas novas propriedades customizadas nas configurações para um conjunto de conexões de origem de dados ou connection factory, uma nova propriedade customizada do conjunto de conexões deve ser criada. Para incluir uma destas propriedades em uma origem de dados, use o console administrativo. Clique em Recursos > JDBC > Origens de Dados. Selecione a sua origem de dados na lista e depois clique em Propriedades adicionais > Propriedades do conjunto de conexões > Propriedades customizadas do conjunto de conexões > Novo. Para outras connection factories J2C ou JMS, navegue para a definição de connection factory no console administrativo. Em seguida, selecione Propriedades Adicionais > Conjunto de Conexões > Propriedades Customizadas do Conjunto de Conexões > Novo. Agora especifique defaultConnectionTypeOverride ou globalConnectionTypeOverride no campo Nome e shared ou unshared no campo Valor.Importante: As propriedades devem ser configuradas em Propriedades Customizadas do Conjunto de Conexões e NÃO em Propriedades Customizadas geral na origem de dados ou na connection factory. Execute automaticamente uma ação de mitigação se um conjunto de conexões não puder estabelecer uma conexão com seu gerenciador de recursos configurado.
Usando as propriedades failureNotificationActionCode e failureThreshold, um conjunto de conexões pode ser configurado para que, quando uma factory de conexão não conseguir estabelecer uma conexão com seu gerenciador de recursos configurado, uma ação de mitigação autônoma seja realizada pelo tempo de execução do WebSphere Application Server para z/OS, para minimizar o impacto da falha do usuário final. Quando uma factory de conexão consegue restabelecer uma conexão com o gerenciador de recursos configurado, a ação de mitigação autônoma é revertida. Um exemplo desse tipo de ação de mitigação é que o tempo de execução pode emitir um comando "pausar listeners" para o servidor com o recurso com falha, evitando que novo trabalho seja aceito pelo servidor. Quando combinado com um front-end de alta disponibilidade, é possível rotear novo trabalho para outros servidores em um cluster.
É enviada notificação para o tempo de execução do z/OS quando uma determinada factory de conexão ou origem de dados atinge um valor de limite de falha especificado ou padrão. A notificação de falha inclui um código de ação configurado que determina como o tempo de execução responderá à notificação de falha. Consulte o tópico Propriedades Customizadas do Conjunto de Conexões, para obter as definições do código de ação.
Para usar essas propriedades, você deve defini-las como novas propriedades customizadas do conjunto de conexões. Isso pode ser feito por meio do console administrativo da seguinte forma: Clique em Provedores JDBC > Origens de dados > Conjuntos de conexões > Propriedades Customizadas > Novo. Em seguida, especifique failureNotificationActionCode ou failureNotification no campo Nome e o valor apropriado no campo Valor.
Para saber mais sobre as configurações dessas propriedades customizadas, consulte o tópico Propriedades Customizadas do Conjunto de Conexões.
- Descarte as conexões.
As configurações de tempo de coleta e de tempo limite não utilizado não fazem com que as conexões inativas ou não utilizadas sejam descartadas se a região servidora está inativa. Esta situação pode fazer com que algumas conexões do DB2 sejam mantidas mais tempo do que é necessário.
Se preferir ter as conexões descartadas no momento especificado por uma combinação de configurações de tempo de coleta e tempo limite não utilizado, mesmo se esta preferência puder fazer com que a região servidora inativa se torne ativa novamente, será possível incluir a propriedade customizada nondeferredreaper em suas configurações de origem de dados do provedor de driver JDBC. Quando você inclui esta propriedade customizada, as conexões são descartadas no momento especificado por uma combinação de configurações de tempo de coleta e de tempo limite não utilizado.
Para incluir esta propriedade customizada em suas configurações de origem de dados do provedor de driver JDBC, no console administrativo, clique em Recursos > Provedores JDBC > Provedor do Driver Universal JDBC do DB2 > Origens de Dados > data_source > Propriedades Customizadas > Novo. Em seguida, especifique nondeferredreaper no campo Nome, true no campo Valor e java.lang.Boolean no campo Tipo. Esta nova configuração não entra em vigor até você reiniciar o servidor que está usando esta origem de dados.
Evitar Problemas: A ativação de uma região servidora inativa para o propósito exclusivo de descartar conexão não utilizada, pode causar o uso adicional e, às vezes, indesejado da CPU. Além disso, a mensagem de aviso a seguir pode ser registrada e deve ser ignorada:
gotchaDSRA8200W: Configuração do DataSource: DSRA8020E: Aviso: A propriedade 'nondeferredreaper' não existe no DataSource classcom.ibm.db2.jcc.DB2ConnectionPoolDataSource.
- Limpar os conjuntos de conexões com base na
política de limpeza.
Quando o modelo de detecção de erros do conjunto de conexões é configurado para o mapeamento de exceção, a exceção da conexão antiga indica que a conexão não é mais válida.
Normalmente, quando uma StaleConnectionException resulta de um processo de mapeamento de exceções, um erro de conexão de evento é disparado e subsequentemente o conjunto de conexões é limpo. No entanto, neste caso, o SCE é instanciado, o código existente não tem a funcionalidade de disparar o evento de erro de conexão e o conjunto não é limpo. Quando as conexões são finalizadas no lado do banco de dados ao solicitar uma nova conexão, o driver emite uma XAException. Se os resultados de errorDetectionModel=ExceptionMapping, um ConnectionErrorEvent será disparado para que o conjunto de conexões seja excluído com base na política de exclusão.
Para incluir esta propriedade customizada nas configurações de origem de dados do provedor de driver JDBC, no console administrativo, clique em Recursos > Provedores JDBC > Provedor do Driver Universal JDBC do DB2 > Origens de Dados > data_source > Propriedades Customizadas > Novo. Em seguida, especifique fireCEEventOnSCE no campo Nome, true no campo Valor e java.lang.Boolean no campo Tipo. Esta nova configuração não entra em vigor até você reiniciar o servidor que está usando esta origem de dados.
O código WebSphere RRA foi alterado para que o conjunto seja eliminado de maneira adequada em uma StaleConnectionException quando usar o ExceptionMapping como o modelo de errorDetection.
Subtópicos


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_conpoolman
Nome do arquivo: tdat_conpoolman.html