package org.ovirt.engine.core.dao; import javax.sql.DataSource; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericApplicationContext; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.test.context.support.AbstractContextLoader; /** * This class is used to provide load the application context for the spring framework in a custom way. The * customization is for providing the transaction manager that is using the data source from the BaseDAOTestCase. * */ public class CustomizedContextLoader extends AbstractContextLoader { @Override protected String getResourceSuffix() { return "dummy"; } @Override public ApplicationContext loadContext(String... locations) throws Exception { // initialize spring application context to enable transaction support within // the Spring TestContext Framework GenericApplicationContext ctx = new GenericApplicationContext() { @SuppressWarnings("unchecked") @Override public Object getBean(String name, Class requiredType) throws BeansException { if ("transactionManager".equals(name)) { DataSource dataSource = BaseDAOTestCase.getDataSource(); if (dataSource != null) { DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource); transactionManager.afterPropertiesSet(); return transactionManager; } else { System.err.println("loading context for transaction management but data source is not initializaed yet. " + "Please make sure datasource is initializaed in BaseDAOTestCase before loading the test context."); throw new IllegalStateException("datasource is not initializaed"); } } return super.getBean(name, requiredType); } }; return ctx; } }