2016-12-14 9 views
0

Ich habe High und Low gesucht und Teile gesammelt, Entschuldigung, wenn dies bereits an anderer Stelle beantwortet wurde, aber ich kann es nicht finden.SQL Azure und Connection Pooling

Ich bin eine Web-Anwendung in Java mit Tomcat und SQL Azure im Backend zu schreiben.

Es gibt mehrere Servlets, die auf die SQL Azure DB zugreifen. Ich mag Verbindungspools verwenden, wie von Tomcat 8.5

Meine Anwendung context.xml in META-INF verwaltet wird, wie folgt:

 <Context> 

    <Resource name="jdbc/sqlazure" 
    auth="Container" 
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
    type="javax.sql.DataSource" 
    maxIdle="30" 
    username="[username]" 
    password="[password]" 
    url="jdbc:sqlserver://[database]:1433;database=BackInfo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30" 
    removeAbandonedTimeout="30" 
    logAbandoned="true" /> 

</Context> 

Im Java-Code, ich auf die typische Art und Weise:

InitialContext ic = new InitialContext();ds = (DataSource)ic.lookup("java:comp/env/jdbc/sqlazure"); 

Versuch (Verbindung con = ds.getConnection()) ....

Alles scheint zu stehen, so lassen Sie mich mein Verständnis bestätigen hier:

  1. Ich brauche keine separate web.xml angeben, da ich bin mit Tomcat 8.5. Richtig ?

  2. Azure automatisch einen Pool erstellen, wenn ich auf diese Weise verbinden. Die Anzahl der Verbindungen im Pool usw. kann nicht konfiguriert werden (muss nicht sein?).

  3. Bevor ich bemerkte, dass ich andere Servlets haben würde, die auf die Datenbank zugreifen müssen, hatte ich ein Servlet, das direkt eine Datenquelle über SQLServerConnectionPoolDataSource erstellt und eine Verbindung von dort erhält. In der Dokumentation:

SQLServerConnectionPoolDataSource typischerweise in Java Application Server-Umgebungen verwendet wird, die Verbindungs-Pooling-eingebaute Unterstützung und erfordern eine Connection physikalische Verbindungen zur Verfügung zu stellen, wie zum Beispiel Java Platform, Enterprise Edition (Java EE) Anwendung Server, die JDBC 3.0-API-Spezifikationsverbindungspooling bereitstellen.

  1. Bedeutet dies, dass, wenn ich SQLServerConnectionPoolDataSource verwenden, um direkt eine Verbindung zu fragen, wird es prüfen, ob Tomcat-Pooling unterstützt und dann im Grunde JDBC Mechanismen mit einem Pool von erstellen SQL Azure-Verbindungen, die von Tomcat verwaltet werden?

  2. Beim Abrufen der DataSource über Tomcat JNDI Lookup mit SQLServerDriver wie in context.xml angegeben. Wenn die Webanwendung gestartet wird, überprüft sie context.xml und verwendet SQLServerDriver, um eine Verbindung zu SQL Azure herzustellen. Überprüfen Sie, ob Pooling unterstützt wird. Wenn ja, verwendet Tomcat den Treiber zum automatischen Erstellen einer Verbindungspool-DataSource, die zurückgegeben wird?

  3. auch gedacht ich nur eine andere Frage. Wäre es sinnvoll, eine Singleton DataSource-Klasse zu haben, die einen Verweis auf die gepoolte Verbindungs-DataSource zurückgibt, oder wäre es besser, wenn jedes Servlet die Datenquelle in seinem init() sucht und in einer privaten Variablen speichert?

Dank

Antwort

0

auf meinem Verständnis Basierend wird der JDBC-Verbindungspool für SQL Server von Java Application erstellt, nicht Zu.Mein Vorschlag ist, dass Sie sich auf die folgenden Tomcat-Dokumente beziehen müssen, um die JNDI-Ressourcen & JDBC DataSource zu verstehen.

  1. JNDI-Ressourcen: http://tomcat.apache.org/tomcat-8.5-doc/jndi-resources-howto.html
  2. JDBC Datasource: http://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html
+0

Danke Peter, habe ich gelesen das und habe kein Problem durch JNDI zugreifen, aber einige der Konfigurationsparameter I verwendet wie die Größe von Der Pool scheint nicht akzeptiert zu werden, als ich das Azure-Ende kontaktierte. Das ließ mich denken, dass Azure den Pool stattdessen automatisch verwalten würde. Ansonsten, warum nicht einfach die Größe des Verbindungspools von Tomcat? – fobius

Verwandte Themen