Você está offline; aguardando reconexão

Gerenciador de pool de conexão do exemplo para uso com o driver do Microsoft SQL Server 2000 para JDBC

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 313173
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.
Sumário
Este artigo passo a passo descreve pooling de conexão por meio do driver do Microsoft SQL Server 2000 para JDBC.

Pool.zip é um exemplo que demonstra o pool de conexão usando o driver do Microsoft SQL Server 2000 para JDBC. Este exemplo não é um gerente de pool de conexão completa; esse exemplo mostra como com.microsoft.jdbcx.sqlserver.SQLServerDataSource fornece ganchos para implementar um pool de conexão. J2EE todos os principais servidores de aplicativo fornecem conexão totalmente implementada gerentes de pool.

Para usar o exemplo, descompacte os arquivos para o local onde você deseja armazenar os arquivos e, em seguida, atualizar o caminho de classe. O arquivo .zip contém os arquivos Mspool.jar JNDI.properties e Pool.log.

Para obter instruções detalhadas sobre como configurar o Gerenciador de pool de exemplo em um ambiente J2EE, consulte a seção Sample connection pool manager deste artigo.

back to the top
Mais Informações

Pool de conexão

Pool de conexão é uma técnica que você pode usar para compartilhar conexões entre clientes solicitantes do banco de dados. Quando uma conexão foi criada e é colocada em um pool de objeto de tempo de execução, um aplicativo pode usar a conexão novamente. Cada aplicativo não tem que executar o processo de conexão completa sempre que ele usa uma conexão.

Quando o aplicativo fecha a conexão, a conexão é armazenada em cache no pool de objeto de tempo de execução novamente. Pool de conexão permite que um aplicativo para usar uma conexão de um pool de conexões que não precisam ser restabelecidas para cada uso.

Usando conexões do pool, aplicativos podem obter desempenho significativos obtém porque não tem aplicativos executar todas as tarefas envolvidas em estabelecer uma conexão. Isso pode ser especialmente significativo para aplicativos de camada intermediária que se conectam através de uma rede ou para aplicativos que se conectar e desconectar, como Internet repetidamente aplicativos.

back to the top

Estrutura de pooling de conexão JDBC2.0

A API JDBC2.0 fornece uma estrutura geral para oferecer suporte a pool de conexão; no entanto, essa API não especifica uma determinada conexão pool de implementação. O fornecedor do driver deve fornecer implementação para a estrutura. A API JDBC2.0 contém as seguintes classes e interfaces:
  • ConnectionEvent
    A classe ConnectionEvent fornece informações para o Gerenciador de pool sobre a conexão em pool que gerou o evento e sobre o SQLException no caso de um evento de erro.
  • ConnectionPoolDataSource
    O fornecedor do driver deve implementar a interface ConnectionPoolDataSource . Isso é usado como uma fábrica para criar PooledConnections .
  • PooledConnection
    O fornecedor do driver deve implementar a interface PooledConnection , que fornece os ganchos para o pool de conexões.
  • ConnectionEventListener
    O componente de pool deve implementar a interface ConnectionEventListener para receber os eventos que são gerados pelo objeto PooledConnection .
back to the top

Driver do Microsoft SQL Server 2000 para JDBC DataSource implementação

Driver do Microsoft SQL Server 2000 para JDBC fornece as seguintes classes que implementam as interfaces necessárias são especificadas pela especificação JDBC2.0 para oferecer suporte a pool de conexão:
A classe com.microsoft.jdbcx.sqlserver.SQLServerDataSource implementa javax.sql.DataSource , javax.sql.ConnectionPoolDataSource e javax.naming.Referenceable interfaces .

A classe com.microsoft.jdbcx.sqlserver.SQLServerDataSourceFactory implementa javax.naming.spi.ObjectFactory .
Usando essas classes, você pode registrar a fonte de dados em um contexto de nomeação. Essas classes também fornecem ganchos para a conexão pool que J2EE ambiente oferece.

