Konfigurationsumgebung des SQL Server2000-Datenbankverbindungspools von Tomcat in JSP:
1. Datenbank: Microsoft SQL Server 2000
2. Datenbanktreiber: net.sourceforge.jtds.jdbc.Driver
Übersicht über JNDI (Java Naming and Directory Interface):
Tomcat4(5) bietet ein JNDI--InitialContext-Implementierungsbeispiel, das mit Java Enterprise Edition-Anwendungsdiensten kompatibel ist. Seine Anfangsdaten werden in der Datei $CATALINA_HOME/conf/server.xml festgelegt und können durch die folgenden Elemente in der Beschreibung der Webanwendungsumgebung (/WEB-INF/web.xml) referenziert werden:
1) <env-entry> – Umgebungseintrag, legt fest, wie die Anwendung funktioniert.
2) <resource-ref> – Ressourcenparameter, normalerweise Datenbanktreiber, JavaMail-Sitzung, benutzerdefinierte Klassenfabriken usw.
3) <resource-env-ref> – In Servlet 2.4 wird es verwendet, um die Einstellung von Ressourcen zu vereinfachen, die keine Authentifizierungsinformationen erfordern, wie z. B. Umgebungsparameter und Ressourcenreferenzvariablen.
InitialContext wird festgelegt, wenn die Webanwendung initialisiert wird, um Webanwendungskomponenten zu unterstützen. Alle Einträge und Ressourcen werden im Abschnitt java:comp/env des JNDI-Namespace platziert. Klicken Sie auf die folgenden URLs für weitere Informationen:
1) Java-Benennungs- und Verzeichnisschnittstelle
2) J2EE-Plattformspezifikation
Einrichten von JNDI-Ressourcen Um JNDI-Ressourcen einzurichten, verwenden Sie die folgenden Bezeichner in der Datei $CATALINA_HOME/conf/server.xml:
1) <Environment> – Legen Sie den Namen und den Wert eines variablen JNDI-InitialContext-Eintrags in der Domäne fest (entspricht dem oben erwähnten <env-entry>).
2) <Resource> – Legen Sie den Namen und den Typ der für die Anwendung verfügbaren Ressourcen fest (entspricht der oben erwähnten <resource-ref>).
3) <ResourceParams> – Legen Sie den Namen der Java-Ressourcenklassenfabrik oder das zu verwendende JavaBean-Attribut fest.
4) <ResourceLink> – Fügen Sie einen Link zur globalen JNDI-Umgebung (JNDI-Kontext) hinzu.
Die oben genannten Bezeichner müssen zwischen <Context> und </Context> (für spezielle Webanwendungen) oder zwischen <DefaultContext> und </DefaultContext> platziert werden.
Darüber hinaus werden die im Webanwendungsdeskriptor (/WEB-INF/web.xml) festgelegten Namen und Werte auch im Anfangskontext festgelegt, wenn der Wert des <Environemt>-Elements auf seinen Anfangswert zurückgesetzt wird.
Globale Variablen können in den <GlobalNamingResources> des untergeordneten Elements <Server> festgelegt werden.
Übersicht über den Datenbankverbindungspool:
Datenbankverbindungen sind eine kritische, begrenzte und teure Ressource, insbesondere in Webanwendungen für mehrere Benutzer. Die Verwaltung von Datenbankverbindungen kann die Skalierbarkeit und Robustheit der gesamten Anwendung erheblich beeinträchtigen und die Leistungsindikatoren des Programms beeinflussen. Um dieses Problem zu lösen, wurde der Datenbankverbindungspool vorgeschlagen.
Der Datenbankverbindungspool ist für die Zuweisung, Verwaltung und Freigabe von Datenbankverbindungen verantwortlich. Er ermöglicht es Anwendungen, eine vorhandene Datenbankverbindung wiederzuverwenden, anstatt eine neue Datenbankverbindung freizugeben, deren Leerlaufzeit die maximale Leerlaufzeit überschreitet, um Fehler aufgrund einer fehlgeschlagenen Freigabe zu vermeiden Die Datenbankverbindung wird durch eine fehlende Datenbankverbindung verursacht. Diese Technologie kann die Leistung von Datenbankoperationen erheblich verbessern.
Der Datenbankverbindungspool erstellt eine bestimmte Anzahl von Datenbankverbindungen und fügt sie während der Initialisierung in den Verbindungspool ein. Die Anzahl dieser Datenbankverbindungen wird durch die Mindestanzahl von Datenbankverbindungen festgelegt. Unabhängig davon, ob diese Datenbankverbindungen verwendet werden oder nicht, ist immer gewährleistet, dass der Verbindungspool über mindestens so viele Verbindungen verfügt. Die maximale Anzahl von Datenbankverbindungen im Verbindungspool begrenzt die maximale Anzahl von Verbindungen, die der Verbindungspool belegen kann. Wenn die Anzahl der von der Anwendung aus dem Verbindungspool angeforderten Verbindungen die maximale Anzahl von Verbindungen überschreitet, werden diese Anforderungen dem hinzugefügt Warteschlange. Bei der Festlegung der minimalen Anzahl von Verbindungen und der maximalen Anzahl von Verbindungen im Datenbankverbindungspool sollten die folgenden Faktoren berücksichtigt werden:
1) Die Mindestanzahl an Verbindungen ist die Anzahl der Datenbankverbindungen, die vom Verbindungspool verwaltet werden. Wenn die Anwendung also nicht viele Datenbankverbindungen verwendet, wird eine große Menge an Datenbankverbindungsressourcen verschwendet.
2) Die maximale Anzahl von Verbindungen ist die maximale Anzahl von Verbindungen, die der Verbindungspool beantragen kann. Wenn die Datenbankverbindungsanforderung diese Anzahl überschreitet, werden nachfolgende Datenbankverbindungsanforderungen zur Warteschlange hinzugefügt, was sich auf nachfolgende Datenbankvorgänge auswirkt.
3) Wenn der Unterschied zwischen der minimalen Anzahl von Verbindungen und der maximalen Anzahl von Verbindungen zu groß ist, ist die erste Verbindungsanforderung profitabel, und nachfolgende Verbindungsanforderungen, die die minimale Anzahl von Verbindungen überschreiten, entsprechen dem Aufbau einer neuen Datenbankverbindung. Diese Datenbankverbindungen, die größer als die Mindestanzahl an Verbindungen sind, werden jedoch nicht sofort nach der Verwendung freigegeben. Sie werden im Verbindungspool abgelegt, um auf die Wiederverwendung zu warten, oder nach dem Leerlauf-Timeout freigegeben.
Voraussetzungen für die Konfiguration des Tomcat-Datenbankverbindungspools:
1. Die Java-Laufzeitumgebung muss installiert sein.
2. Es muss ein SQL Server2000-Datenbankserver vorhanden sein (er muss nicht lokal sein);
3. Sie müssen jtds.jar haben und es im Verzeichnis $CATALINA_HOME/common/lib ablegen (nur hier). Es wird verwendet, weil der Java SQL Server-Treiber von Microsoft keine sekundären Abfragen unterstützt, die online verfügbar sind. Derzeit wird jtds-0.6.jar verwendet.
Legen Sie den Datenbankverbindungspool in $CATALINA_HOME/conf/server.xml fest:
Im Folgenden finden Sie den Konfigurationscode, der zwischen <Host> und </Host> platziert werden muss.
<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"/>
<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/connectDB">
<Parameter>
<name>maxActive</name>
<!-- Maximale Anzahl von DB-Verbindungen im Pool. Auf 0 setzen, um keine Begrenzung zu erhalten
<Wert>100</Wert>
</parameter>
<Parameter>
<name>maxIdle</name>
<!-- Maximale Anzahl inaktiver DB-Verbindungen, die im Pool beibehalten werden sollen. Auf 0 gesetzt, um keine Begrenzung zu erhalten -->
<Wert>30</Wert>
</parameter>
<Parameter>
<name>maxWait</name>
<!-- Maximale Wartezeit in ms, bis eine DB-Verbindung verfügbar wird. Bei Überschreitung dieses Zeitlimits wird eine Ausnahme ausgelöst. Auf -1 einstellen, um auf unbestimmte Zeit zu warten
<Wert>10000</Wert>
</parameter>
<Parameter>
<name>removeAbandoned</name>
<!-- Abgebrochene DB-Verbindungen werden entfernt und recycelt -->
<value>true</value>
</parameter>
<Parameter>
<name>removeAbandonedTimeout</name>
<!-- Verwenden Sie den Parameter „removeAbandonedTimeout“, um die Anzahl der Sekunden festzulegen, die eine DB-Verbindung inaktiv war, bevor sie als abgebrochen gilt
<Wert>60</Wert>
</parameter>
<Parameter>
<name>logAbandoned</name>
<!-- Protokollieren Sie einen Stack-Trace des Codes, der abgebrochen wurde -->
<value>false</value>
</parameter>
<Parameter>
<name>Fabrik</name>
<!-DBCP Basic Datasource Factory -->
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<Parameter>
<name>Benutzername</name>
<!-- Datenbankbenutzername -->
<value>Iorishinier</value>
</parameter>
<Parameter>
<name>Passwort</name>
<!-- Benutzerkennwort -->
<value>mypasswd</value>
</parameter>
<Parameter>
<name>driverClassName</name>
<!-- Klassenname des Datenbanktreibers -->
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<Parameter>
<name>URL</name>
<!-- Datenbankadresse -->
<value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value>
</parameter>
</ResourceParams>
</Kontext>
Im Folgenden finden Sie eine Beschreibung einiger Parameter:
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
In:
1) Pfad gibt den Pfad an. Das hier festgelegte Qualitätsverzeichnis ist $CATALINA_HOME/webapps.
2) Stammverzeichnis der docBase-Datei.
3) reloader Gibt an, ob die Webseite neu kompiliert werden soll, wenn sie aktualisiert wird.
4) maxActive Die maximale Anzahl von Datenbankverbindungen im Verbindungspool. Auf 0 setzen, um keine Begrenzung zu erhalten.
5) maxIdle Die maximale Leerlaufzeit der Datenbankverbindung. Über diese Leerlaufzeit hinaus wird die Datenbankverbindung als nicht verfügbar markiert und dann freigegeben. Auf 0 setzen, um keine Begrenzung zu erhalten.
6) maxWait ist die maximale Wartezeit für den Verbindungsaufbau. Wird diese Zeit überschritten, kommt es zu einer Ausnahme. Auf -1 setzen, um anzuzeigen, dass es keine Begrenzung gibt.
7) „removeAbandoned“ führt abgebrochene (normalerweise vergessene Freigabe) Datenbankverbindungen in den Verbindungspool zurück.
8) removeAbandonedTimeout Wenn die Datenbankverbindung längere Zeit nicht verwendet wird, gilt sie als aufgegeben und wird an den Verbindungspool zurückgegeben.
9) logAbandoned protokolliert die Wiederverwendung abgebrochener Datenbankverbindungen.
10) DriverClassName JDBC-Treiber.
11) Die URL-Datenbankverbindungszeichenfolge legt die referenzierte Ressource in $CATALINA_HOME/webapps/quality/WEB-INF/web.xml fest:
Im Folgenden finden Sie den Konfigurationscode, der in <web-app> und </web-app> platziert werden muss.
<!--Datenbankkonfigurationsstart -->
<Ressourcenreferenz>
<description>connectDB-Test</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!-- Database Config end -->
Im Folgenden finden Sie die notwendige Beschreibung der Parameter:
1) Beschreibung Eine Beschreibung der referenzierten Ressource.
2) res-ref-name Ressourcenname. Siehe <ResourceParams name="jdbc/connectDB"> oben
3) Res-Typ-Ressourcentyp. Siehe <Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/> oben
Ressourcen in JSP verwenden:
Dies ist Teil des Codes für die JSP-Webseitendatei in einem bestimmten Unterverzeichnis unter $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>
<Kopf>
</head>
<Körper>
<%
………………
………………
// Datenbankoperationen
Kontext ctx=null;
Verbindung cnn=null;
Anweisung stmt=null;
ResultSet rs=null;
versuchen
{
ctx=new InitialContext();
if(ctx==null)
throw new Exception("Keine passende Umgebung");
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
if(ds==null)
throw new Exception("Keine passende Datenbank");
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery("select * from table1");
………………
………………
}
Endlich
{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(cnn!=null)
cnn.close();
if(ctx!=null)
ctx.close();
}
%>
</body>
</html>
Codebeschreibung:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
Der obige Satz wendet die gerade festgelegten Ressourcen an.
Es ist eine gute Angewohnheit, Ressourcen nach der Verwendung freizugeben, insbesondere Kontextressourcen. Siehe den Abschnitt „finally“ im Abschnitt „try-catch-finally“. Wenn die Ressourcen der oberen Ebene während der Ressourcenfreigabe freigegeben werden, werden zuerst die Ressourcen der unteren Ebene freigegeben. Beispiel: Wenn ctx freigegeben wird, lautet die Reihenfolge der Ressourcenfreigabe rs, stmt, cnn, ctx. Mit anderen Worten: Wenn ctx freigegeben wird, sind rs, stmt und cnn nicht verfügbar.
Die Freigabe von Ressourcen gibt hier nur die Datenbankverbindung an den Verbindungspool zurück und gibt die Ressourcen nicht tatsächlich frei. Siehe Übersicht über Datenbankverbindungspools.