- - PR -
JNDIについて(長文です)
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-01 16:27
グローバルネーミング(?)を利用したOracleの
コネクションプーリングを実現しようと思っていますが、 以下のようなエラーが出てしまいます。 どなたか対処方法をご教授願えないでしょうか? 宜しくお願い致します。 (server.xmlやweb.xmlの中身は、Jakartaのソースをほぼそのまま適用しています) OS :Win2000 JDK :1.4.2 Oracle:8i AP :Tomcat5 javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:640) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243) at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:280) at javax.naming.InitialContext.lookup(InitialContext.java:347) at test.Pooling.main(Pooling.java:27) Exception in thread "main" <<server.xmlに追加した中身>> <GlobalNamingResources> <Resource name="jdbc/myoracle" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/myoracle"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>driverType</name> <value>thin</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@localhost:1521:ORCL</value> </parameter> <parameter> <name>username</name> <value>scott</value> </parameter> <parameter> <name>password</name> <value>tiger</value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>10</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> </ResourceParams> .... </GlobalNamingResources> <<web.xmlに追加した中身>> <resource-ref> <description>Oracle Datasource example</description> <res-ref-name>jdbc/myoracle</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> | ||||||||||||
|
投稿日時: 2004-11-01 17:11
InitialContextFactory を指定していないのではないでしょうか?
| ||||||||||||
|
投稿日時: 2004-11-01 18:35
早速の返信、ありがとうございます。
>InitialContextFactory を指定していないのではないでしょうか? とありますが、 Context ctx = new InitialContext(); としている為、私自身は指定していると思っていますが、見当違いでしょうか? 具体的には、以下でエラーが発生します。 Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/myoracle");//←ここでエラー | ||||||||||||
|
投稿日時: 2004-11-01 19:01
スタックトレースから見て、Webアプリケーションではなくコンソールアプリケーションから 実行されているように思います。Webアプリケーションの場合はコンテキストが特定されて いるのでこれでいいですが、コンソールアプリケーションの場合は参照するコンテキストの 情報を渡してやる必要があります。 とはいうものの、TomcatのJNDIオブジェクトを外部から呼び出すインタフェースって見たこと ないのですが、どこかに公開されていましたっけ? それからこの部分は、 DataSource ds = (DataSource)ctx.lookup("jdbc/myoracle"); こっちが正しいでしょう。 DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/myoracle"); | ||||||||||||
|
投稿日時: 2004-11-01 20:10
返信、ありがとうございます。
>スタックトレースから見て、Webアプリケーションではなくコンソールアプリケーションから >実行されているように思います。 そのとおりです。まずはコンソールアプリケーションでやってみて、 OKならWebアプリに移行しようと思っていました。 (このあたりも初めの投稿時に記述すべきだったのでしょうか?) >Webアプリケーションの場合はコンテキストが特定されて >いるのでこれでいいですが、コンソールアプリケーションの場合は参照するコンテキストの >情報を渡してやる必要があります。 >とはいうものの、TomcatのJNDIオブジェクトを外部から呼び出すインタフェースって見たこと >ないのですが、どこかに公開されていましたっけ? ということは、コンソールアプリケーションでは実装不可能ということでしょうか? Webアプリケーションならこのままでも大丈夫なのでしょうか? >それからこの部分は、 >DataSource ds = (DataSource)ctx.lookup("jdbc/myoracle"); >こっちが正しいでしょう。 >DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/myoracle"); なぜ「下」のほうが正しいのか、教えていただけないでしょうか? 『どこかに載っている!』等の情報でも結構ですので、宜しくお願い致します。 質問ばかりで申し訳ありませんが、宜しくお願い致します。 | ||||||||||||
|
投稿日時: 2004-11-01 21:23
Tomcatではやったことがないし、文書も見つからないですね。EJBコンテナなら通常は外部 から呼び出せるようにインタフェース公開していますけど。
設定に間違いがなければ大丈夫でしょう。
まずは、Tomcatのドキュメントそのものを読んでみてはどうでしょうか。 http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/jndi-datasource-examples-howto.html | ||||||||||||
|
投稿日時: 2004-11-02 14:26
返信、ありがとうございます。
で、今回は以下のような単純なJSPを作り、実行してみました。 ところが、まだエラーが出てしまいます。 server.xmlやweb.xmlは初めの投稿と同じ内容です。 宜しくお願い致します。 ****ソース内容**** InitialContext initContext = new InitialContext(); DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/myoracle"); Connection vConnect = ds.getConnection(); Statement vStmt = vConnect.createStatement(); ResultSet vResult = vStmt.executeQuery("select sysdate from dual"); out.println(vResult.getDate(0)); vResult.close(); vStmt.close(); vConnect.close(); ****エラー内容**** javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null' org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758) org.apache.jsp.pooling_jsp._jspService(pooling_jsp.java:91) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) [ メッセージ編集済み 編集者: ニューフェイス 編集日時 2004-11-02 14:29 ] | ||||||||||||
|
投稿日時: 2004-11-02 15:29
例外がどこで発生しているのか、もう少し詳しい情報が欲しいところですね。JSPの中で
例外をキャッチして、スタックトレースを吐かせてみてもらえないでしょうか。 |
1|2|3
次のページへ»