Driver do Microsoft SQL Server 2000 para JDBC fornece todas as conexões que você deve ter para implementar um Gerenciador de pool para os fornecedores de terceiros. Geralmente, J2EE recipientes vêm com um Gerenciador de pool de conexão. Você pode usar com.microsoft.jdbcx.sqlserver.SQLServerDataSource para configurar um pool de conexões.

Para esta demonstração, use o Gerenciador de pool de conexão de exemplo para testar a fonte de dados de driver.

back to the top

Criar um objeto DataSource e registrar o objeto DataSource no ambiente JNDI

O código de exemplo a seguir mostra como criar o objeto PooledConnectionDatasource e, em seguida, vinculá-lo a contexto de nomeação.

No código, você obter o contexto de nomeação ( getContext ) para os quais você vincular a fonte de dados. Em seguida, o código instancia o objeto SQLServerDataSource , define os atributos necessários para SQLServerDataSource e vincula o objeto ao contexto de nomeação.

O nome para o qual vincula SQLServerDataSource é usado pelo Gerenciador de pool como uma fábrica de objeto.
/** The constructor expects the naming server URL and the context provider class. *    For example, the sample URL for ldap server on localhost can be *	ldap://localhost:389/ou=jdbc,cn=manager,dc=microsoft,dc=com,*    and the provider class name can be com.sun.jndi.ldap.LdapCtxFactory		*/ import com.microsoft.jdbcx.sqlserver.SQLServerDataSource;import java.util.Hashtable;import javax.naming.*;import javax.naming.directory.*;import javax.sql.*;import java.sql.*;public class JNDISetup{		     Context ctx = null;     String url;     String factory;         JNDISetup(String url, String factory){          this.url=url;               this.factory=factory;              getContext();     }	         private void getContext(){          try{               Hashtable env = new Hashtable();               env.put(Context.INITIAL_CONTEXT_FACTORY, factory);               env.put(Context.PROVIDER_URL, url);               ctx = new InitialContext(env);          }catch(Exception e){               System.out.println("Error in SetupJNDI:getContext() "+e.getMessage());               e.printStackTrace();          }			     }     public boolean bindDataSource(String bindName)         {               boolean isRegistered =false;                    try                    {                         SQLServerDataSource mds = new SQLServerDataSource();                         mds.setDescription("MS SQLServerDataSource");                         mds.setServerName("sqlserver");                         mds.setPortNumber(1433);                         mds.setDatabaseName("pubs");                         mds.setSelectMethod("cursor");                         ctx.rebind(bindName, mds);                         System.out.println("Bind success");                         isRegistered=true;                    }                         catch(Exception e)                    {                         System.out.println("Error Occurred in JNDISetup:     " + e.getMessage());                         e.printStackTrace();                    }                    return isRegistered;                    } 			          public javax.sql.ConnectionPoolDataSource getDataSource(String bindName){			               javax.sql.ConnectionPoolDataSource ds = null;			               try{							                         ds = (javax.sql.ConnectionPoolDataSource) ctx.lookup(bindName);               }catch(Exception e){                    System.out.println("Error in JNDISetup:getDataSource() : "+e.getMessage());                    e.printStackTrace();               }               return ds;			          }}						
back to the top

Criar uma conexão usando o pool de conexão de exemplo Gerenciador

O aplicativo cliente solicita um objeto de DataSource do ambiente de JNDI e, em seguida, usa o objeto DataSource para obter a conexão e libera a conexão. O Gerenciador de pool verifica que a conexão será reutilizada armazenando a conexão em cache de memória, por exemplo:
javax.sql.DataSource ds = (javax.sql.DataSource)context.lookup("jdbc/mypool");      Connection con = ds.getConnection();          ...............      con.close();				
no exemplo, o jndi pesquisa nome "jdbc/mypool" está vinculado a um poolmanager que retorna um PooledDataSource .

back to the top

Gerenciador de pool de conexão de exemplo

Para baixar um Gerenciador de pool de conexão de exemplo, visite o seguinte site da Microsoft: Use este Gerenciador de pool de conexão para testar a conexão SQLServerDataSource pool de suporte.

