2

DataSource インターフェイスで、ユーザー名とパスワードのパラメーターを使用する場合と使用しない場合の、接続を取得する 2 つの方法を見つけました。

接続 getConnection()
接続 getConnection(文字列ユーザー名、文字列パスワード)

サーバー (tomcat) から JNDI リソースとして公開された接続プールを使用したいと述べましたが、2 つの方法の違いは何ですか?

4

2 に答える 2

3

DataSource実装に応じて、これら 2 つのメソッドは異なることを行います。1 つ目は、引数なしでConnection、プールから を取得し、 の作成時に構成された資格情報で構成DataSourceされます。新しいクレデンシャルを受け入れる 2 つ目は、DataSourceそれらのクレデンシャルを使用して開かれた から接続を取得するか、それらのクレデンシャルを使用して新しい接続を作成するConnectionか、JDBC ドライバーがサポートしている場合は、既存のConnection接続を取得してクレデンシャルを切り替えます。 (これが本当に可能かどうかはわかりません)。

残念ながら、JavaDoc (http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html) では、一方が他方を呼び出す理由についての洞察は得られません。明らかな理由は、全体に構成されている資格情報以外の資格情報を使用して接続したいからですDataSource

DataSourceTomcat が設定するデフォルトBasicDataSourceは Apache からのものです。この DataSource はこのメソッドcommons-dbcpをサポートしていません。getConnection(String username, String password)Tomcat の最近のバージョンには が付属しています。これは、要素に属性を設定した場合に、この代替メカニズムをサポートtomcat-poolする代替 DataSource 実装です(現在のドキュメントではサポートしていないと書かれていますが)。alternateUsernameAllowed="true"<Resource>

Tomcat プールのドキュメント: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

于 2012-06-12T13:11:02.473 に答える