Bonjour,
Je rencontre un problême depuis plusieurs mois et je n'arrive pas a le résoudre.
Il arrive que 2 appellent aux meme entités dans le meme dizieme de seconde me génére un lock sur ma base de donnée et me bloque donc mon appli , le seul moyen est de tuer le processus dans la base de donnée.
j'utilise Spring 2.5 , hibernate 3 , et la dernière version officiel de C3P0
Code:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="hibernateProperties">
<map>
<entry key="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
<entry key="hibernate.connection.url" value="jdbc:jtds:sqlserver://***********"/>
<entry key="hibernate.connection.username" value="********"/>
<entry key="hibernate.connection.password" value="**********"/>
<!-- Query properties -->
<entry key="hibernate.show_sql" value="true"/>
<entry key="hibernate.format_sql" value="false"/>
<entry key="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<entry key="hibernate.use_outer_join" value="true"/>
<entry key="hibernate.connection.release_mode" value="auto"/>
<!-- C3P0 - Connection Pool Provider -->
<entry key="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
<entry key="hibernate.c3p0.min_size" value="3"/>
<entry key="hibernate.c3p0.max_size" value="20"/>
<entry key="hibernate.c3p0.acquire_increment" value="1"/>
<entry key="hibernate.c3p0.timeout" value="200"/>
<entry key="hibernate.c3p0.idle_test_period" value="200"/>
<entry key="hibernate.c3p0.num_helper_threads" value="3"/>
<entry key="hibernate.c3p0.max_statements" value="0"/>
<entry key="hibernate.c3p0.preferredTestQuery" value="select 1;"/>
</map>
</property>
</bean>
Voila pour ma configuration.
J'ai environ 500 clique par heure sur le site, pour a peu pres 1500 requetes .
Les 3 derniers plantage que j'ai eu de la base de données sont les lock sur un appel juste avant un envoie d'email qui est dans une methode encapsulé par le manager de transaction de spring.
Chacun des encapsulage de transaction spring contient des 10 aines de requetes avant libération , ce qui est pratique en cas de rollback, mais peut être est ce la cause de tout mes problêmes, j'aimerais vraiment avoir l'avis de personne qui connaissent bien se sujet avant de devoir redevelopper tout cette partie de mon appli.
Merci d'avance a ceux qui sauront m'aider, car la je sais plus quoi faire.