Observação importante Não há perguntas sobre as informações que está contido no documento ou sobre o uso, modificação ou implementação do Gerenciador de pool de conexão de exemplo serão abordadas pela Microsoft. O usuário aceitar todos os riscos associado com o uso desses arquivos, as informações nele contidos, sua disseminação e precisão.

Os arquivos que contido no anexo são apenas para fins de teste e demonstração. Não implementam esses arquivos em um ambiente de produção. Não interpretam esses arquivos como um produto Microsoft reconhecido.

Detalhes da implementação ConnectionPool exemplo

hierarquia de classe:
  1. com.Microsoft.jdbcx.SQLServer.SQLServerDataSource com.Microsoft.jdbcx.SQLServer.SQLServerDataSourceFactory com.Microsoft.mspool.PoolDataSource com.Microsoft.mspool.PoolDataSourceFactory com.Microsoft.mspool.Pool com.Microsoft.mspool.Pool$ConnectionEventManager com.Microsoft.mspool.Pool$PoolMonitor com.Microsoft.mspool.PoolHandler
  2. com.Microsoft.jdbcx.SQLServer.SQLServerDataSourceFactory com.Microsoft.mspool.PoolDataSource com.Microsoft.mspool.PoolDataSourceFactory com.Microsoft.mspool.Pool com.Microsoft.mspool.Pool$ConnectionEventManager com.Microsoft.mspool.Pool$PoolMonitor com.Microsoft.mspool.PoolHandler
  3. com.Microsoft.mspool.PoolDataSource com.Microsoft.mspool.PoolDataSourceFactory com.Microsoft.mspool.Pool com.Microsoft.mspool.Pool$ConnectionEventManager com.Microsoft.mspool.Pool$PoolMonitor com.Microsoft.mspool.PoolHandler
  4. com.Microsoft.mspool.PoolDataSourceFactory com.Microsoft.mspool.Pool com.Microsoft.mspool.Pool$ConnectionEventManager com.Microsoft.mspool.Pool$PoolMonitor com.Microsoft.mspool.PoolHandler
  5. com.Microsoft.mspool.Pool com.Microsoft.mspool.Pool$ConnectionEventManager com.Microsoft.mspool.Pool$PoolMonitor com.Microsoft.mspool.PoolHandler
  6. com.Microsoft.mspool.Pool$ConnectionEventManager com.Microsoft.mspool.Pool$PoolMonitor com.Microsoft.mspool.PoolHandler
  7. com.Microsoft.mspool.Pool$PoolMonitor com.Microsoft.mspool.PoolHandler
  8. com.Microsoft.mspool.PoolHandler
arquivos de configuração:
  1. JNDI.propertiesPool.log
  2. Pool.log
sobre as classes:
  • com.Microsoft.mspool.PoolDataSource
    Essa classe é usada para registrar as propriedades de pool e usa com.microsoft.mspool.Pool para retornar objetos de conexão em pool. Esta classe contém que o pool relacionadas a propriedades, como o seguinte:
    • pode fornecer o pool de conexões máximo e mínimos
    • IdleTimeout para invalidar uma conexão após sentado ocioso por um longo tempo
    • refreshPoolTime para verificar o status das conexões
    • JndiRefName de fonte de dados.
    Essa classe é registrada no ambiente JNDI e pode ser alcançada por qualquer cliente usando pesquisa JNDI. Antes de você pode registrar essa classe, você deve registrar com.microsoft.jdbcx.sqlserver.SQLServerDataSource no ambiente JNDI.
  • com.Microsoft.mspool.PoolDataSourceFactory
    Essa classe é usada como uma fábrica que retorna objetos com.microsoft.mspool.PoolDataSource .
  • com.Microsoft.mspool.Pool
    Essa classe contém o mecanismo para conexões de cache e para monitorar conexões usando duas classes internas, ConnectionEventManager e PoolMonitor .
  • com.Microsoft.mspool.PoolHandler
    Essa classe contém métodos para armazenar e gravar dados de log. Você pode estender essa classe para fornecer utilitários mais. Esta classe contém a referência estática para os pools. Ao integrar o Gerenciador de pool em um servidor de aplicativo Java (como tomcat), essa classe é iniciada na inicialização do servidor. Essa classe é implementada como um servlet que pode ser instanciado quando inicia o servidor de aplicativos Java.
