Linhas de comentário por Soloman Barghouti: Uma técnica para cancelar consultas indesejadas ou inconvenientes a banco de dados

Responsabilidade de solicitação precisa e consistente em um ambiente de servidor de aplicativo J2EE™ poderia ser a chave para lidar com eventos como consultas indesejadas ou inconvenientes a banco de dados. Este artigo descreve uma técnica simples para identificar e lidar com consultas inconvenientes em um ambiente de servidor de aplicativo IBM® WebSphere® -- sem precisar reiniciar o servidor de aplicativo ou o banco de dados. Este conteúdo é parte do IBM WebSphere Developer Technical Journal.

Soloman Barghouthi, Senior Software Engineer, IBM

Author photoSoloman Barghouthi é engenheiro de software sênior no IBM Rochester Lab. Soloman é arquiteto e líder da equipe WebSphere Application Server EJBContainer. Soloman é especialista em banco de dados e publicou muitos artigos sobre interação de banco de dados/WebSphere Application Server.


nível de autor Contribuidor do
        developerWorks

27/Jan/2010

Interrompa essa consulta

Uma arquitetura corporativa de três camadas consiste em uma camada de cliente, uma camada intermediária e uma camada de dados. Em muitos ambientes de Plataformas Java™ 2, Enterprise Edition (J2EE), o IBM WebSphere Application Server fornece a camada intermediária. O WebSphere Application Server processa solicitações da camada do cliente e acessa a camada de dados (por exemplo, IBM DB2®) para recuperar ou atualizar a camada de dados com base nas entradas e solicitações do cliente. Em muitos casos, um alias de dados de autenticação é usado frequentemente em solicitações para interação de banco de dados. Isso poderia resultar em uma responsabilidade reduzida devido à perda da identidade do responsável pela chamada. Responsabilidade é muito importante, não apenas para identificar quem está fazendo o que de um ponto de vista de rastreamento, mas também para possibilitar que o WebSphere Application Server e administradores de banco de dados reajam a eventos inesperados, como a necessidade de identificar e cancelar consultas a banco de dados indesejadas e inconvenientes.

Figura 1. Arquitetura de três camadas
Figure 1. Three-tiered architecture

Este artigo explica como usar um recurso no WebSphere Application Server para marcar conexões de banco de dados com informações do cliente e como é possível aplicar esse recurso de marcação a situações interessantes, como para identificar e cancelar consultas inconvenientes.


Marcando conexões ao banco de dados com informações do cliente

Um recurso introduzido no WebSphere Application Server V6.0 possibilita marcar conexões a bancos de dados com certas informações. Essas informações são, em seguida, transferidas pelo servidor de aplicativos para a camada do banco de dados (se o banco de dados oferece suporte a transferir essas informações), onde podem ser usadas para identificar quem está fazendo trabalho na conexão. As informações que podem ser configuradas em uma conexão ao banco de dados incluem:

  • CLIENT_ACCOUNTING_INFO: Especifica informações de contabilidade para a conexão. Essas informações são usadas para fins de contabilidade do cliente e principalmente com o DB2 para z/OS®.
  • CLIENT_LOCATION: Especifica o local do cliente que está conduzindo a solicitação.
  • CLIENT_ID: Especifica o nome de usuário do cliente atual para a conexão. Esse nome é para fins de contabilidade do cliente apenas, e não o valor de usuário para a conexão JDBC; ou seja, não é um alias de dados de autenticação.
  • CLIENT_APPLICATION_NAME: Especifica o nome do aplicativo que está usando a conexão ao banco de dados.

Essas informações podem ser configuradas em uma conexão em um aplicativo WebSphere Application Server V6.0 usando a API com.ibm.websphere.rsadapter.WSConnection, mostrada na Figura 2.

Figura 2. API WSConnection
Figure 2. WSConnection API

Iniciando com o WebSphere Application Server V7, a API acima é reprovada em favor da API JDBC 4.0 padrão, como mostrado na Figura 3.

Figura 3. API da conexão JDBC 4.0
Figure 3. JDBC 4.0 Connection API

Fazendo bom uso do recurso de marcação

Suponha que você tem um aplicativo que monta consultas a banco de dados dinamicamente com base em solicitações do usuário e, em seguida, envia essas consultas a um banco de dados DB2 usando o WebSphere Application Server. Durante os testes, você percebe que há alguns casos de uso para os quais você deseja a habilidade de cancelar consultas que possam ser especificadas incorretamente pelo cliente. Como você faz isso?

A Listagem 1 mostra um exemplo simples que executa uma consulta ao banco de dados que você desejará identificar e cancelar.

Listagem 1
.....
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("jdbc/myDS"); 
conn=ds.getConnection(); 
stmt=conn.createStatement(); 
rs=stmt.executeQuery("Select * from myEmpTable");  
while(rs.next()){ 
out.println(rs.getString(1));

Para aproveitar o recurso de marcação aqui, você precisará marcar a conexão ao banco de dados com informações do cliente. A Listagem 2 mostra como você pode fazer isso.

Listagem 2
import com.ibm.websphere.rsadapter.WSConnection
public void displayInfo()
{…..
Properties props = new properties();
 props.setProperty(WSConnection.CLIENT_APPLICATION_NAME,
	 "myspecialAppappname_displayInfo");

javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("jdbc/myDS"); 
conn=ds.getConnection(); 
((WSConnection)conn).setClientInformation(prop);
stmt=conn.createStatement(); 
rs=stmt.executeQuery("Select * from myEmpTable"); 
while(rs.next()){ 
out.println(rs.getString(1)); 
}

O aplicativo agora anota a conexão que usa com myspecialAppappname_displayInfo. Agora que a conexão ao banco de dados está marcada com as informações do cliente, o administrador do banco de dados pode identificar e cancelar o trabalho associado ao aplicativo simplesmente buscando conexões com o valor anotado. Por exemplo, um administrador de banco de dados DB2 pode realizar essas etapas para identificar e cancelar essa consulta:

  1. A partir de uma janela de comando DB2, emita este comando para exibir todas as informações de conexão ao banco de dados (Figura 4):

    db2 get snapshot for applications on sample

    Figura 4. Comando obter instantâneo
    Figure 4. Get snapshot command
  2. Como mostrado na Figura 4, o nome do aplicativo cliente TP Monitor tem um valor de myspecialAppappname_displayInfo, que é o valor configurado pelo aplicativo para identificar a conexão.
  3. É possível destruir a conexão que está sendo usada para executar a consulta usando o valor Application handle (que é 78 aqui) e executando o comando forçar aplicativo DB2:

    db2 force application (78)

    Esse comando de aplicativo faz a conexão que está executando a consulta inválida ser interrompida e lançar uma StaleConnectionException para o aplicativo. O aplicativo então deve lidar com a exceção do mesmo modo que faria com qualquer outra StaleConnectionException.

Embora encerrar uma consulta pendurada ou de execução longa possa parecer uma tarefa complexa, o recurso de marcação do WebSphere Application Server fornece uma maneira fácil de simplificar a tarefa. A técnica descrita aqui pode ser aplicada a qualquer banco de dados, desde que o banco de dados tenha ferramentas similares ao DB2 para exibir e cancelar uma dada consulta.

Recursos

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management, WebSphere
ArticleID=476072
ArticleTitle=Linhas de comentário por Soloman Barghouti: Uma técnica para cancelar consultas indesejadas ou inconvenientes a banco de dados
publish-date=01272010