Glassfish jdbc /数据库查找失败
我希望我不是因为我无法找到答案而问一个重复的问题。 我收到此错误:
javax.naming.NamingException:SerialContext中的’jdbc / osclassDB’查找失败
这就是我所做的:我设置了一个JDBC连接池和一个指向该池的JDBC资源 (都在Glassfish中)。
然后我告诉我的web.xml有一个JDBC资源:
jdbc/osclassDB javax.sql.DataSource Container Shareable
然后我尝试在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吗? 我错过了什么? 感谢您的帮助!
解决了这个问题:
首先添加一个sun-web.xml ,它将web.xml中的资源引用链接到一个实际的jndi-name (我在Glassfish上设置的那个)。 通常情况下,这不应该是必要的(说Oracle),但我还是做了[编辑:事实certificate,这真的没有必要! ]
第二节我遗漏了“ jdbc ”。 在servlet中 , web.xml和sun-web.xml现在只称为“osclassDB”(我的资源名称),而不是“jdbc / osclassDB”
现在它看起来像这样:
web.xml中
osclassDB javax.sql.DataSource Container Shareable
sun-web.xml中
osclassDB osclassDB
在servlet中
Context dbContext = (Context) initialContext.lookup("java:comp/env"); DataSource dataSource = (DataSource) dbContext.lookup("osclassDB"); connection = dataSource.getConnection();
[编辑:] sun-web.xml真的没必要
- 运行时期间使用Metro / JAX-WS / WSIT的WSDL请求
- REST服务中的Java 8 Lambda表达式无法正常工作
- Java – 日期保存为前一天
- 无法使用jdk8和netbeans 8打开Web服务测试人员页面
- 升级到Netbeans 8.0.1和Glassfish 4,1后,程序包不存在
- Maven正试图从maven.ocean.net.au更新glassfish插件
- 无法使用Glassfish上的jax-ws进行身份validation
- GlassFish 4.1 alternatedocroot,Access静态内容
- 如何从同一GlassFish Server上的其他应用程序注入EJB?