2013-02-20 53 views
6

मैं अपने जावा विकेट ऐप को चलाने के लिए अमेज़ॅन ईसी 2 का उपयोग कर रहा हूं और मेरे पास एप्लिकेशन के लिए अमेज़ॅन माईएसक्यूएल इंस्टेंस चल रहा है। सभी ठीक काम करते हैं, लेकिन 8 घंटे के बाद मेरा डेटाबेस कनेक्शन खो जाता है। मैंने c3p0 सेटिंग्स को कॉन्फ़िगर करने का प्रयास किया है ताकि ऐसा न हो। मैंने MySQL सेटिंग्स को अपडेट करने का भी प्रयास किया है, लेकिन कोई मदद नहीं।MySQL कनेक्शन और हाइबरनेट c3p0 सेटिंग्स, 8 घंटे के बाद टाइमआउट?

यहाँ मेरी persitence.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<persistence xmlns="xyz"> 
<persistence-unit name="mysqldb-ds" transaction-type="RESOURCE_LOCAL"> 

    <description>Persistence Unit</description> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 

    <properties> 
    <property name="hibernate.hbm2ddl.auto" value="update"/> 
    <property name="hibernate.show_sql" value="true"/> 
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
    <property name="hibernate.connection.username" value="XXXXX"/> 
    <property name="hibernate.connection.password" value="YYYYY"/> 
    <property name="hibernate.connection.url" value="jdbc:mysql://xxxx.yyyyy.us-east-1.rds.amazonaws.com:3306/paaluttaja"/> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
    <property name="connection.pool_size" value="1" /> 
    <property name="cache.provider_class" value="org.hibernate.cache.NoCacheProvider" /> 
    <property name="hibernate.c3p0.min_size" value="5" /> 
    <property name="hibernate.c3p0.max_size" value="20" /> 
    <property name="hibernate.c3p0.timeout" value="300" /> 
    <property name="hibernate.c3p0.max_statements" value="50" /> 
    <property name="hibernate.c3p0.idle_test_period" value="3000" /> 
    </properties> 

</persistence-unit> 
</persistence> 

है मैं इस तरह की क्वेरी बनाने की कर रहा हूँ:

@Service 
public class LoginServiceImpl implements LoginService{ 

@Override 
public Customer login(String username, String password) throws LSGeneralException { 
    EntityManager em = EntityManagerUtil.getEm(); 

    TypedQuery<Customer> query = em.createQuery("SELECT c FROM Customer c " 
      + "WHERE c.username = '" + username + "' " 
      + "AND c.password = '" + password + "'", Customer.class); 

    Customer customer = null; 

    try { 
     customer = (Customer) query.getSingleResult(); 
    }catch(Exception e){ 
     if(e instanceof NoResultException){ 
      throw new LSGeneralException("login.failed.wrong.credentials", e); 
     }else{ 
      throw new LSGeneralException("failure", e); 
     } 
    } 

    customer.setLogged(true); 

    return customer; 

} 

} 

सभी मदद की सराहना की जाएगी।

उत्तर

2

सबसे पहले, आप अपने विन्यास के c3p0 के डंप के लिए अपने लॉग जांचना चाहेंगे; आपके 5-मिनट के टाइमआउट को MySQL कनेक्शन को 8 घंटों के बाद बाँधने से रोकना चाहिए, लेकिन किसी कारण से ऐसा लगता है कि आपके लिए नहीं हो रहा है। आप देखना चाहते हैं कि c3p0 प्रॉपर्टी 'maxIdleTime' वास्तव में अपेक्षाकृत 300 है या नहीं। वैसे भी, आप जोड़कर भी देख सकते

hibernate.c3p0.preferredTestQuery=SELECT 1 
hibernate.c3p0.testConnectionOnCheckout=true 

इस सबसे आसान तरीका कनेक्शन की वैधता सुनिश्चित करने के लिए है - उनकी जांच हर चेकआउट पर (एक कुशल क्वेरी के साथ)। यह अपेक्षाकृत महंगा है; अगर आपको लगता है कि यह एक समस्या है, तो आप कुछ समझदार हो सकते हैं। लेकिन यह सुनिश्चित करना अच्छा होगा कि आप एक विश्वसनीय सेट-अप प्राप्त कर सकें, और फिर वहां से ऑप्टिमाइज़ करें। See here

ध्यान दें कि आपका पूलउपयोगी नहीं है, अगर आपका पूल कॉन्फ़िगर किया गया है जैसा आपको लगता है। 3000-सेकंड परीक्षण अंतराल पारित होने से पहले निष्क्रिय कनेक्शन का समय समाप्त हो जाएगा।

+0

मैंने अपनी कॉन्फ़िगरेशन में कुछ बदलाव किए हैं और अब हम प्रतीक्षा करते हैं और सर्वश्रेष्ठ के लिए आशा करते हैं। निगरानी से पता चलता है कि hibernate.c3p0.min_size = 5 प्रभावी हो गया है, यह केवल 1 था। निगरानी छवि: http://oi49.tinypic.com/35hipee.jpg – TuomasSaranen

+0

हाय स्टीव, क्या आप मेरे हालिया प्रश्न पर एक नज़र डाल सकते हैं, यह कुछ हद तक संबंधित है: http://stackoverflow.com/questions/19664878/configure-c3p0 -टू-क्लोज-हाइबरनेट-सत्र-कब-कनेक्शन-डाउन-डाउन? धन्यवाद – amphibient