我在Glassfish中创建了一个JDBC连接池,并将其用作JDBC资源“jdbc / __ default”。我可以在管理控制台界面中成功ping此连接池。
然后,我正在尝试运行以下程序:
package de.java2enterprise.onlineshop;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import javax.annotation.Resource;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
@WebServlet("/test")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// @Resource(name="jdbc/__default")
// private DataSource ds;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter writer = response.getWriter();
response.setContentType("text/html;charset=UTF-8");
writer.println("<!DOCTYPE html>");
writer.println("<html><body>");
Connection con = null;
DataSource ds;
try {
ds = (DataSource) InitialContext.doLookup("jdbc/__default");
con = ds.getConnection();
if (con.isValid(10)) {
writer.println("<BR>Connected!");
}
con.close();
} catch (Exception ex) {
writer.println(ex.getMessage());
} finally {
if (con != null){
try{
con.close();
} catch (Exception ex){
}
}
}
writer.println("<BR>Test finished!</body></html>");
writer.close();
}
}
但是,我在网络浏览器中收到以下错误:
分配连接时出错。原因:无法分配连接,因为:侦听器拒绝连接时出现以下错误:ORA-12518,TNS:侦听器无法切换客户端连接 测完了!
在服务器日志中,我收到以下错误:
2015-04-08T08:15:20.540 + 0200 |信息:在[onlineshop-war]加载应用程序[onlineshop#onlineshop-war.war] 2015-04-08T08:15:20.636 + 0200 |信息:onlineshop在611毫秒内成功部署。 2015-04-08T08:15:38.552 + 0200 | Warnung:ServletContext的上下文路径:/ onlineshop-war与bundle的路径不同:onlineshop-war 2015-04-08T08:15:38.802 + 0200 |信息:访问未经访问的参考文献 2015-04-08T08:15:39.519 + 0200 |信息:成功获得INSTRUMENTATION:sun.instrument.InstrumentationImpl@2d618042
2015-04-08T08:15:41.471 + 0200 | Warnung:RAR5038:为池Onlineshop创建资源时出现意外异常。异常:javax.resource.spi.ResourceAllocationException:无法分配连接,因为:Listener拒绝连接时出现以下错误: ORA-12516,TNS:侦听器找不到具有匹配协议栈的可用处理程序
2015-04-08T08:15:41.471 + 0200 | Warnung:RAR5117:无法从连接池[Onlineshop]获取/创建连接。原因:com.sun.appserv.connectors.internal.api.PoolingException:无法分配连接,因为:侦听器拒绝连接时出现以下错误: ORA-12516,TNS:侦听器找不到具有匹配协议栈的可用处理程序
2015-04-08T08:15:41.486 + 0200 | Warnung:RAR5114:分配连接时出错:[分配连接时出错。原因:无法分配连接,因为:侦听器拒绝连接时出现以下错误: ORA-12516,TNS:侦听器找不到具有匹配协议栈的可用处理程序 ]
之后,我无法再次ping连接池,并在管理控制台中收到或多或少相同的错误。
我使用以下配置: JDK 1.8.0_25,GlassFish Server开源4.1版(build 13),Oracle Database XE 11.2 。
在Glassfish管理控制台中,我创建了以下JDBC资源: JNDI名称:jdbc / __ default,逻辑JNDI名称:java:comp / DefaultDataSource,连接池:Onlineshop 。 JDBC连接池名称是 Onlineshop,资源类型:javax.sql.DataSource,类名:oracle.jdbc.pool.OracleDataSource 。
我的最小池大小为800个连接,最多3200个连接。我保持原样的其他参数,我只在JDBC连接池属性中添加了用户和密码。
有人有想法吗? : - )