2012-02-10 2 views
1

Я использую struts2 + hibernate3 в своем веб-приложении. Он работает нормально. Несколько раз показывает Не удается открыть соединение. Заявление о соединении с подключением с гибернацией в Класс действия.Как разрешить слишком много ошибок подключения в спящем режиме

protected SessionFactory getSessionFactory() { 
    try { 

     Configuration cfg = new Configuration(); 
     cfg.configure("hibernate.cfg.xml"); 
     SessionFactory factory = cfg.buildSessionFactory(); 
     return factory; 

    } catch (Exception e) { 
     log.error("sessionFactory", e); 
     throw new IllegalStateException(
       "Could not locate SessionFactory"); 
    } 
} 
    public List viewAllPromotion() { 
     System.out.println("finding student instance"); 
     try { 
      Session session = sessionFactory.openSession(); 
      System.out.println("View All Student"); 
      session.beginTransaction(); 
      List results = session.createQuery("from Student").list(); 
      System.out.println("List got Rsults:"+results.size()); 

      session.close(); 
      return results; 


     } catch (RuntimeException re) { 
      log.error("find by example failed", re); 
      throw re; 
     } 
    } 

файл конфигурации Hibernate:

<session-factory> 
    <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/marksheet</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password">admin</property> 
    <property name="hibernate.search.autoregister_listeners">false</property> 
    <property name="hibernate.session_factory_name">MySessionFactory</property> 
    <property name="current_session_context_class">thread</property> 
    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
    <property name="hibernate.connection.pool_size">10</property> 

    <property name="show_sql">true</property> 
    <mapping resource="com/rewardz/model/student.hbm.xml" /> 
    <mapping resource="com/rewardz/model/course.hbm.xml" />    
    <mapping resource="com/rewardz/model/subject.hbm.xml" /> 
    <mapping resource="com/rewardz/model/staff.hbm.xml" /> 
    <mapping resource="com/rewardz/model/Role.hbm.xml" /> 
    <mapping resource="com/rewardz/model/Privilege.hbm.xml" /> 
    <mapping resource="com/rewardz/model/Logtab.hbm.xml" /> 
</session-factory> 

Я получаю следующее сообщение об ошибке, когда я делать больше операций.

HTTP Status 500 - type Exception report 

    message 

     descriptionThe server encountered an internal error() that prevented it from fulfilling this request. 

    exception 

     org.hibernate.exception.JDBCConnectionException: Cannot open connection 

записные Полный стек следы исключения и его коренные причины доступны в журналах GlassFish сервер Open Source Edition 3.1.1.

Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо.

+0

вы начали транскрипцию в своем коде, но не закрыли его? –

+0

@ Umesh Awasthi: Я использовал метод session.close(). Могу ли я узнать, как закрыть транзакцию? – shiva

+0

что-то вроде 'tx.commit();' –

ответ

0

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

Также попробуйте использовать пул соединений, например c3p0 или bonecp. Вы можете столкнуться с трудностями при подключении, когда не используете одну из этих библиотек, таких как тайм-ауты соединений, слишком долго открыты и т. Д.

+0

Я не могу понять о c3p0 или bonecp. Можете ли вы объяснить об этом? – shiva

+0

Библиотека пула соединений будет открывать несколько соединений и предоставлять вам существующее соединение, если вам нужно подключение, так что вам не нужно открывать новый, который имеет преимущества в производительности. Они делают другие приятные вещи, например, чтобы убедиться, что связь открыта, прежде чем давать ее вам, и вы не получите один только Hibernate. Я не уверен, решит ли он вашу проблему или нет, но это очень приятно делать независимо. https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool –

+0

Я пропустил, чтобы закрыть мою trasaction во всех методах, чтобы он показал мне слишком много ошибок подключения. Конечно, прочитайте о boneCp/c3pO. Большое спасибо за ваше замечательное усилие в моей проблеме. – shiva

Смежные вопросы