o programa de instalação:
  1. Registre com.microsoft.jdbcx.sqlserver.SQLServerDataSource no ambiente JNDI. O código a seguir é uma configuração de exemplo que é usada em tomcat:
         <Resource name="jdbc/sql2000" auth="Container"                type="com.microsoft.jdbcx.sqlserver.SQLServerDataSource"/>     <ResourceParams name="jdbc/sql2000">          <parameter>               <name>factory</name>               <value>com.microsoft.jdbcx.sqlserver.SQLServerDataSourceFactory</value>          </parameter>          <parameter>               <name>driverClassName</name>               <value>com.microsoft.jdbcx.sqlserver.SQLServerDataSource</value>          </parameter>          <parameter><name>driverName</name><value>SQLServer</value></parameter>          <parameter><name>description</name><value>SQL Server DataSource</value></parameter>          <parameter><name>serverName</name><value>wdserver876</value></parameter>		          <parameter><name>portNumber</name><value>1433</value></parameter>          <parameter><name>selectMethod</name><value>cursor</value></parameter>          <parameter><name>databaseName</name><value>pubs</value></parameter>          <parameter><name>user</name><value>sridhar</value></parameter>          <parameter><name>password</name><value>password</value></parameter>          <parameter><name>loginTimeout</name><value>3000</value></parameter>     </ResourceParams>					
  2. Registrar com.microsoft.mspool.PoolDataSource no ambiente de JNDI, como no código de exemplo a seguir:
         <Resource name="jdbc/mspool" auth="Container" type="com.microsoft.mspool.PoolDataSource"/>     <ResourceParams name="jdbc/mypool">          <parameter>               <name>factory</name>               <value>com.microsoft.mspool.PoolDataSourceFactory</value>          </parameter>          <parameter>               <name>className</name>               <value>com.microsoft.mspool.PoolDataSource</value>          </parameter>          <parameter>               <name>description</name>               <value>MS_SQL_Pool_DataSource</value>          </parameter>          <parameter><name>poolName</name><value>wdserverpool</value></parameter>          <parameter><name>maxConnections</name><value>20</value></parameter>          <parameter><name>minConnections</name><value>1</value></parameter>          <parameter><name>checkEvery</name><value>20000</value></parameter>          <parameter><name>idleTimeout</name><value>500000</value></parameter>          <parameter><name>dsJndiName</name><value>jdbc/sql2000</value></parameter>     </ResourceParams>					
    • No descritor no código de exemplo, as propriedades maxConnections e minConnections especificam o número máximo e mínimo de conexões que permite que o pool.
    • A propriedade CheckEvery Especifica o intervalo de tempo o pool verifica conexões ociosas. O valor de exemplo para essa propriedade é de cada 900000 milissegundos (15mns).
    • A propriedade idleTimeOut Especifica quanto tempo uma conexão pode existir como uma conexão ociosa no pool livre. O valor de exemplo é 1800000 milissegundos (30mns).
    • A propriedade dsJndiName Especifica o nome para o qual vincula SQLServerDataSource em JNDI.
O objeto PoolHandler é iniciado para manter os pools são criados. Na implantação de exemplo que usa Tomcat 4.0, isso é implantado como um servlet em um aplicativo Web que usa o pool. Nesta servlet Web.xml o registro é a marca de descritor de exemplo que está especificada no aplicativo de demonstração do Tomcat:
  <servlet>    <servlet-name>MSPool</servlet-name>    <servlet-class>com.microsoft.mspool.MSPoolHandler</servlet-class>    <init-param>      <param-name>wdserverpool</param-name>      <param-value>jdbc/mypool</param-value>    </init-param>   </servlet>				
