私は同様の質問を探しましたが、 Gaddy JNDI Problem---接続 URL '' のクラス '' の JDBC ドライバーを作成できません'' のような類似した質問しか見つかりませんでした。これは私の一般的な質問に答えません。
Tomcat 7.0.8 ..次のコード
Context initialContext = new InitialContext();
datasource = (DataSource) initialContext.lookup("java:comp/env/" + "blah");
Connection c = null;
c = datasource.getConnection();
このエラーをスローします。
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
...
Caused by: java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:527)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:496)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:319)
at java.sql.DriverManager.getDriver(DriverManager.java:386)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
... 24 more
失敗した理由や修正方法を尋ねているわけではありません。
私の質問は、LOOKUP が失敗しなかったのはなぜですか?
ルックアップによって、null URL を持つ役に立たない BasicDataSource が作成されたのはなぜですか? JNDI名が「存在しない」かどうかを検出するには、それを使用して爆発するかどうかを確認するよりも良い方法はありますか? そのアプローチは、彼らがブリッジをテストする方法を思い出させます。
私はついに弾丸をかじって、生の JDBC コードから JNDI に大量のコードを移動しましたが、まだ多くの謎が残っています。
少なくともデータベースの独立性の錯覚を維持するために、可能であれば BasicDataSource のダウンキャストを避けたいと思います。
ティア