Problemas com Spring Batch e Hibernate

Srs.,
Estou com problemas para integrar o hibernate com o spring batch no projeto do Washington Botelho (https://github.com/wbotelhos/spring-batch-flat-file-database), estou querendo colocar a camada de serviço antes do DAO e estou tomando algumas exceptions.

Fico muito grato se alguem me der uma luz :slight_smile: .

applicationContext.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

<beans
xmlns=“http://www.springframework.org/schema/beans
xmlns:tx=“http://www.springframework.org/schema/tx
xmlns:context=“http://www.springframework.org/schema/context
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

&lt;!-- Load Properties --&gt;
&lt;context:property-placeholder location="classpath:*.properties" /&gt;

&lt;context:annotation-config /&gt;

&lt;context:component-scan base-package="br.com.batch" /&gt;

&lt;bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"&gt;
	&lt;property name="jobRepository" ref="jobRepository" /&gt;
&lt;/bean&gt;

&lt;bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean"&gt;
	&lt;property name="transactionManager" ref="transactionManager" /&gt;
&lt;/bean&gt;

&lt;!-- Pagamento Service --&gt;
&lt;bean id="PagamentoServiceImpl" class="br.com.batch.service.impl.PagamentoServiceImpl"&gt;
	&lt;property name="pagamentoDao" ref="PagamentoDao" /&gt;
&lt;/bean&gt;

&lt;!-- Pagamento DAO  --&gt;
&lt;bean id="PagamentoDao" class="br.com.batch.dao.impl.PagamentoDaoImpl"&gt;
	&lt;property name="sessionFactory" ref="SessionFactory" /&gt;
&lt;/bean&gt;

&lt;!-- Data Source --&gt;
&lt;bean id="DataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource" &gt;
	&lt;property name="driverClassName" value="${mysql.driverClassName}" /&gt;
	&lt;property name="url" value="${mysql.url}" /&gt;
	&lt;property name="username" value="${mysql.username}" /&gt;
	&lt;property name="password" value="${mysql.password}" /&gt;
&lt;/bean&gt;

&lt;!-- Session Factory --&gt;
&lt;bean id="SessionFactory"
	class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&gt;
	&lt;property name="dataSource" ref="DataSource1" /&gt;
	&lt;property name="packagesToScan"&gt;
		&lt;list&gt;
			&lt;value&gt;br.com.batch.entity&lt;/value&gt;
		&lt;/list&gt;
	&lt;/property&gt;
	&lt;property name="hibernateProperties"&gt;
		&lt;props&gt;
			&lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/prop&gt;
			&lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;
			&lt;prop key="hibernate.format_sql"&gt;true&lt;/prop&gt;
		&lt;/props&gt;
	&lt;/property&gt;
&lt;/bean&gt;

&lt;!-- Enable the configuration of transactional behavior based on annotations --&gt;
&lt;tx:annotation-driven transaction-manager="txManager" /&gt;

&lt;!-- Transaction Manager is defined --&gt;
&lt;bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"&gt;
	&lt;property name="sessionFactory" ref="SessionFactory" /&gt;
&lt;/bean&gt;

</beans>[/code]

csvFileJob.xml

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<beans
xmlns=“http://www.springframework.org/schema/beans
xmlns:batch=“http://www.springframework.org/schema/batch
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
xmlns:aop=“http://www.springframework.org/schema/aop
xmlns:tx=“http://www.springframework.org/schema/tx
xmlns:context=“http://www.springframework.org/schema/context
xmlns:util=“http://www.springframework.org/schema/util
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

&lt;import resource="applicationContext.xml" /&gt;

&lt;batch:job id="read"&gt;
	&lt;batch:listeners&gt;
		&lt;batch:listener ref="appJobExecutionListener" /&gt;
	&lt;/batch:listeners&gt;

	&lt;batch:step id="step1"&gt;
		&lt;batch:tasklet&gt;
			&lt;batch:listeners&gt;
				&lt;batch:listener ref="itemFailureLoggerListener" /&gt;
			&lt;/batch:listeners&gt;

			&lt;batch:chunk reader="itemReader" writer="pagamentoWriter" commit-interval="1000" /&gt;
		&lt;/batch:tasklet&gt;
	&lt;/batch:step&gt;
&lt;/batch:job&gt;

&lt;bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader"&gt;
	&lt;property name="resource" value="classpath:csvFileJob.csv" /&gt;

	&lt;property name="lineMapper"&gt;
		&lt;bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"&gt;
			&lt;property name="lineTokenizer"&gt;
				&lt;bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"&gt;
					&lt;property name="names" value="depositante,codigo,tipo,data,valor,comentario" /&gt;
					&lt;property name="delimiter" value="," /&gt; &lt;!-- default --&gt;
				&lt;/bean&gt;
			&lt;/property&gt;

			&lt;property name="fieldSetMapper" ref="pagamentoMapper" /&gt;
		&lt;/bean&gt;
	&lt;/property&gt;
&lt;/bean&gt;

</beans>[/code]

public interface PagamentoService {
	public void addPagamento(Pagamento pagamento);
    public void updatePagamento(Pagamento pagamento);
    public void deletePagamento(Pagamento pagamento);
    public Pagamento getPagamentoById(int id);
    public List&lt;Pagamento&gt; getPagamentos();
}
@Transactional
public class PagamentoServiceImpl implements PagamentoService {
	PagamentoDao pagamentoDao;

	@Override
	public void addPagamento(Pagamento pagamento) {
        pagamentoDao.addPagamento(pagamento);
    }
	...

public interface PagamentoDao { public void addPagamento(Pagamento pagamento); public void updatePagamento(Pagamento pagamento); public void deletePagamento(Pagamento pagamento); public Pagamento getPagamentoById(int id); public List&lt;Pagamento&gt; getPagamentos(); }

[code]@Repository
public class PagamentoDaoImpl extends HibernateFatory implements PagamentoDao {

@Override
public void addPagamento(Pagamento contato) {
    getSessionFactory().getCurrentSession().saveOrUpdate(contato);
}
...[/code]

[code]public class HibernateFatory {

SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {
	return sessionFactory;
}

public void setSessionFactory(SessionFactory sessionFactory) {
	this.sessionFactory = sessionFactory;
}

}[/code]

Log…

04.08.2012 13:23:26 INFO (AbstractApplicationContext.java:411) - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ca470: display name [org.springframework.context.support.ClassPathXmlApplicationContext@ca470]; startup date [Sat Aug 04 13:23:26 BRT 2012]; root of context hierarchy 04.08.2012 13:23:26 INFO (XmlBeanDefinitionReader.java:323) - Loading XML bean definitions from class path resource [csvFileJob.xml] 04.08.2012 13:23:29 INFO (XmlBeanDefinitionReader.java:323) - Loading XML bean definitions from class path resource [applicationContext.xml] 04.08.2012 13:23:31 INFO (DefaultListableBeanFactory.java:467) - Overriding bean definition for bean 'read': replacing [Generic bean: class [org.springframework.batch.core.job.flow.support.SimpleFlow]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] with [Generic bean: class [org.springframework.batch.core.configuration.xml.JobParserJobFactoryBean]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] 04.08.2012 13:23:31 INFO (AbstractApplicationContext.java:426) - Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@ca470]: org.springframework.beans.factory.support.DefaultListableBeanFactory@15dc37d 04.08.2012 13:23:31 INFO (PropertiesLoaderSupport.java:178) - Loading properties file from file [/media/hd2/workspace-sts/SpringBatchACF/target/classes/log4j.properties] 04.08.2012 13:23:31 INFO (PropertiesLoaderSupport.java:178) - Loading properties file from file [/media/hd2/workspace-sts/SpringBatchACF/target/classes/data-access.properties] 04.08.2012 13:23:31 INFO (DefaultListableBeanFactory.java:414) - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@15dc37d: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,pagamentoWriter,pagamentoMapper,itemFailureLoggerListener,appJobExecutionListener,pagamentoDaoImpl,PagamentoServiceImpl,PagamentoDao,DataSource1,SessionFactory,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,txManager,org.springframework.batch.core.scope.internalStepScope,org.springframework.beans.factory.config.CustomEditorConfigurer,org.springframework.batch.core.configuration.xml.CoreNamespacePostProcessor,step1,read,itemReader]; root of factory hierarchy 04.08.2012 13:23:31 INFO (DriverManagerDataSource.java:155) - Loaded JDBC driver: com.mysql.jdbc.Driver 04.08.2012 13:23:31 INFO (DefaultSingletonBeanRegistry.java:421) - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@15dc37d: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,pagamentoWriter,pagamentoMapper,itemFailureLoggerListener,appJobExecutionListener,pagamentoDaoImpl,PagamentoServiceImpl,PagamentoDao,DataSource1,SessionFactory,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,txManager,org.springframework.batch.core.scope.internalStepScope,org.springframework.beans.factory.config.CustomEditorConfigurer,org.springframework.batch.core.configuration.xml.CoreNamespacePostProcessor,step1,read,itemReader]; root of factory hierarchy 04.08.2012 13:23:31 ERROR (CommandLineJobRunner.java:297) - Job Terminated in error: Error creating bean with name 'PagamentoServiceImpl' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'PagamentoDao' while setting bean property 'pagamentoDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'PagamentoDao' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'SessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'PagamentoServiceImpl' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'PagamentoDao' while setting bean property 'pagamentoDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'PagamentoDao' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'SessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) at org.springframework.context.support.ClassPathXmlApplicationContext.&lt;init&gt;(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.&lt;init&gt;(ClassPathXmlApplicationContext.java:83) at org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:256) at org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:448) at br.com.batch.Main.main(Main.java:8) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'PagamentoDao' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'SessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) ... 20 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) ... 33 more Caused by: java.lang.reflect.MalformedParameterizedTypeException at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:42) at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.&lt;init&gt;(ParameterizedTypeImpl.java:35) at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:77) at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:86) at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:122) at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31) at sun.reflect.generics.repository.ClassRepository.getSuperInterfaces(ClassRepository.java:82) at java.lang.Class.getGenericInterfaces(Class.java:794) at org.springframework.core.GenericTypeResolver.getTypeVariableMap(GenericTypeResolver.java:151) at org.springframework.core.GenericTypeResolver.resolveParameterType(GenericTypeResolver.java:81) at org.springframework.beans.GenericTypeAwarePropertyDescriptor.getWriteMethodParameter(GenericTypeAwarePropertyDescriptor.java:109) at org.springframework.beans.GenericTypeAwarePropertyDescriptor.getPropertyType(GenericTypeAwarePropertyDescriptor.java:91) at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138) at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:386) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1289) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1250) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) ... 42 more