スキップしてメイン コンテンツに移動

Tomcat6でDBに接続できない現象への対応




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の編集は不要。
色々試行錯誤して書き換えてしまった方は戻して良い。


ところで
最も望ましい対処法はTomcatプラグインを使用しないこと。
Tomcatプラグインは既に古い方式になってしまっているので
context.xmlの仕組みにうまく対応できていない。
可能であればEclipse公式のWTPを使用したほうが良い。
(TomcatプラグインはパワーアップしてWTPに組み込まれたのでしょう)

とは言え、既にTomcatプラグインを使うしかないという状況では
META-INF配下とCATALINA配下の2つのxmlをメンテナンスし続けることになる。


最後に
自分がTomcatの勉強で読んだ、超オススメ本を紹介。
Jakarta Tomcatエキスパートガイド」。
これ無しでは仕事にならん、というくらい重宝してます。