2017-02-10 8 views
0

У меня есть приложение 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> 

ответ

0

См. Ссылку ниже. https://developer.jboss.org/thread/27079

Надеюсь, это поможет.

Но я настоятельно рекомендую вам закрыть соединение и снова открыть его по необходимости, а не открывать «всегда».

Я надеюсь, что эта помощь.

0

Время простоя пользователя контролируется профилем пользователя в базе данных Oracle. Вы можете узнать профиль пользователя и увеличить IDLE_TIME или сделать неограниченным, если хотите.

SQL> alter profile <profile_name> limit IDLE_TIME unlimited; 
Смежные вопросы