У меня есть приложение java
, где я пытаюсь отметить лицо человека (соответствующее строке PERSON в моем db), если запись превышает один год. То есть установка строки OBSOLETE в БД должна быть «Y».Правильная настройка нового подключения к базе данных в Java-приложении?
я получаю сообщение об ошибке:
SQL Error: 2396, SQLState: 61000
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ORA-02396: exceeded maximum idle time, please connect again
WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 17008, SQLState: 99999
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Closed Connection
Это потому, что мой DB idle timeout
устанавливается на 30 минут, а приложение работает дольше, чем это.
Чтобы исправить это, я начинаю и закрываю новое соединение для каждого человека, которое будет помечено, однако ошибка все еще происходит. Как я могу это исправить?
Метод:
public void flagPersonIfDeletable() {
List<String> allPersonIds = getAllPersonIds();
for (String personId : allPersonIds) {
try {
startNewConnection();
flagPersonById(personId)
} finally {
closeConnection();
}
}
Начать новый метод соединения:
public void startNewConnection() {
this.Persistence.done();
this.Persistence.unbind();
this.Persistence.entityManager();
}
Закрыть Способ подключения:
public void closeConnection() {
if (entityManager() != null &&
entityManager().isOpen()) {
if (entityManager().getTransaction().isActive()) {
entityManager().getTransaction().commit();
}
entityManager().close();
}
}
Мои persistence.xml:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="myPersistence">
<class>com.my.package.PersonEntity</class>
<properties>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
<property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider"/>
<property name="hibernate.c3p0.max_size" value="1"/>
<property name="hibernate.c3p0.min_size" value="1"/>
<property name="hibernate.c3p0.acquire_increment" value="1"/>
<property name="hibernate.c3p0.idle_test_period" value="300"/>
<property name="hibernate.c3p0.max_statements" value="0"/>
<property name="hibernate.c3p0.timeout" value="0"/>
<property name="hibernate.c3p0.unreturnedConnectionTimeout" value="30000"/>
<property name="hibernate.c3p0.dataSourceName" value="JPA"/>
</properties>
</persistence-unit>
</persistence>