Как правильно закрыть и открыть сеанс Hibernate?

У меня есть следующий метод, который вставляет большой пакет записей каждые несколько секунд. После некоторого времени работы я получаю ошибки, подобные следующим:

ОШИБКА: сбой линии связи

Последний пакет, успешно полученный от сервера, был 523 миллисекунды назад. Последний пакет, успешно отправленный на сервер, был 8 миллисекунд назад.

16 мая 2013 г. 9:48:30 com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement ИНФОРМАЦИЯ: Проблема с проверенным оператором, удаление.

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Операции не допускаются после закрытия оператора.



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

public DataControllerImp() {
    session = HibernateUtil.getSessionFactory().openSession();
}

@Override
public void saveMessage(ArrayList messages) {
    Transaction tx = session.beginTransaction();

    for (int i = 0; i < mesages.size(); i++) {
        Message message = messages.get(i);

        try {
            session.save(message);
            if (i % 75 == 0) { 
                // flush a batch of inserts and release memory:
                session.flush();
                session.clear();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    tx.commit();
}



Я также использую пул соединений c3p0. Моя конфигурация выглядит так:

org.hibernate.connection.C3P0ConnectionProvider        
1
300
3
20
50
300
1
250



Я неправильно открываю и закрываю соединения? Пожалуйста, дайте мне знать, что я могу изменить, чтобы прекратить получать эту ошибку и остановить мою программу.

Ответы на вопрос(2)

Ваш ответ на вопрос