2010-07-05 7 views
2

J'utilise Apache Derby avec le Spring JdbcTemplate dans une application Web fonctionnant sur Tomcat.Spring se déconnectant de Derby

Spring gère la source de données. J'ai remarqué que si je mets à jour le fichier .war et Tomcat undeploys/redéploie l'application, je reçois cette erreur:

java.sql.SQLException: Another instance of Derby may have already booted the database /tmp/manager_db/manager. 

Tomcat Relancer résout le problème, mais comme un puriste, je voudrais nettoyer les choses correctement lorsque la webapp est non déployée.

Le pilote Embedded ne semble pas avoir une méthode 'close' à mettre dans la déclaration du bean sous 'destroy-method'. Je sais que l'arrêt est normalement réalisé en utilisant une URL de connexion 'shutdown', "jdbc: derby:; shutdown = true".

Des suggestions?

Voici la déclaration dans le fichier de configuration de Spring pour ma source de données (le db ne sera pas sous/tmp /, juste là pour l'instant).

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
    <property name="url" value="jdbc:derby:/tmp/manager_db/manager;create=true"/> 
    <property name="username" value=""/> 
    <property name="password" value=""/> 
</bean> 
+0

Avez-vous compris cela, je reçois le même problème sous la jetée. –

+0

Je l'ai modifié pour que Tomcat fasse la connexion. –

Répondre

1

Je pense qu'une meilleure réponse est d'utiliser le Tomcat JNDI data source pool avec Spring. Le modèle JDBC de Spring renverra la connexion au pool une fois terminé.

Questions connexes