Hi everybody,
This setup works fine:
Now I try to define all the beans in @Configuration files. Both files are like this:Code:... <context:annotation-config/> <context:component-scan base-package="com.cnh.sop.exlo.dao" /> <context:property-placeholder location="database.properties" /> <bean id="dataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource" destroy-method="close"> <property name="driverType" value="${driverClass}" /> <property name="URL" value="${jdbcUrl}" /> <property name="user" value="${userName}" /> <property name="password" value="${password}" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>com.cnh.sop.exlo.domain.entities.Measure</value> <value>com.cnh.sop.exlo.domain.entities.MeasureGroup</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=${hibernateDialect} hibernate.show_sql=${hibernateShowSql} hibernate.format_sql=${hibernateFormatSql} hibernate.use_sql_comments=${hibernateUseSqlComments} </value> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <constructor-arg ref="sessionFactory" /> </bean> <bean id="exceptionTranslator" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> </beans>
and:Code://@Configuration public class ExloDataSourceConfiguraton { @Value("${user}") private String user; @Value("${password}") private String password; @Value("${jdbcUrl}") private String url; @Value("${driverClass}") private String driverName; @Bean public DataSource dataSource()throws SQLException{ OracleConnectionPoolDataSource oracleDataSource = new OracleConnectionPoolDataSource(); oracleDataSource.setUser(this.user); oracleDataSource.setPassword(this.password); oracleDataSource.setURL(this.url); oracleDataSource.setDriverType(this.driverName); return oracleDataSource; } }
I think they have to define all the same beans. I also tried this without the setRepositoryAnnotationType() method in the last bean.Code:@Configuration public class ExloHibernateConfiguration extends ExloDataSourceConfiguraton { @Value("${hibernateDialect}") private String hibernateDialect; @Value("${hibernateShowSql}") private String showSql; @Value("${hibernateFormatSql}") private String formatSql; @Value("${hibernateUseSqlComments}") private String useSqlComments; private Properties hibernateProperties(){ Properties properties = new Properties(); properties.setProperty("hibernate.dialect", hibernateDialect); properties.setProperty("hibernate.show_sql", showSql); properties.setProperty("hibernate.format_sql", formatSql); properties.setProperty("hibernate.use_sql_comments", useSqlComments); return properties; } private Class<?>[] annotatedClasses = {Measure.class, MeasureGroup.class}; @Bean public SessionFactory sessionFactory() throws SQLException{ AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean(); annotationSessionFactoryBean.setDataSource(this.dataSource()); annotationSessionFactoryBean.setAnnotatedClasses(annotatedClasses); annotationSessionFactoryBean.setHibernateProperties(hibernateProperties()); return annotationSessionFactoryBean.getObject(); } @Bean public HibernateTransactionManager transactionManager (SessionFactory sessionFactory){ HibernateTransactionManager hibernateTransactionManager = new HibernateTransactionManager(sessionFactory); return hibernateTransactionManager; } @Bean public PersistenceExceptionTranslationPostProcessor exceptionTranslator(){ PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor = new PersistenceExceptionTranslationPostProcessor(); persistenceExceptionTranslationPostProcessor.setRepositoryAnnotationType(Repository.class); return persistenceExceptionTranslationPostProcessor; } }
I will not post my entire stack trace, but the part I think is relevant. Can anybody tell me what is going wrong and more important, how can I get arround?
It is a multi-module Maven-project, all the configuration I have shown comes of the DAO-layer, also the tests are in this layer. With the XML-config it works all just fine, but I connot see where is the difference between the 2 configrations.Code:... ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.cnh.sop.exlo.dao.impl.MeasureDAOImplTest 11-feb-2011 17:50:26 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from class path resource [spring-dao.xml] 11-feb-2011 17:50:27 org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.GenericApplicationContext@2f3adc56: startup date [Fri Feb 11 17:50:27 CET 2011]; root of context hierarchy 11-feb-2011 17:50:27 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition INFO: Overriding bean definition for bean 'dataSource': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=exloDataSourceConfiguraton; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=null; defined in class path resource [com/cnh/sop/exlo/dao/config/ExloDataSourceConfiguraton.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=exloHibernateConfiguration; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=null; defined in class path resource [com/cnh/sop/exlo/dao/config/ExloHibernateConfiguration.class]] 11-feb-2011 17:50:27 org.springframework.core.io.support.PropertiesLoaderSupport loadProperties INFO: Loading properties file from class path resource [database.properties] 11-feb-2011 17:50:27 org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization INFO: Bean 'exloHibernateConfiguration' of type [class com.cnh.sop.exlo.dao.config.ExloHibernateConfiguration$$EnhancerByCGLIB$$3bed3420] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 11-feb-2011 17:50:27 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@b92a848: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,exloDataSourceConfiguraton,exloHibernateConfiguration,measureDAOImpl,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,dataSource,sessionFactory,transactionManager,exceptionTranslator]; root of factory hierarchy 11-feb-2011 17:50:27 org.springframework.test.context.TestContextManager prepareTestInstance SEVERE: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@7bd33a6b] to prepare test instance [com.cnh.sop.exlo.dao.impl.MeasureDAOImplTest@68a0864f] java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308) ... at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'exceptionTranslator' defined in class path resource [com/cnh/sop/exlo/dao/config/ExloHibernateConfiguration.class]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: No persistence exception translators found in bean factory. Cannot perform exception translation. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) ... at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304) ... 28 more Caused by: java.lang.IllegalStateException: No persistence exception translators found in bean factory. Cannot perform exception translation. at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:142) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:79) at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70) at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:99) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1439) ...
Thanks for your help,
Benoit


Reply With Quote