in essa marca servlet, o nome do servlet, a classe de implementação e um parâmetro estiver especificado. Neste exemplo, o nome do parâmetro é wdserverpool e valor é jdbc/pool .

O primeiro nome do parâmetro deve ser o nome da propriedade Nome_conjunto que é especificado na ligação PoolDataSource e o valor deve ser o nome para o qual PoolDataSource vincula no ambiente JNDI. A classe PoolHandler cria pools usando esse parâmetro. Se você deve criar dois pools, registrar duas PoolDataSources e especifique os parâmetros de acordo.

O exemplo usa um arquivo JNDI.properties para passar as propriedades de ambiente JNDI para este servlet. Nesse arquivo, especifique as variáveis e valores para o seguinte:
  • InitialContext , que é específico do aplicativo servidor. No caso de Tomcat, isso é Nulo .
  • base , que é específico do aplicativo servidor. No caso de Tomcat, isso é java: comp / env .
  • arquivo de log , que é o caminho totalmente qualificado para um arquivo de log onde o pool grava suas atividades ou erros.
Quando você tiver concluído esta configuração, use o seguinte código de exemplo para recuperar a conexão de pool de:
Context ctx = new InitialContext(); Context envCtx=(Context)ctx.lookup("java:comp/env");DataSource ds = (DataSource)envCtx.lookup("jdbc/mypool");if(ds!=null){    java.sql.Connection dbConnection = ds.getConnection();    java.sql.Statement dbStatement = dbConnection.createStatement();    java.sql.ResultSet dbResultSet = dbStatement.executeQuery(query);    while(dbResultSet.next()) {       .........................    }     dbResultSet.close();    dbStatement.close();    dbConnection.close(); 				
as duas primeiras linhas deste código de exemplo são diferentes para diferentes servidores J2EE. Você obtenha um objeto DataSource a partir de JNDI usando o nome para que sua classe PoolDataSource vincula, você fazer uma conexão, usar a conexão e feche a conexão. O cliente não é ciente de se usar pool; o código sempre é mesmo. A única coisa que você deve alterar é a variável de nome de ligação diferente no método de pesquisa.

Você pode configurar este Gerenciador de pool de exemplo em qualquer servidor de aplicativo Java; somente as alterações de processo de instalação. Para cada servidor de aplicativos diferentes, você deve saber como criar objetos de referência JNDI para registrar PoolDataSource e SQLServerDataSource e você deve saber como inicializar as classes de inicialização para inicializar PoolHandler .

Os arquivos de download do exemplo pool Gerenciador contém um arquivo Leiame que mostra como configurar o Gerenciador de pool no Apache/Tomcat 4.0 e inclui um exemplo que usa o Gerenciador de pool. Você pode estender este Gerenciador de pool para oferecer suporte TX conexões e os recursos personalizados que você deseja.

O exemplo também tem um arquivo de .jsp teste que você pode usar para testar o Gerenciador de pool.

back to the top
Referências
O seguinte arquivo está disponível para download no Centro de download da Microsoft:
Data de lançamento: Junho-12-2002

Para obter mais informações sobre como baixar os arquivos de suporte da Microsoft, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
119591Como obter arquivos de suporte da Microsoft de serviços on-line
Microsoft examinou esse arquivo em busca de vírus. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o arquivo foi publicado. O arquivo é armazenado em servidores com segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo.

O arquivo Pool.zip contém os seguintes arquivos:

Mspool.zipNome de arquivo
Arquivo de VasoPool.jar
Arquivo de logPool.log
Arquivo de instalação JNDIJNDI.Properties
Arquivo LeiameReadme.txt
Arquivo de testeTestPoolManager.jsp


Para obter mais informações, consulte os seguintes documentos:
  • Especificação de JDBC2.0
  • Documentação Tomcat 4.0
back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 313173 - Última Revisão: 02/23/2007 17:21:25 - Revisão: 4.4

Microsoft SQL Server 2000 Driver for JDBC

  • kbmt kbdownload kbfile kbinfo KB313173 KbMtpt
Comentários
d"; document.getElementsByTagName("head")[0].appendChild(m);