問題描述
我們在做使用JavaWeb內置連接池獲取數據源的時候,遇到了這種錯誤:
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context;
javax.naming.NameNotFoundException: Name [jdbc/TomcatPool] is not bound in this Context. Unable to find [jdbc].
翻譯過來大概是說創建的JNDI容器中沒有該名稱,也就是說在JNDI容器中搜索不到特定名稱的數據源。
解決辦法
web工程下的,WEB-INF下的web.xml添加這一段:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>JDBC/BBS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
相對應的jsp或者java代碼應該爲:
DataSource ds = (DataSource) ctx.lookup("java:comp/env/JDBC/TestDB");
或者
Context envCtx = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup("JDBC/TestDB");
不配置,或者配置錯誤,就會出現:Name jdbc is not bound in this Context,如果配置成 JDBC/BBS3,則會報Name jdbc is not bound in this Context。