2015-07-22 2 views
0

Я использую соединение JDBC-соединения на веб-сервере из морской рыбы. Я инъекции DataSource с помощью этого заявления:Glassfish не используется повторно JDBC-соединения

@Resource(lookup="database") 
DataSource db; 

код, который я использую для загрузки данных выглядит примерно так:

public ArrayList<Stuff> loadStuff()throws SQLException{ 
    PreparedStatement ps = db.getConnection().prepareStatement("Select * from stufftable"); 
    ResultSet rs = ps.executeQuery(); 
    ArrayList<Stuff> stuffs= new ArrayList<Stuff>(); 
    if(rs.next()){ 
     Stuff stuff = new Stuff(); 
     stuff.setString1(rs.getString("string1")); 
     stuff.setString1(rs.getString("string1")); 
     stuffs.add(stuff); 
    } 
    return stuffs; 
} 

По какой-то причине GlassFish не повторное использование соединений с базой данных, поэтому Я быстро убегаю от них. Рано или поздно я всегда получаю эту ошибку: Error in allocating a connection. Cause: In-use connections equal max-pool-size and expired max-wait-time. Cannot allocate more connections.

Как я понял концепцию объединения на GlassFish: Я не должен закрывать соединение, после того, как я использовал их, так что-то еще может повторно использовать соединение при необходимости. Glassfish закрывает соединение, когда больше нет требования к соединению.

Почему моя программа открывает новое соединение каждый раз? Должен ли я что-то делать с соединением, когда я закончил?

ответ

2

Вам по-прежнему необходимо позвонить Connection.close(). Ваш пул будет управлять вашими подключениями, поэтому они действительно не будут закрыты, но если вы не «закроете» их в своем коде, они не будут возвращены в пул.

Edit: в качестве альтернативы, использовать примерочных с-ресурсами: https://stackoverflow.com/a/8066594/212224

+0

Пытается-с-ресурсы автоматически закрывает соединение, когда его сделали? Закрывает ли он ресурс также, когда генерируется исключение, и оно должно прерываться? – Kendoha

+0

Дополнительный вопрос: я пытался прочитать об этом, и, судя по всему, есть вещь, которая называется «Подавленные исключения», которые я действительно не получаю. Есть ли исключения в этих попытках? – Kendoha

1
Connection con = db.getConnection(); 
try { 
    PreparedStatement ps = con.prepareStatement("Select * from stufftable"); 
    ... 
} finally { 
    // this returns the connection to the pool 
    con.close(); 
} 
Смежные вопросы