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; 
     } 
    } 

최대 절전 모드 설정 파일 :

<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 

참고 전체 예외의 스택 추적과 그 근본 원인은 글래스 피쉬 서버 오픈 소스 에디션 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

나는 모든 방법으로 내 트랜잭션을 닫지 않아 너무 많은 연결 오류를 보였다. 물론 boneCp/c3pO에 대해 읽으십시오. 제 문제에 대한 당신의 놀라운 노력에 감사드립니다. – shiva