我希望我不是因为我无法找到答案而问一个重复的问题。 我收到了这个错误:
javax.naming.NamingException:SerialContext中的'jdbc / osclassDB'查找失败
这就是我所做的:我设置了一个 JDBC连接池和一个指向该池的 JDBC资源(都在Glassfish中)。
然后我告诉我的 web.xml 有一个JDBC资源:
<resource-ref>
<res-ref-name>jdbc/osclassDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
然后我尝试在 Servlet中使用该资源:
Connection connection = null;
try {
InitialContext initialContext = new InitialContext();
//Context dbContext = (Context) initialContext.lookup("java:comp/env");
DataSource dataSource = (DataSource) initialContext.lookup("jdbc/osclassDB");
connection = dataSource.getConnection();
if (connection == null) {
throw new SQLException("Error establishing connection!");
}
// some queries here
}
// catch and finally close connection
但是,当我致电Servlet
时,它会向我发送NamingException
并告诉我Lookup failed for 'jdbc/osclassDB' in SerialContext
我在这里做错了什么?是web.xml吗?我错过了什么? 谢谢您的帮助!
答案 0 :(得分:2)
解决了问题:
第一,添加 sun-web.xml ,链接 web.xml 中的资源引用到一个实际的 jndi-name (我在Glassfish上设置的那个)。通常情况下,这不应该是必要的(说Oracle),但我还是做了 [编辑:,因为事实证明,这真的没有必要!的 强>
第二我遗漏了“ jdbc ”。在 servlet 中, web.xml 和 sun-web.xml 现在只需将其称为“osclassDB”(我的资源名称) “jdbc / osclassDB”
现在看起来像这样:
<强>的web.xml 强>
<resource-ref>
<res-ref-name>osclassDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<强> sun-web.xml中强>
<resource-ref>
<res-ref-name>osclassDB</res-ref-name>
<jndi-name>osclassDB</jndi-name>
</resource-ref>
servlet中的
Context dbContext = (Context) initialContext.lookup("java:comp/env");
DataSource dataSource = (DataSource) dbContext.lookup("osclassDB");
connection = dataSource.getConnection();
[编辑:] sun-web.xml 实际上没有必要