- - PR -
Oracle10gにデータソースアクセスした際、ClassNotFoundExceptionが発生してしまいます
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-18 09:38
現在、業務の検証として、Windows上のTomcatにあるWebアプリケーションから
別のLinux端末にあるDBサーバにデータソースでアクセスすることを試みています。 ■Webアプリケーションサーバが動いている環境 OS WindowsXP Webアプリケーションサーバ Tomcat5.0.28 JDK 1.4 JDBCドライバ ojdbc14.jar Eclipse3.1(WTP0.7) (ここからTomcatを起動させています。) ■データベースサーバ OS Fedora Core 3 DB oracle10g ■質問内容 Tomcatで動作しているWebアプリケーションサーバからDBサーバに対して データソースで接続する際に、classpathは通しているにも関わらず JDBCドライバが見つからない現象が発生しています。 いろいろ調べた結果、同じ現象が起きている方がいて、 解決法の所に記載されていた以下の2つのことをやったのですが、 以下のエラーが発生しました。 ■行なったこと1 JDBCドライバを %CATALINA_HOME%\common\lib\ojdbc14.jar に置いて、Tomcat起動後、DBアクセス ■行なったこと1の結果出たエラー org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'oracle:thin://ncs45.sj.ncsoost.co.jp:1521/ncsecsite' at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540) at jp.co.javancs.util.DAOTemplate.createConnection(DAOTemplate.java:31) at jp.co.javancs.ecsite.goods.BookDAO.getHitNum(BookDAO.java:175) at jp.co.javancs.ecsite.goods.BookSearch.<init>(BookSearch.java:33) at jp.co.javancs.ecsite.controller.SearchController.doPost(SearchController.java:53) at jp.co.javancs.ecsite.controller.SearchController.doGet(SearchController.java:18) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at jp.co.javancs.ecsite.controller.BookShopController.doPost(BookShopController.java:127) at jp.co.javancs.ecsite.controller.BookShopController.doGet(BookShopController.java:53) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:670) at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:637) at org.apache.jsp.index_jsp._jspService(index_jsp.java:43) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at jp.co.javancs.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:34) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Unknown Source) Caused by: java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(Unknown Source) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773) ... 60 more ■行なったこと2 JDBCドライバ%CATALINA_HOME%\common\lib\ojdbc14.jar に置いてあったものを削除し、今度はWebApplicationRoot/WEB-INF/lib/ojdbc14.jarに置いて、 Tomcat起動後、DBアクセス(念のためclasspathも通しています。) ■行なったこと2の結果出たエラー org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver' at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:766) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540) at jp.co.javancs.util.DAOTemplate.createConnection(DAOTemplate.java:31) at jp.co.javancs.ecsite.goods.BookDAO.getHitNum(BookDAO.java:175) at jp.co.javancs.ecsite.goods.BookSearch.<init>(BookSearch.java:33) at jp.co.javancs.ecsite.controller.SearchController.doPost(SearchController.java:53) at jp.co.javancs.ecsite.controller.SearchController.doGet(SearchController.java:18) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at jp.co.javancs.ecsite.controller.BookShopController.doPost(BookShopController.java:127) at jp.co.javancs.ecsite.controller.BookShopController.doGet(BookShopController.java:53) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:670) at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:637) at org.apache.jsp.index_jsp._jspService(index_jsp.java:43) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at jp.co.javancs.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:34) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:854) at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:721) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:760) ... 60 more ■エラーの要約 %CATALINA_HOME%\common\lib\ojdbc14.jarにおいた場合は、 Caused by: java.sql.SQLException: No suitable driver が発生し、 WebApplicationRoot/WEB-INF/lib/ojdbc14.jarにおいて、 classpathを通した場合は、 Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver が発生しました。 特に後者の現象が納得いきません。 ■DBアクセスソースコード(関係部分のみ) public Connection createConnection() throws SQLException{ Connection con = null; try { // 初期コンテキストを取得 InitialContext ic = new InitialContext(); // ルックアップしてデータソースを取得 DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/bbshop"); con = ds.getConnection(); //★デバッグするとここで例外発生 } catch (Exception e) { e.printStackTrace(); } return con; } ■server.xml(関係部分のみ) <Context path="/ncsecsite" docBase="・・・・" debug="0" reloadable="true"> <Resource name="jdbc/bbshop" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/bbshop"> <parameter> <name>username</name> <value>ncs</value> </parameter> <parameter> <name>password</name> <value>ncsoost</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value>←★oracle.jdbc.OracleDriverとしても同様でした </parameter> <parameter> <name>url</name> <value>oracle:thin://ncs45.sj.ncsoost.co.jp:1521/ncsecsite</value> </parameter> </ResourceParams> </Context> まる3日間調べても解決することができませんでした。 もしこのような現象の解決方法をご存知の方いましたら、お教えいただけませんでしょうか? とても困っています。。。 [ メッセージ編集済み 編集者: bk 編集日時 2005-11-18 09:40 ] |
|
投稿日時: 2005-11-18 10:14
JDBCドライバは $CATALINA_HOME/common/lib でいいかと。
で、問題なのはserver.xmlのurlパラメータでは? 書き方を再度、確認されては? |
|
投稿日時: 2005-11-18 10:36
参考までに
http://tomcat.apache.org/tomcat-4.1-doc/jndi-datasource-examples-howto.html |
|
投稿日時: 2005-11-18 12:59
ご返答大変ありがとうございます。
>で、問題なのはserver.xmlのurlパラメータでは? >書き方を再度、確認されては? 以下の修正を行いました。 ■誤 <value>oracle:thin://*********:1521/ncsecsite</value> ■修正内容 <value>jdbc:oracle:thin://********:1521/ncsecsite</value> 1.jdbc:を追加 2.念のため*******をホスト名からIPアドレスに変更 のように修正しました。 昨日も1番の作業はやったのですが、あるサイトに「jdbc:」は不要と書かれていたので 消していました。 ■修正後に出たエラー内容 しかしこのように書くと今度は次のエラーに変わります。 先ほど、これも書くべきでした。申し訳ありません。 Caused by: java.sql.SQLException: I/O例外です。: The Network Adapter could not establish the connection at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:877) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:851) ... 60 more これもいろいろ調べたところ、ソケット接続が確立できていないようです。 今度はデータベースサーバとの接続の問題なのかなと思ったのですが、 データベースサーバとリスナは起動していますし、ファイアウォールで遮断など もしていません。 コマンド接続からtelnetでアクセスしても問題なく接続できるので、ネットワーク の問題でもなさそうです。。 申し訳ありませんが、他に考えられる原因がありましたら 再度ご指導の程よろしくお願い致します。 [ メッセージ編集済み 編集者: bk 編集日時 2005-11-18 13:00 ] |
|
投稿日時: 2005-11-18 13:07
よく見ましょう。
紅茶さんが提示してくれたURLには <parameter> <name>url</name> <value>jdbc:oracle:thin:myschema@127.0.0.1:1521:mysid</value> </parameter> と書いてありますよ。 <value>jdbc:oracle:thin://********:1521/ncsecsite</value> じゃなくて <value>jdbc:oracle:thin:@********:1521:ncsecsite</value> なのでは? [ メッセージ編集済み 編集者: yuzy 編集日時 2005-11-18 13:08 ] |
|
投稿日時: 2005-11-18 18:33
yuzyさん補足ありがとうございます。
URLの部分を oracle:thin:@アドレス:1521:インスタンス名 に変更してみてください。 他におかしいところはなさそうですが・・・ |
|
投稿日時: 2005-11-18 18:53
>yuzyさん、紅茶さん、ハツキタツミさん
情報ありがとうございます。 oracle:thin:@アドレス:1521:インスタンス名 上記のように修正したらうまく接続することができました。 本当にありがとうございました!! |
1