首页 > 解决方案 > Tomcat servlet 配置 JNDI

问题描述

美好的一天,各自的!我的环境:windows 64位下的Tomcat 8.5 所有需要的jar都放到$CATALINA_HOME/lib

这是我第一次尝试使用 ConnectionPool 编写 servlet。在“谷歌搜索”之后,我在 $CATALINA_HOME/conf/server.xml 中做了一个条目:

  <context docbase="msgsend" path="/msgsend" reloadable="true">
        <context docbase="ssr" path="/ssr" reloadable="true">
  <Resource 
       name="jdbc/OrServlet"
       auth="Container"
       type="javax.sql.DataSource"
       user="STERN"
       username="STERN"
       password="pwdxxx"
       driverClassName="oracle.jdbc.OracleDriver"
       url="jdbc:oracle:thin:STERN/pwdxxx@XEPDB1" 
   />
 </context>

我在 WEB-INF/web.xml 中包含以下内容:

<resource-ref>
      <description>just a test</description>
      <res-ref-name>jdbc/OrServlet</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

当我尝试以传统方式连接到 Oracle 时:

try {
cn = DriverManager.getConnection(
"jdbc:oracle:thin:@XEPDB1", "STERN", "pwdxx");
}
catch (Exception e) { }

一切正常。

但是当我尝试通过上下文进行连接时:

 Connection cn = null;
DataSource ds = null;
 try
 {
 Context initCtx = new InitialContext();
 Context envCtx = (Context)initCtx.lookup("java:comp/env");
 ds = (DataSource)envCtx.lookup("jdbc/OrServlet");
 
 cn = ds.getConnection();
 }
 catch(NamingException n) {}       
 catch(SQLException s) {out.println(ds.getClass().getName()+" exception "+s);
 ;}

我得到:

 **exception java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'**

并且异常处理程序中的 ds.getClass().getName() 返回: org.apache.tomcat.dbcp.dbcp2.BasicDataSource

这与在 和 中声明的 javax.sql.DataSource 不同。

在我看来,ds = (DataSource)envCtx.lookup("jdbc/OrServlet") 并没有尝试查看资源部分。

我错过了什么?任何帮助将不胜感激。

问候,安德鲁。

标签: oracletomcatjndipool

解决方案


推荐阅读