- PR -

ServletからのContextパラメータの取得

1
投稿者投稿内容
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2005-11-04 11:23
Tomcat 5.0.28でservletからのDB接続パラメータをContextからの取得にしたいの
ですが、うまくいきません。

テスト的に

[server.xmlの記述]
<GlobalNamingResources>
<Resource name="jdbc/dual" auth="Container"
type="javax.sql.DataSource" />

<ResourceParams name="jdbc/dual">
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>username</name>
<value>scott</value>
</parameter>
<parameter>
<name>password</name>
<value>tiger</value>
</parameter>
<parameter>
<name>url</name>
<value>"jdbc:oracle:thin:@172.16.2.15:1521:oradb"</value>
</parameter>
</ResourceParams>
<GlobalNamingResources>

[web.xmlの記述]
<resource-ref>
<res-ref-name>jdbc/dual</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>CONTAINER</res-auth>
</resource-ref>

</web-app>


[テストのjavaコード]
try {
Context context = new InitialContext();
out.println("context=" + context + "<br>");
DataSource ds = (DataSource)context.lookup(
"java:comp/env/jdbc/dual");
out.println("ds= " + ds + "<br>");
org.apache.commons.dbcp.BasicDataSource
bd = (org.apache.commons.dbcp.BasicDataSource) ds;
out.println("DriverClassName=" + bd.getDriverClassName() + "<br>" );
out.println("url=" + bd.getUrl() + "<br>" );
out.println("user=" + bd.getUsername() + "<br>");
out.println("password=" + bd.getPassword() + "<br>" );
Connection con = ds.getConnection();
out.println("con=" + con + "<br>");
} catch (NamingException e) {
e.printStackTrace(out);
} catch (SQLException e) {
e.printStackTrace(out);
}

で実行すると

context=javax.naming.InitialContext@1342545
ds= org.apache.commons.dbcp.BasicDataSource@7b1641
DriverClassName=null
url=null
user=null
password=null
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540) at tp1.doIt(tp1.java:45) at tp1.doGet(tp1.java:13) 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
〜以下トレース

となります。
ContextからのlookupはOKだけど、中身がはいっていないです。

・<GlobalNamingResources>に書いてるのでweb.xmlの記述をとった。
・Tomcat Adminから定義した。
でも同じ現象となります。

どこが悪いでしょう?
1

スキルアップ/キャリアアップ(JOB@IT)