2013-02-27 5 views
2

Bonjour à tous,
Je teste un Struts webApp en utilisant hibernate-mysql sur tomcat7 ...Hibernate - Tomcat - MySQL question

Après la période délai d'attente de 8 heures mon webapp toujours accidents . J'ai changé de configuration ici et là. Mais pas de succès.

Je vous remercie de votre attention ...

Voici quelques lignes de hibernate.xml


property name="hibernate.bytecode.use_reflection_optimizer">false 
    property name="hibernate.c3p0.idle_test_period">30 
    property name="hibernate.c3p0.max_size">600 
    property name="hibernate.c3p0.max_statements">50 
    property name="hibernate.c3p0.min_size">5 
    property name="hibernate.c3p0.timeout">1800 
    property name="hibernate.c3p0.testConnectionOnCheckout">true 
    property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider 
    property name="hibernate.c3p0.validate">true 
    property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver 
    property name="hibernate.connection.url">jdbc:mysql://localhost:3306/stockdb?autoReconnect=true 


Voici quelques-unes des lignes de mes stacktraces :



com.mchange.v2.c3p0.impl.NewPooledConnection handleThrowable 
    WARNING: [c3p0] A PooledConnection that has already signalled a Connection error is still in use! 
    ... 



WARNING: [c3p0] Another error has occurred [ com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed. ] which will not be reported to listeners! 
... 

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed. 



... 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1014) 
... 



at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.getMaxRows(NewProxyPreparedStatement.java:1200) 




at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:212) 


... 
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) 
... 

S'il vous plaît aider!

+0

Tomcat a [un pool de connexion base de données intégrée] (http://people.apache.org/~fhanik/tomcat/jdbc-pool.html), ce qui rend inutile c3p0. – hd1

+0

génial. C'est totalement nouveau pour ma pauvre connaissance ... Merci beaucoup pour l'indice. – shan

+0

Je vais le mettre comme une réponse, ainsi que quelques détails de configuration de la page, afin que vous puissiez l'accepter dans une deuxième – hd1

Répondre

2

Tomcat a a database connection pool qui est inclus hors de la boîte. Pour configurer MySQL, par exemple:

<Context> 

    <!-- maxActive: Maximum number of database connections in pool. Make sure you 
     configure your mysqld max_connections large enough to handle 
     all of your db connections. Set to -1 for no limit. 
     --> 

    <!-- maxIdle: Maximum number of idle database connections to retain in pool. 
     Set to -1 for no limit. See also the DBCP documentation on this 
     and the minEvictableIdleTimeMillis configuration parameter. 
     --> 

    <!-- maxWait: Maximum time to wait for a database connection to become available 
     in ms, in this example 10 seconds. An Exception is thrown if 
     this timeout is exceeded. Set to -1 to wait indefinitely. 
     --> 

    <!-- username and password: MySQL username and password for database connections --> 

    <!-- driverClassName: Class name for the old mm.mysql JDBC driver is 
     org.gjt.mm.mysql.Driver - we recommend using Connector/J though. 
     Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver. 
     --> 

    <!-- url: The JDBC connection url for connecting to your MySQL database. 
     --> 

    <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" 
       maxActive="100" maxIdle="30" maxWait="10000" 
       username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" 
       url="jdbc:mysql://localhost:3306/javatest"/> 

</Context> 

Ensuite, vous devrez configurer votre connexion comme suit:

public static void main(String[] args) throws Exception { 
     PoolProperties p = new PoolProperties(); 
     p.setUrl("jdbc:mysql://localhost:3306/mysql"); 
     p.setDriverClassName("com.mysql.jdbc.Driver"); 
     p.setUsername("root"); 
     p.setPassword("password"); 
     p.setJmxEnabled(true); 
     p.setTestWhileIdle(false); 
     p.setTestOnBorrow(true); 
     p.setValidationQuery("SELECT 1"); 
     p.setTestOnReturn(false); 
     p.setValidationInterval(30000); 
     p.setTimeBetweenEvictionRunsMillis(30000); 
     p.setMaxActive(100); 
     p.setInitialSize(10); 
     p.setMaxWait(10000); 
     p.setRemoveAbandonedTimeout(60); 
     p.setMinEvictableIdleTimeMillis(30000); 
     p.setMinIdle(10); 
     p.setLogAbandoned(true); 
     p.setRemoveAbandoned(true); 
p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); 
     DataSource datasource = new DataSource(); 
     datasource.setPoolProperties(p); 

     Connection con = null; 
     con = datasource.getConnection(); 

maintenant, procéder comme on le ferait normalement avec votre code JDBC.

+0

s'il vous plaît dites-moi ceci ... comment puis-je combiner avec Hibernate et Struts ... Serait-ce un conflit? – shan

+0

Étant donné que [l'un des blogueurs les plus respectés Java] (http://www.mkyong.com/struts/struts-hibernate-integration-example/) a un tutoriel sur tout cela, je suppose que ce ne serait pas un conflit. – hd1

+0

Merci encore ... C'est pour le travail. Tu es un sauveur. – shan