2013-02-20 13 views
6

Ich verwende Amazon EC2, um meine Java Wicket App zu starten, und ich habe Amazon MySQL-Instanz für die Anwendung ausgeführt. Alles funktioniert gut, aber nach 8 Stunden ist meine Datenbankverbindung verloren. Ich habe versucht, c3p0 Einstellungen so zu konfigurieren, dass dies nicht passieren würde. Ich habe auch versucht, MySQL-Einstellungen zu aktualisieren, aber keine Hilfe.MySQL-Verbindung und Ruhezustand c3p0 Einstellungen, Timeout nach 8 Stunden?

Hier ist meine 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> 

Ich mache Abfragen wie folgt:

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

} 

} 

Alle Hilfe würde geschätzt.

Antwort

2

Zuerst möchten Sie Ihre Protokolle für c3p0 Dump seiner Konfiguration überprüfen; Ihr 5-Minuten-Timeout sollte verhindern, dass die MySQL-Verbindungen nach 8 Stunden veralten, aber aus irgendeinem Grund scheint das für Sie nicht der Fall zu sein. Sie möchten sehen, ob die c3p0-Eigenschaft 'maxIdleTime' tatsächlich 300 ist wie erwartet. Wie auch immer, Sie könnten versuchen, das Hinzufügen

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

dies ist der einfachste Weg, um die Gültigkeit der Verbindungen zu gewährleisten - sie testen (mit einer effizienten Abfrage) an jeder Kasse. es ist auch relativ teuer; Wenn Sie feststellen, dass das ein Problem ist, können Sie etwas savvierer gehen. Aber es wäre gut, sicherzustellen, dass Sie ein zuverlässiges Setup erhalten und von dort aus optimieren können. See here.

Beachten Sie, dass Ihre hibernate.c3p0.idle_test_period=3000 nicht sinnvoll ist, wenn Ihr Pool so konfiguriert ist, wie Sie es sich vorstellen. Leerlaufverbindungen werden lange vor Ablauf des 3000-Sekunden-Testintervalls beendet.

+0

Ich habe einige Änderungen an meiner Konfiguration vorgenommen und jetzt warten wir und hoffen auf das Beste. Die Überwachung zeigt, dass hibernate.c3p0.min_size = 5 wirksam wurde, vorher war es 1. Monitoring Bild: http://oi49.tinypic.com/35hipee.jpg – TuomasSaranen

+0

Hallo Steve, können Sie einen Blick auf meine aktuelle Frage werfen, ist es etwas verwandt: http://StackOverflow.com/Questions/19664878/configure-c3p0 -zu-close-Hibernate-Sitzung-wenn-Verbindung-ist-down? Vielen Dank – amphibient