it-swarm.com.de

Warum verwenden wir eine DataSource anstelle eines DriverManagers?

Ich lese die Java-JDBC-Spezifikation (vr. 4) und habe folgende Anweisung gefunden:

DataSource - Diese Schnittstelle wurde in JDBC 2.0 eingeführt. Optional Paket-API Es wird gegenüber DriverManager bevorzugt, da es .__ erlaubt. Details zur zugrunde liegenden Datenquelle, damit sie für die transparent sind. Anwendung

Was ich versuche zu verstehen, ist der Unterschied zwischen einer Connection und einer DataSource und warum es existiert. Ich meine, der Block oben besagt, dass die Details einer Datenquelle für die Anwendung transparent sind, aber die Datenbankeigenschaften wie Benutzername, Kennwort, URL usw. in einer Eigenschaftendatei nicht externalisieren und dann DriverManager auf dieselbe Weise verwenden.

Und wird die DataSource -Schnittstelle nur so erstellt, dass sie auf übliche Weise Verbindungen zurückgibt, die gepoolt werden können usw.? Implementiert der Anwendungsserver in Java EE diese Schnittstelle und die Anwendungen, die bereitgestellt werden, um einen Verweis auf eine Datenquelle anstelle einer Verbindung zu erhalten?

73
LuckyLuke

Bessere Skalierbarkeit und Wartung

Für den Treibermanager müssen Sie alle Details (Host, Port, Benutzername, Kennwort, Treiberklasse) kennen, um eine Verbindung zur DB herzustellen und Verbindungen herzustellen. Das Externalisieren der Elemente in einer Eigenschaftendatei ändert nichts an der Tatsache, dass Sie sie kennen müssen.

Bei Verwendung einer DataSource müssen Sie nur den JNDI-Namen kennen. Der AppServer kümmert sich um die Details und wird nicht vom Hersteller der Clientanwendung, sondern von einem Administrator konfiguriert, in dem die Anwendung gehostet wird.

Skalierbarkeit:

Angenommen, Sie müssen selbst Verbindungen erstellen. Wie würden Sie mit der Änderung der Last umgehen? Manchmal haben Sie 10 Benutzer. Manchmal haben Sie 1000 Benutzer. Sie können nicht einfach eine Verbindung herstellen, wenn Sie eine benötigen, und später "freigeben" Verbindungen verlassen, was zum Verbindungs-Pooling führt. DriverManager stellt dies nicht zur Verfügung, DataSource jedoch nicht.

Wenn Sie einen Verbindungspool programmieren möchten, müssen Sie DriverManager verwenden, ansonsten gehen Sie zu DataSource.

58
A4L

DriverManager.

  • behindert die Anwendungsleistung, da die Verbindungen in Java-Klassen erstellt/geschlossen werden.
  • unterstützt kein Verbindungspooling.

Datenquelle

  • verbessert die Anwendungsleistung, da Verbindungen nicht innerhalb einer Klasse erstellt/geschlossen werden. Sie werden vom Anwendungsserver verwaltet und können während der Laufzeit abgerufen werden.
  • es stellt eine Einrichtung bereit, die einen Pool von Verbindungen erstellt
  • hilfreich für Unternehmensanwendungen 
33
nav0611

Der folgende Code zeigt zwei Wege, um eine Verbindung herzustellen.

Bei mySqlDataSource ist es nicht erforderlich, die URL zu kennen, da diese Zeile kommentiert ist.

public class MySqlDataSourceTest {

public static void main(String[] args) throws SQLException, ClassNotFoundException {


    /************** using MysqlDataSource starts **************/
    MysqlDataSource d = new MysqlDataSource();
    d.setUser("root");
    d.setPassword("root");
//  d.setUrl("jdbc:mysql://localhost:3306/manavrachna");
    d.setDatabaseName("manavrachna");
    Connection c =  (Connection) d.getConnection();
    /************** using MysqlDataSource ends**************/


    /************** using DriverManager start **************/
    Class.forName("com.mysql.jdbc.Driver");
    Connection c=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/manavrachna","root","root");
    /************** using DriverManager ends **************/

    Statement st=(Statement) c.createStatement();
    ResultSet rs=st.executeQuery("select id from employee");
    while(rs.next())
    {
        System.out.println(rs.getInt(1));
    }

}

}
3
Ram Tiwary

Wir können eine Verbindung mit einer Datenquelle wie folgt herstellen. Verwenden Sie die Verbindung, um eine Datenbankabfrage auszuführen.

DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName);
Connection connection = datasource.getConnection();
1
ansraju

DataSource-Objekte können Verbindungspools und verteilte Transaktionen bereitstellen. Daher müssen Sie DataSource verwenden, wenn Sie eine oder beide dieser Funktionen benötigen.

0
Koray Tugay