oracle - 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") 并没有尝试查看资源部分。
我错过了什么?任何帮助将不胜感激。
问候,安德鲁。
解决方案
推荐阅读
- .net - 如何确保我的程序始终可以运行,并且如果计算机重新启动或进程死亡,它可以自动重新启动?
- angular - 如何在 Facebook 网页游戏中设置 Facebook 自动登录?
- google-apps-script - Google 表格中有关 Google Chart API 的问题
- arrays - 如何从 Flutter 中的另一个类访问/调用数组(列表)数据?
- c++ - 使用 C 链接在函数内部创建 C++ 模板
- python - 如何检测图片中物体的宽度
- docker - Docker 容器的端口与不在容器内的 nginx 发生冲突
- python - 在 Docker 映像中指定 AWS 凭证
- javascript - 使用动态生成的表的邻居计数
- python - 如何在 HTML 代码中使用 re.findall/search 执行复杂的“if 语句”?