Ambiente de configuração do pool de conexões de banco de dados SQL Server2000 do Tomcat em JSP:
1. Banco de dados: Microsoft SQL Server 2000
2. Driver de banco de dados: net.sourceforge.jtds.jdbc.Driver
Visão geral de JNDI (Java Naming and Directory Interface):
Tomcat4(5) fornece um exemplo de implementação JNDI--InitialContext que é compatível com serviços de aplicativos Java Enterprise Edition. Seus dados iniciais são definidos no arquivo $CATALINA_HOME/conf/server.xml e podem ser referenciados pelos seguintes elementos na descrição do ambiente da aplicação web (/WEB-INF/web.xml):
1) <env-entry>--Entrada do ambiente, define como o aplicativo opera.
2) <resource-ref>--Parâmetros de recursos, geralmente drivers de banco de dados, sessão JavaMail, fábricas de classes personalizadas, etc.
3) <resource-env-ref>--No Servlet 2.4, é usado para simplificar a configuração de recursos que não requerem informações de autenticação, como parâmetros de ambiente e variáveis resource-ref.
InitialContext é definido quando o aplicativo da web é inicializado para oferecer suporte aos componentes do aplicativo da web. Todas as entradas e recursos são colocados na seção java:comp/env do namespace JNDI. Clique nos seguintes URLs para obter mais informações:
1) Nomenclatura Java e interface de diretório
2) Especificação da plataforma J2EE
Configurando recursos JNDI Para configurar recursos JNDI, use os seguintes identificadores no arquivo $CATALINA_HOME/conf/server.xml:
1) <Environment>--Defina o nome e o valor de uma entrada variável JNDI InitialContext no domínio (equivalente ao <env-entry> mencionado acima).
2) <Resource>--Defina o nome e o tipo de recursos disponíveis para o aplicativo (equivalente ao <resource-ref> mencionado acima).
3) <ResourceParams>--Defina o nome da fábrica de classes de recursos Java ou do atributo JavaBean a ser usado.
4) <ResourceLink>--Adicione um link ao ambiente JNDI global (Contexto JNDI).
Os identificadores acima devem ser colocados entre <Context> e </Context> (para aplicações web especializadas) ou entre <DefaultContext> e </DefaultContext>.
Além disso, os nomes e valores definidos no Descritor de Aplicação Web (/WEB-INF/web.xml) também são definidos no Contexto Inicial, quando habilitado pelo elemento <Environemt> o valor é redefinido para seu valor inicial.
Variáveis globais podem ser definidas em <GlobalNamingResources> do elemento filho <Server>.
Visão geral do pool de conexões de banco de dados:
As conexões de banco de dados são um recurso crítico, limitado e caro, especialmente em aplicações web multiusuário. O gerenciamento das conexões de banco de dados pode afetar significativamente a escalabilidade e robustez de toda a aplicação e afetar os indicadores de desempenho do programa. O pool de conexões de banco de dados foi proposto para resolver esse problema.
O pool de conexões de banco de dados é responsável por alocar, gerenciar e liberar conexões de banco de dados. Ele permite que os aplicativos reutilizem uma conexão de banco de dados existente em vez de restabelecer uma conexão de banco de dados cujo tempo ocioso exceda o tempo ocioso máximo para evitar erros devido a falha na liberação; a conexão com o banco de dados. Causada pela falta de conexão com o banco de dados. Esta tecnologia pode melhorar significativamente o desempenho das operações de banco de dados.
O pool de conexões de banco de dados criará um certo número de conexões de banco de dados e as colocará no pool de conexões durante a inicialização. O número dessas conexões de banco de dados é definido pelo número mínimo de conexões de banco de dados. Independentemente de essas conexões de banco de dados serem usadas ou não, sempre será garantido que o conjunto de conexões terá pelo menos esse número de conexões. O número máximo de conexões de banco de dados no pool de conexões limita o número máximo de conexões que o pool de conexões pode ocupar. Quando o número de conexões solicitadas pelo aplicativo do pool de conexões exceder o número máximo de conexões, essas solicitações serão adicionadas ao pool de conexões. fila de espera. A configuração do número mínimo de conexões e do número máximo de conexões no pool de conexões do banco de dados deve levar em consideração os seguintes fatores:
1) O número mínimo de conexões é o número de conexões de banco de dados mantidas pelo pool de conexões, portanto, se o aplicativo não usar uma grande quantidade de conexões de banco de dados, uma grande quantidade de recursos de conexão de banco de dados será desperdiçada;
2) O número máximo de conexões é o número máximo de conexões que o pool de conexões pode solicitar. Se a solicitação de conexão com o banco de dados exceder esse número, as solicitações subsequentes de conexão com o banco de dados serão adicionadas à fila de espera, o que afetará as operações subsequentes do banco de dados.
3) Se a diferença entre o número mínimo de conexões e o número máximo de conexões for muito grande, a primeira solicitação de conexão será lucrativa e as solicitações de conexão subsequentes que excedam o número mínimo de conexões serão equivalentes a estabelecer uma nova conexão com o banco de dados. No entanto, essas conexões de banco de dados maiores que o número mínimo de conexões não serão liberadas imediatamente após o uso. Elas serão colocadas no pool de conexões para aguardar a reutilização ou serão liberadas após o tempo limite de inatividade.
Pré-requisitos para configurar o conjunto de conexões do banco de dados Tomcat:
1. O ambiente de execução Java deve estar instalado;
2. Deve haver um servidor de banco de dados SQL Server2000 (não precisa ser local);
3. Você deve ter o jtds.jar e colocá-lo no diretório $CATALINA_HOME/common/lib (somente aqui). Ele é usado porque o driver Java SQL Server da Microsoft não oferece suporte a consultas secundárias, que podem ser encontradas online. Atualmente usando jtds-0.6.jar.
Defina o pool de conexões do banco de dados em $CATALINA_HOME/conf/server.xml:
A seguir está o código de configuração, que deve ser colocado entre <Host> e </Host>.
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
<Nome do recurso="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/connectDB">
<parâmetro>
<name>maxAtivo</name>
<!-- Número máximo de conexões de banco de dados no pool. Defina como 0 sem limite -->.
<valor>100</valor>
</parametro>
<parâmetro>
<name>maxIdle</name>
<!-- Número máximo de conexões de banco de dados ociosas a serem retidas no pool. Defina como 0 sem limite -->.
<valor>30</valor>
</parametro>
<parâmetro>
<nome>maxWait</nome>
<!-- Tempo máximo de espera para que uma conexão de banco de dados fique disponível em ms. Uma exceção será lançada se esse tempo limite for excedido. Defina como -1 para aguardar indefinidamente -->.
<valor>10.000</valor>
</parametro>
<parâmetro>
<name>remover Abandonado</name>
<!-- Conexões de banco de dados abandonadas são removidas e recicladas -->
<valor>verdadeiro</valor>
</parametro>
<parâmetro>
<name>removerAbandonedTimeout</name>
<!-- Use o parâmetro removeAbandonedTimeout para definir o número de segundos que uma conexão com o banco de dados ficou inativa antes de ser considerada abandonada -->.
<valor>60</valor>
</parametro>
<parâmetro>
<name>logAbandonado</name>
<!-- Registrar um rastreamento de pilha do código que foi abandonado -->
<valor>falso</valor>
</parametro>
<parâmetro>
<nome>fábrica</nome>
<!-DBCP Fábrica de fonte de dados básica -->
<valor>org.apache.commons.dbcp.BasicDataSourceFactory</valor>
</parametro>
<parâmetro>
<nome>nome de usuário</nome>
<!-- Nome de usuário do banco de dados -->
<value>Iorishinier</value>
</parametro>
<parâmetro>
<nome>senha</nome>
<!-- Senha do usuário -->
<value>minhasenha</value>
</parametro>
<parâmetro>
<name>driverClassName</name>
<!-- Nome da classe do driver de banco de dados -->
<valor>net.sourceforge.jtds.jdbc.Driver</valor>
</parametro>
<parâmetro>
<nome>URL</nome>
<!-- Endereço do banco de dados -->
<valor>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</valor>
</parametro>
</ResourceParams>
</Contexto>
A seguir está uma descrição de alguns parâmetros:
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
em:
1) path especifica o caminho, o diretório de qualidade definido aqui é $CATALINA_HOME/webapps;
2) diretório raiz do arquivo docBase.
3) reloader Se deve ser recompilado quando a página da web for atualizada.
4) maxActive O número máximo de conexões de banco de dados no pool de conexões. Defina como 0 para não ter limite.
5) maxIdle O tempo máximo de inatividade da conexão com o banco de dados. Após esse tempo ocioso, a conexão com o banco de dados será marcada como indisponível e então liberada. Defina como 0 para não ter limite.
6) maxWait é o tempo máximo de espera para estabelecer uma conexão. Se esse tempo for ultrapassado, uma exceção será recebida. Defina como -1 para indicar que não há limite.
7) removeAbandoned recicla conexões de banco de dados abandonadas (geralmente esquecidas de liberar) no pool de conexões.
8) removeAbandonedTimeout Se a conexão com o banco de dados não for utilizada por um longo período, ela será considerada abandonada e retornada ao pool de conexões.
9) logAbandoned registra a reciclagem de conexões de banco de dados abandonadas.
10) driverClassName driver JDBC.
11) A string de conexão do banco de dados url define o recurso referenciado em $CATALINA_HOME/webapps/quality/WEB-INF/web.xml:
A seguir está o código de configuração, que deve ser colocado em <web-app> e </web-app>.
<!-- Início da configuração do banco de dados -->
<recurso-ref>
<descrição>teste connectDB</descrição>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Contêiner</res-auth>
</resource-ref>
<!-- Fim da configuração do banco de dados -->
A seguir está a descrição necessária dos parâmetros:
1) descrição Uma descrição do recurso referenciado.
2) nome do recurso res-ref-name. Consulte <ResourceParams name="jdbc/connectDB"> acima
3) tipo de recurso res-type. Consulte <Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/> acima
Usando recursos em JSP:
Isso faz parte do código do arquivo da página web jsp em um determinado subdiretório em $CATALINA_HOME/webapps/quality:
<%@ page contentType="text/html;charset=GBK"%>
<%@page errorPage="error.jsp"%>
<%@page import="javax.naming.*"%>
<%@page import="javax.sql.*"%>
<%@page import="java.sql.*"%>
<html>
<cabeça>
</head>
<corpo>
<%
………………
………………
// Operações de banco de dados
Contexto ctx=nulo;
Conexão cnn=nulo;
Instrução stmt=null;
Conjunto de resultados rs=null;
tentar
{
ctx=new InitialContext();
se(ctx==nulo)
throw new Exception("Nenhum ambiente correspondente");
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
se(ds==nulo)
throw new Exception("Sem banco de dados correspondente");
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
tabela1
");
………………
}
finalmente
{
se(rs!=nulo)
rs.close();
if(stmt!=nulo)
stmt.close();
if(cnn!=nulo)
cnn.close();
se(ctx!=nulo)
ctx.close();
}
%>
</body>
</html>
Descrição do código:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
A frase acima aplica os recursos que acabamos de definir.
É um bom hábito liberar recursos após o uso, especialmente recursos de contexto. Consulte o segmento de código finalmente na seção try-catch-finally. Se os recursos de nível superior forem liberados durante a liberação de recursos, os recursos de nível inferior serão liberados primeiro. Por exemplo: se o ctx for liberado, a ordem de liberação do recurso será rs, stmt, cnn, ctx. Em outras palavras, se o ctx for liberado, rs, stmt e cnn ficarão indisponíveis.
A liberação de recursos aqui apenas retorna a conexão do banco de dados ao pool de conexões e não libera realmente os recursos. Consulte a visão geral dos pools de conexões de banco de dados.