- - PR -
DataSourceを利用したORACLEへの接続について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-01-30 13:31
お世話になります。
DataSourceを利用したORACLEへの接続ができずに困っております。 開発環境では、本番環境にあるDBへの接続ができるのですが、 .warにして本番環境へ移行すると、下記のようなエラーが出て接続できません。 【開発環境】 (WinXP) eclipse 3.3.1.1 コンテキスト宣言モード:server.xml tomcat-5.5.25 ojdbc14.jarを利用。 (eclipseのビルドパスへの反映、およびtomcat common/libへはコピー済み) 【本番環境】 (Linux) tomcat-5.5.25 DB:oracle10g ojdbc14.jarを利用。 (common/libへはコピー済み) 【ソース】 Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/orcldb"); conn = ds.getConnection(); conn.setAutoCommit(false); stmt = conn.createStatement(); 【META-INF/context.xml】 <Context path="/Project" reloadable="true" docBase="Project" > <Resource name="orcldb" auth="Container" type="javax.sql.DataSource" maxActive="500" maxIdle="1" maxWait="10000" username="name" password="pass" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@***.***.***.***:1521:sid" /> </Context> .warを本番環境の/webappに配備すると、$CATALINA_HOME/conf/Catalina/localhost/Project.xmlが自動生成されます。 "oracle.jdbc.driver.OracleDriver" は"oracle.jdbc.OracleDriver"としても同じ結果でした。 【web.xml】 <resource-ref> <description>DB Connection</description> <res-ref-name>orcldb</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> 【エラー】 致命的: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver' at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource (・・・省略) Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:164) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130) ... 32 more Datasourceによる指定ではなく、Class.forNameなどでドライバを 直接指定した場合には、本番環境でもDBへ接続しデータへアクセスできました。 このようなエラーについては、ネットで検索すると類似したものがいくつか 見つけられたのですが、どうにも解決につながら、もう三日くらい悩んでいます。 common/libにあるojdbc14.jarを読みに行けずにエラーになっているのでしょうか。 ご存知の方、解決策を教えていただけないでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 2008-01-30 15:05
勘ですが、クラスローダの関係ではないでしょうか。
DataSourceの初期化の段階では WebAppクラスローダ(WEB-INF/libが参照できる)が使われず Commonクラスローダ(TOMCAT_HOME/common/libが参照できる)で 呼び出されているんじゃなかったかな。 | ||||
|
投稿日時: 2008-01-30 15:37
>勘ですが、クラスローダの関係ではないでしょうか。
>DataSourceの初期化の段階では >WebAppクラスローダ(WEB-INF/libが参照できる)が使われず >Commonクラスローダ(TOMCAT_HOME/common/libが参照できる)で >呼び出されているんじゃなかったかな。 さっそくお返事を頂きまして、ありがとうございます。 ojdbc14.jarは プロジェクトのWEB-INF/libとTOMCAT_HOME/common/libの両方に置いています。 ですので、WebAppクラスローダとCommonクラスローダのどちらででも、呼び出せると思うのですが・・・、 他にも設定が必要なのでしょうか? | ||||
|
投稿日時: 2008-01-30 17:30
両方に入れているならClass.forNameを用いた方はWEB-INF/libのojdbc14.jarを利用しているかと思います。 TOMCAT_HOME/common/libに入れたojdbc14.jarのパーミッション等をチェックしてみてはいかがでしょうか? 蛇足ですが、Tomcat5.5だとTOMCAT_HOMEではなくCATALINA_HOMEですね | ||||
|
投稿日時: 2008-01-31 15:24
コメントありがとうございます。 パーミッション等も確認してみましたが、特に問題はないようでした。 これはもう、Tomcat自体がおかしくなってしまったのかと思い、 Tomcatを再インストールしたところ、以下のようにエラーが変わりました。 【エラー】 java.lang.NoClassDefFoundError org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1165) org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) (…略) とりあえず、$CATALINA_HOME/common/lib/ojdbc14.jarは見れているのか・・・ | ||||
|
投稿日時: 2008-01-31 17:27
解決しました。
最後はJAVAのJREへのパスの問題でした・・・。 自分が構築した環境でなかったので気づくのが遅かったです; ご親切にアドバイス下さって、ありがとうございました。 |
1