Entorno de configuración del grupo de conexiones de base de datos SQL Server2000 de Tomcat en JSP:
1. Base de datos: Microsoft SQL Server 2000
2. Controlador de base de datos: net.sourceforge.jtds.jdbc.Driver
Descripción general de JNDI (interfaz de directorio y nombres de Java):
Tomcat4(5) proporciona un ejemplo de implementación JNDI--InitialContext que es compatible con los servicios de aplicaciones Java Enterprise Edition. Sus datos iniciales se establecen en el archivo $CATALINA_HOME/conf/server.xml y se puede hacer referencia a ellos mediante los siguientes elementos en la descripción del entorno de la aplicación web (/WEB-INF/web.xml):
1) <env-entry>--Entrada de entorno, establece cómo funciona la aplicación.
2) <resource-ref>--Parámetros de recursos, generalmente controladores de bases de datos, sesiones de JavaMail, fábricas de clases personalizadas, etc.
3) <resource-env-ref>: en Servlet 2.4, se utiliza para simplificar la configuración de recursos que no requieren información de autenticación, como parámetros de entorno y variables de referencia de recursos.
InitialContext se establece cuando la aplicación web se inicializa para admitir componentes de la aplicación web. Todas las entradas y recursos se colocan en la sección java:comp/env del espacio de nombres JNDI. Haga clic en las siguientes URL para obtener más información:
1) Interfaz de directorio y nombres de Java
2) Especificación de la plataforma J2EE
Configuración de recursos JNDI Para configurar recursos JNDI, utilice los siguientes identificadores en el archivo $CATALINA_HOME/conf/server.xml:
1) <Entorno>: establece el nombre y el valor de una entrada variable JNDI InitialContext en el dominio (equivalente a la <env-entry> mencionada anteriormente).
2) <Recurso>: establece el nombre y el tipo de recursos disponibles para la aplicación (equivalente a <recurso-ref> mencionado anteriormente).
3) <ResourceParams>: establece el nombre de la fábrica de clases de recursos Java o el atributo JavaBean que se utilizará.
4) <ResourceLink>: agregue un enlace al entorno JNDI global (contexto JNDI).
Los identificadores anteriores deben colocarse entre <Context> y </Context> (para aplicaciones web especializadas) o entre <DefaultContext> y </DefaultContext>.
Además, los nombres y valores establecidos en el descriptor de aplicación web (/WEB-INF/web.xml) también se configuran en el contexto inicial, cuando el valor del elemento <Environemt> lo habilita se restablece a su valor inicial.
Las variables globales se pueden establecer en <GlobalNamingResources> del elemento secundario <Server>.
Descripción general del grupo de conexiones de bases de datos:
Las conexiones a bases de datos son un recurso crítico, limitado y costoso, especialmente en aplicaciones web multiusuario. La gestión de conexiones de bases de datos puede afectar significativamente la escalabilidad y solidez de toda la aplicación y afectar los indicadores de rendimiento del programa. El grupo de conexiones de bases de datos se propuso para solucionar este problema.
El grupo de conexiones de bases de datos es responsable de asignar, administrar y liberar conexiones de bases de datos. Permite que las aplicaciones reutilicen una conexión de base de datos existente en lugar de restablecer una conexión de base de datos cuyo tiempo de inactividad exceda el tiempo de inactividad máximo para evitar errores debido a una falla en la liberación. la conexión de la base de datos. Causado por la falta de conexión de la base de datos. Esta tecnología puede mejorar significativamente el rendimiento de las operaciones de la base de datos.
El grupo de conexiones de la base de datos creará una cierta cantidad de conexiones de la base de datos y las colocará en el grupo de conexiones durante la inicialización. La cantidad de estas conexiones de la base de datos está establecida por la cantidad mínima de conexiones de la base de datos. Independientemente de si estas conexiones de base de datos se utilizan o no, siempre se garantizará que el grupo de conexiones tenga al menos esta cantidad de conexiones. El número máximo de conexiones de base de datos en el grupo de conexiones limita el número máximo de conexiones que el grupo de conexiones puede ocupar. Cuando el número de conexiones solicitadas por la aplicación desde el grupo de conexiones excede el número máximo de conexiones, estas solicitudes se agregarán al grupo. cola de espera. La configuración del número mínimo de conexiones y el número máximo de conexiones en el grupo de conexiones de la base de datos debe tener en cuenta los siguientes factores:
1) La cantidad mínima de conexiones es la cantidad de conexiones de bases de datos mantenidas por el grupo de conexiones, por lo que si la aplicación no utiliza una gran cantidad de conexiones de bases de datos, se desperdiciará una gran cantidad de recursos de conexión de bases de datos;
2) El número máximo de conexiones es el número máximo de conexiones que el grupo de conexiones puede solicitar. Si la solicitud de conexión de la base de datos excede este número, las solicitudes de conexión de la base de datos posteriores se agregarán a la cola de espera, lo que afectará las operaciones posteriores de la base de datos.
3) Si la diferencia entre el número mínimo de conexiones y el número máximo de conexiones es demasiado grande, la primera solicitud de conexión será rentable y las solicitudes de conexión posteriores que excedan el número mínimo de conexiones equivalen a establecer una nueva conexión de base de datos. Sin embargo, estas conexiones de bases de datos que superan el número mínimo de conexiones no se liberarán inmediatamente después de su uso. Se colocarán en el grupo de conexiones para esperar su reutilización o se liberarán después del tiempo de inactividad.
Requisitos previos para configurar el grupo de conexiones de la base de datos Tomcat:
1. Se debe instalar el entorno de ejecución de Java;
2. Debe haber un servidor de base de datos SQL Server2000 (no es necesario que sea local);
3. Debes tener jtds.jar y colocarlo en el directorio $CATALINA_HOME/common/lib (sólo aquí). Se utiliza porque el controlador Java SQL Server de Microsoft no admite consultas secundarias, que se pueden encontrar en línea. Actualmente uso jtds-0.6.jar.
Configure el grupo de conexiones de la base de datos en $CATALINA_HOME/conf/server.xml:
El siguiente es el código de configuración, que debe colocarse entre <Host> y </Host>.
<Ruta de contexto="/calidad" docBase="calidad" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
<Nombre del recurso="jdbc/connectDB" auth="Contenedor" tipo="javax.sql.DataSource"/>
<ResourceParams nombre="jdbc/connectDB">
<parámetro>
<nombre>maxActive</nombre>
<!-- Número máximo de conexiones de base de datos en el grupo. Establezca en 0 para que no haya límite -->.
<valor>100</valor>
</parámetro>
<parámetro>
<nombre>maxIdle</nombre>
<!-- Número máximo de conexiones de base de datos inactivas para retener en el grupo. Establezca en 0 para que no haya límite -->.
<valor>30</valor>
</parámetro>
<parámetro>
<nombre>maxWait</nombre>
<!-- Tiempo máximo de espera para que una conexión de base de datos esté disponible en ms. Se genera una excepción si se excede este tiempo de espera. Establezca en -1 para esperar indefinidamente -->.
<valor>10000</valor>
</parámetro>
<parámetro>
<nombre>eliminarAbandonado</nombre>
<!-- Las conexiones de base de datos abandonadas se eliminan y reciclan -->
<valor>verdadero</valor>
</parámetro>
<parámetro>
<nombre>eliminarTiempo de espera abandonado</nombre>
<!-- Utilice el parámetro removeAbandonedTimeout para establecer el número de segundos que una conexión de base de datos ha estado inactiva antes de que se considere abandonada -->
<valor>60</valor>
</parámetro>
<parámetro>
<nombre>registroAbandonado</nombre>
<!-- Registre un seguimiento de la pila del código que abandonó -->
<valor>falso</valor>
</parámetro>
<parámetro>
<nombre>fábrica</nombre>
<!-DBCP Fábrica de fuentes de datos básicas -->
<valor>org.apache.commons.dbcp.BasicDataSourceFactory</valor>
</parámetro>
<parámetro>
<nombre>nombre de usuario</nombre>
<!-- Nombre de usuario de la base de datos -->
<value>Más brillante</value>
</parámetro>
<parámetro>
<nombre>contraseña</nombre>
<!-- Contraseña de usuario -->
<valor>micontraseña</valor>
</parámetro>
<parámetro>
<nombre>nombre de clase del conductor</nombre>
<!-- Nombre de clase del controlador de base de datos -->
<valor>net.sourceforge.jtds.jdbc.Driver</valor>
</parámetro>
<parámetro>
<nombre>url</nombre>
<!-- Dirección de la base de datos -->
<value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value>
</parámetro>
</ResourceParams>
</Contexto>
La siguiente es una descripción de algunos parámetros:
<Ruta de contexto="/calidad" docBase="calidad" debug="0" reloadable="true" crossContext="true">
en:
1) ruta especifica la ruta, el directorio de calidad establecido aquí es $CATALINA_HOME/webapps;
2) directorio raíz del archivo docBase.
3) recargador Si se debe volver a compilar cuando se actualice la página web.
4) maxActive El número máximo de conexiones de bases de datos en el grupo de conexiones. Establezca en 0 para que no haya límite.
5) maxIdle El tiempo máximo de inactividad de la conexión de la base de datos. Más allá de este tiempo de inactividad, la conexión a la base de datos se marcará como no disponible y luego se liberará. Establezca en 0 para que no haya límite.
6) maxWait es el tiempo máximo de espera para establecer una conexión. Si se excede este tiempo, se recibirá una excepción. Establezca en -1 para indicar que no hay límite.
7) removeAbandoned recicla conexiones de bases de datos abandonadas (generalmente olvidadas de liberar) en el grupo de conexiones.
8) removeAbandonedTimeout Si la conexión de la base de datos no se utiliza durante mucho tiempo, se considerará abandonada y se devolverá al grupo de conexiones.
9) logAbandoned registra el reciclaje de conexiones de bases de datos abandonadas.
10) controlador JDBC driverClassName.
11) La cadena de conexión de la base de datos URL establece el recurso al que se hace referencia en $CATALINA_HOME/webapps/quality/WEB-INF/web.xml:
El siguiente es el código de configuración, que debe colocarse en <web-app> y </web-app>.
<!-- Inicio de configuración de base de datos -->
<recurso-referencia>
<descripción>prueba de connectDB</descripción>
<res-ref-nombre>jdbc/connectDB</res-ref-nombre>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Contenedor</res-auth>
</recurso-ref>
<!-- Fin de configuración de la base de datos -->
La siguiente es la descripción necesaria de los parámetros:
1) descripción Una descripción del recurso al que se hace referencia.
2) nombre del recurso res-ref-name. Consulte <ResourceParams name="jdbc/connectDB"> arriba
3) tipo de recurso res-type. Consulte <Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/> arriba
Usando recursos en JSP:
Esto es parte del código para el archivo de la página web jsp en un determinado subdirectorio en $CATALINA_HOME/webapps/quality:
<%@ página contentType="text/html;charset=GBK"%>
<%@ página errorPage="error.jsp"%>
<%@ página import="javax.naming.*"%>
<%@ página import="javax.sql.*"%>
<%@ página import="java.sql.*"%>
<html>
<cabeza>
</cabeza>
<cuerpo>
<%
………………
………………
// Operaciones de base de datos
Contexto ctx=nulo;
Conexión cnn=null;
Declaración stmt=null;
Conjunto de resultados rs=null;
intentar
{
ctx=nuevoContextoInicial();
si(ctx==nulo)
lanzar una nueva excepción ("No hay un entorno coincidente");
Fuente de datos ds=(Fuente de datos)ctx.lookup("java:comp/env/jdbc/connectDB");
si(ds==nulo)
lanzar una nueva excepción ("No hay base de datos coincidente");
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
tabla1
");
………………
}
finalmente
{
si(rs!=nulo)
rs.cerrar();
si(stmt!=nulo)
stmt.close();
si(cnn!=nulo)
cnn.cerrar();
si(ctx!=nulo)
ctx.close();
}
%>
</cuerpo>
</html>
Descripción del código:
Fuente de datos ds=(Fuente de datos)ctx.lookup("java:comp/env/jdbc/connectDB");
La oración anterior aplica los recursos recién configurados.
Es un buen hábito liberar recursos después de su uso, especialmente recursos de contexto. Consulte el segmento de código final en la sección try-catch-finally. Si los recursos de nivel superior se liberan durante la liberación de recursos, los recursos de nivel inferior se liberarán primero. Por ejemplo: si se libera ctx, el orden de liberación de recursos será rs, stmt, cnn, ctx. En otras palabras, si se lanza ctx, rs, stmt y cnn no estarán disponibles.
La liberación de recursos aquí solo devuelve la conexión de la base de datos al grupo de conexiones y en realidad no libera los recursos. Consulte la descripción general de los grupos de conexiones de bases de datos.