我有一个运行在GlassFish上的Java-JSF Web应用程序,我想要使用连接池。因此,我创建了一个应用程序范围的bean,为其他bean提供Connection
实例:
public class DatabaseBean {
private DataSource myDataSource;
public DatabaseBean() {
try {
Context ctx = new InitialContext();
ecwinsDataSource = (DataSource) ctx.lookup("jdbc/myDataSource");
} catch (NamingException ex) {
ex.printStackTrace();
}
}
public Connection getConnection() throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
Connection connection = myDataSource.getConnection();
System.out.println("Succesfully connected: " + connection);
//Sample: Succesfully connected: com.sun.gjc.spi.jdbc40.ConnectionHolder40@7fb213a5
return connection;
}
}
这种方式会导致连接池非常快地被填满。在通过“与数据库相关”的视图进行几次导航后,应用程序将停止,并显示以下消息:
RAR5117:从连接池[mysql_testPool]无法获得/创建连接,原因:正在使用的连接等于max-pool-size且已过期的max-wait-time。不能分配更多连接。RAR5114:分配连接时出错:[分配连接时出现错误。原因:正在使用的连接等于max-pool-size且已过期的max-wait-time。不能分配更多连接。] java.sql.SQLException:分配连接时出现错误。原因:正在使用的连接等于max-pool-size且已过期的max-wait-time。不能分配更多连接。
我在每个方法中都关闭了连接和其他资源。如果使用独立的连接,应用程序可以正常运行。
我做错了什么?有任何提示或建议将不胜感激。