<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

-->


<!-- Full SPI driven test context for the ReferenceService -->
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:raven="http://taverna.sf.net/schema/artifact-support"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	http://taverna.sf.net/schema/artifact-support 
	http://taverna.sf.net/schema/artifact-support/artifact-support.xsd">

	<!-- Apache Derby rooted at a temporary directory -->
	<bean id="t2reference.jdbc.temporaryjdbc"
		class="org.apache.taverna.platform.spring.jdbc.TemporaryJDBC">
	</bean>
	<bean id="t2reference.jdbc.url" class="java.lang.String"
		factory-bean="t2reference.jdbc.temporaryjdbc"
		factory-method="getTemporaryDerbyJDBC" />
	<bean id="t2reference.jdbc.datasource"
		class="org.apache.taverna.platform.spring.jdbc.InterpolatingDriverManagerDataSource">
		<property name="driverClassName">
			<value>org.apache.derby.jdbc.EmbeddedDriver</value>
		</property>
		<property name="url">
			<ref bean="t2reference.jdbc.url" />
		</property>
		<property name="repository">
			<ref bean="raven.repository" />
		</property>
		<property name="driverArtifact">
			<value>org.apache.derby:derby:10.4.1.3</value>
		</property>
	</bean>

	<!-- Configure hibernate to build schema from scratch, dropping existing -->
	<bean id="t2reference.orm.h3.properties"
		class="org.springframework.beans.factory.config.PropertiesFactoryBean">
		<property name="properties">
			<props>
				<prop key="hibernate.hbm2ddl.auto">create</prop>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.DerbyDialect
				</prop>
				<prop key="hibernate.query.substitutions">
					true 'T', false 'F'
				</prop>
				<prop key="hibernate.show_sql">false</prop>
				<prop key="hibernate.c3p0.minPoolSize">5</prop>
				<prop key="hibernate.c3p0.maxPoolSize">20</prop>
				<prop key="hibernate.c3p0.timeout">600</prop>
				<prop key="hibernate.c3p0.max_statement">50</prop>
				<prop key="hibernate.c3p0.testConnectionOnCheckout">
					false
				</prop>
				<prop key="hibernate.cache.use_second_level_cache">
					false
				</prop>
			</props>
		</property>
	</bean>

</beans>
