views:

20

answers:

1

I'm using Apache Derby with the Spring JdbcTemplate inside a web app running on Tomcat.

Spring is managing the data source. I've noticed that if I update the .war file and Tomcat undeploys/redeploys the app, I get this error:

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

Restarting Tomcat fixes the problem, but as a purist, I'd like to clean things up properly when the webapp is undeployed.

The Embedded driver doesn't seem to have a 'close' method to put in the bean declaration under 'destroy-method'. I know the shutdown is normally achieved using a 'shutdown' connection URL, "jdbc:derby:;shutdown=true".

Any suggestions?

Here's the declaration in the Spring config file for my data source (the db won't be under /tmp/, just there for now).

<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>
+1  A: 

I think a better answer is to use the Tomcat JNDI data source pool with Spring. Spring's JDBC template will return the connection to pool when it's done.

duffymo