Tomcat6でJNDIを設定してDB(Oracle等)に接続しようとすると
どんなに設定が正しくても
下記のエラーとなって接続できないことがある。
Cannot create JDBC driver of class '' for connect URL 'null'
この現象は、context.xmlがうまく読み込めていない場合に発生する。
おおよそTomcatプラグインを使用していると
context.xmlが作成・更新されてしまうため
いくら設定を修正してもこのエラーが続く、という状況に陥る。
というわけで、該当のcontext.xmlを修正する必要がある。
context.xmlは、
$CATALINA_BASE/conf/CATALINA/localhost/
に、アプリケーションURI.xmlとして存在する。
このxmlファイルにJNDIの設定を加えてやれば良い。
Apacheのサイトの例を引用すると、こんな感じ。
<Context ...>
<Resource name="jdbc/EmployeeDB"
auth="Container"
type="javax.sql.DataSource"
username="dbusername"
password="dbpassword"
driverClassName="org.hsql.jdbcDriver"
url="jdbc:HypersonicSQL:database"
maxActive="8"
maxIdle="4"/>
</Context>
編集の注意点があって、1行目の末尾が
「/>」となっているのできちんと
「>」に書き換えること。
以上で、Cannot create JDBC driver of class '' for connect URL 'null'
エラーは消えることでしょう。
META-INF/context.xmlに同様の記述をしているぞ!という場合でも
上記ファイルが優先されるので、META-INF/context.xmlは認識されない。
しかしMETA-INF/context.xmlを消してはいけない。デプロイの際に使用されるから。
※
このエラーの対策にserver.xmlの編集は不要。
このエラーの対策にserver.xmlの編集は不要。
色々試行錯誤して書き換えてしまった方は戻して良い。
ところで
最も望ましい対処法はTomcatプラグインを使用しないこと。
Tomcatプラグインは既に古い方式になってしまっているので
context.xmlの仕組みにうまく対応できていない。
可能であればEclipse公式のWTPを使用したほうが良い。
(TomcatプラグインはパワーアップしてWTPに組み込まれたのでしょう)
とは言え、既にTomcatプラグインを使うしかないという状況では
context.xmlの仕組みにうまく対応できていない。
可能であればEclipse公式のWTPを使用したほうが良い。
(TomcatプラグインはパワーアップしてWTPに組み込まれたのでしょう)
とは言え、既にTomcatプラグインを使うしかないという状況では
META-INF配下とCATALINA配下の2つのxmlをメンテナンスし続けることになる。