mercoledì 26 marzo 2008

Registrazione del driver JDBC di PostgreSQL

Solitamente i driver JDBC vengono caricati in una applicazione Java mediante reflection (tipicamente con Class.forName(..)) e successivamente devono essere registrati con il DriverManager, un repository di driver disponibili per i differenti URL (e quindi database) disponibili.

Il driver JDBC di PostgreSQL non richiede il passaggio di registrazione presso il DriverManager, e infatti effettua automaticamente la registrazione di se stesso presso il driver manager, come facilmente visibile dal codice sorgente di org.postgresql.Driver:

   static
{
try
{
// moved the registerDriver from the constructor to here
// because some clients call the driver themselves (I know, as
// my early jdbc work did - and that was based on other examples).
// Placing it here, means that the driver is registered once only.
java.sql.DriverManager.registerDriver(new Driver());
}
catch (SQLException e)
{
e.printStackTrace();
}
}

Come si nota il driver registra presso il driver manager una nuova istanza di se stesso (un'istanza sempre diversa, anche da quella che l'applicazione userà). Come si intuisce dai commenti, il fatto che la registrazione del driver sia effettuata a livello statico (ossia al caricamento della classe) implica che la registrazione venga fatta in automatico una sola volta, la prima in cui la classe viene messa in funzione (tipicamente con Class.forName(..) o più tardi nel caso si sia utilizzato un class loader). Non è quindi richiesto al codice utente di registrare il driver presso il driver manager.

Nessun commento: