Мне интересно, следует ли нам использовать session.close(), когда я использую пул соединений c3p0 в спящем режиме? или c3p0 автоматически закрывается через определенный промежуток времени? Мне нужно просто открыть сеанс

SessionFactory factory = HibernateUtil.getSessionFactory();
Session session=factory.openSession();  

Потому что в следующем руководстве сеанс не закрывается.

http://examples.javacodegeeks.com/enterprise-java/hibernate/hibernate-connection-pool-configuration-with-c3p0-example/

Как правильно?

Редактировать:

Это будет мой код

@SuppressWarnings("unchecked")
@Override
public JSONObject  getUserDetails(int id) {
    long lStartTime = new Date().getTime(); 
    JSONObject obj = new JSONObject();
    try(Session session=factory.openSession()) {
        Employee emp=(Employee)session.load(Employee.class,id);     

        if(emp != null) {
            obj.put("id", emp.getId());
            obj.put("name", emp.getName());
        }                  
        long lEndTime = new Date().getTime();
        log.info("[ Personal Details ]Time elapsed For Fetching :"+(lEndTime - lStartTime));

    } catch (Exception e) {
        // TODO: handle exception
    }
}
1
Syed 29 Фев 2016 в 09:04

3 ответа

Лучший ответ

Я бы порекомендовал вам как можно скорее close использовать свои ресурсы, чтобы соединение было возвращено в пул быстрее . Вы также можете использовать try-with-resources Заявление, чтобы сделать уверен, что это произойдет.

SessionFactory factory = HibernateUtil.getSessionFactory();
try (Session session = factory.openSession()) {
    // ...
}
4
Elliott Frisch 29 Фев 2016 в 06:11

Как сказал ELLIOT, лучше закрывать сеансы вручную, не полагаясь ни на что, или вы можете использовать блок try, указанный выше, если вы используете java 7 или выше.

0
FaheemFayaz 29 Фев 2016 в 06:17

Да, использование try-with-resources - лучший вариант.

Но вот несколько постулатов по этому поводу:

  1. Любое исключение, созданное операторами try-with-resources, подавляется.
  2. Вы можете использовать catch, finally block, как и обычный try-catch.
  3. Вы можете объявить несколько ресурсов, разделенных точкой с запятой, внутри try-with-resources, например
try (
        java.util.zip.ZipFile zf =
             new java.util.zip.ZipFile(zipFileName);
        java.io.BufferedWriter writer = 
            java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
    )
  1. Он сначала закрывает ресурсы после завершения блока try, т.е. если какое-либо исключение происходит из блока try или нет. После этого он выполняет catch, finally block.
  2. Ваш ресурс, объявленный внутри оператора try-with-resource, должен реализовывать интерфейс AutoCloseable или Closeable.
0
Gurpreet Singh 29 Фев 2016 в 07:10