views:

65

answers:

1

I am using JDBC to connect to MySQL for a small application. In order to test without altering the real database, I'm using HSQL in memory for JUnit tests.

I'm using Spring for DI and DAOs. Here is how I'm configuring my HSQL DataSource

<bean id="mockDataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:mem:mockSeo"/>
    <property name="username" value="sa"/>
</bean>

This works fine for my JUnit tests which use the mock DB. But when I try to run a main method, I find the following error:

Error creating bean with name 'mockDataSource' defined in class path resource [beans.xml]: 
Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: 
Could not load JDBC driver class [org.hsqldb.jdbcDriver]

I'm running from Eclipse, and I'm using the Maven plugin. Is there a reason why this would work as a Test, but not as a main()? I know that the main method itself is not the problem, because it works if I remove all references to the HSQL DataSource from my Spring Configuration file.

+2  A: 

m2eclipse won't add your test-scoped dependencies to the classpath when you run the application as 'Java Application'. You will need to change the scope of the hsql dependency to 'compile' (the default) for that to happen.

disown