2013-02-20 11 views
6

Sto usando Amazon EC2 per eseguire la mia app Java Wicket e ho istanza Amazon MySQL in esecuzione per l'applicazione. Tutto funziona bene, ma dopo 8 ore la mia connessione al database è persa. Ho provato a configurare le impostazioni di c3p0 in modo che ciò non avvenga. Ho anche provato ad aggiornare le impostazioni di MySQL, ma nessun aiuto.Connessione MySQL e impostazioni di ibernazione c3p0, timeout dopo 8 ore?

Ecco il mio 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> 

sto facendo domande come questa:

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

} 

} 

Tutto l'aiuto sarebbe apprezzato.

risposta

2

In primo luogo, è possibile controllare i registri per il dump della configurazione di c3p0; il tuo timeout di 5 minuti dovrebbe impedire alle connessioni MySQL di andare in stallo dopo 8 ore, ma per qualche motivo sembra non accadere per te. Volete vedere se la proprietà di c3p0 'maxIdleTime' è in realtà 300 come previsto. In ogni caso, si potrebbe provare ad aggiungere

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

questo è il modo più semplice per garantire la validità dei collegamenti - li prova (con una query efficiente) su ogni cassa. è anche relativamente costoso; se trovi che è un problema, puoi andare a qualcosa di più savvy. Ma sarebbe bene assicurarsi di poter ottenere un set up affidabile e quindi ottimizzare da lì. See here.

Si noti che il proprio hibernate.c3p0.idle_test_period=3000 non è utile se il pool è configurato come si pensa. Le connessioni inattive verranno scadute molto prima che sia trascorso l'intervallo di test di 3000 secondi.

+0

Ho apportato alcune modifiche alla mia configurazione e ora aspettiamo e speriamo per il meglio. Il monitoraggio mostra che hibernate.c3p0.min_size = 5 ha avuto effetto, era solo 1 prima. Immagine di monitoraggio: http://oi49.tinypic.com/35hipee.jpg – TuomasSaranen

+0

ciao Steve, puoi dare un'occhiata alla mia domanda recente, è in qualche modo correlata: http://stackoverflow.com/questions/19664878/configure-c3p0 -to-close-hibernate-session-when-connection-is-down? Grazie – amphibient

Problemi correlati