Problema migrar spring 2.5 para 3

5 respostas
J

Estou com um problema aqui por motivos de performance vou ter que migrar minha aplicacao de spring 2.5 para 3.
Nao estou mais conseguindo rodar o projeto gera a seguinte excessao.

GRAVE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Bean name 'arquivoDao' is already used in this <beans> element
Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml]

	at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
	at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
	at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:316)
	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.checkNameUniqueness(BeanDefinitionParserDelegate.java:527)
	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:473)
	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:445)
	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.processBeanDefinition(DefaultBeanDefinitionDocumentReader.java:311)
	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:202)
	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:181)
	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:381)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
	at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
	at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

minha classe ArquivoServiceImpl

package service.impl;

import java.io.File;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import dao.ArquivoDao;
import dao.Dao;
import dom.Anuncio;
import dom.Arquivo;
import dom.Banner;
import dom.Institucional;
import dom.InstitucionalMenu;
import dom.Noticia;
import dom.SlideShow;

public class ArquivoServiceImpl implements service.ArquivoService {

	private ArquivoDao dao;
	
	@Override
	public void excluir(Arquivo o) {
		this.dao.excluir(o);
	}

	@Override
	public Arquivo obter(Long id) {
		return (Arquivo) this.dao.obter(id);
	}

	@Override
	public void salvar(Arquivo o) {
		this.dao.salvar(o);
	}

	@Override
	public void setDao(Dao<Arquivo> dao) {
		this.dao = (ArquivoDao)dao;
	}
	
	@Override
	public List<Arquivo> obterPorNot(Noticia id) {
		return this.dao.obterPorNot(id);
	}
	
	@Override
	public List<Arquivo> obterPorAnuncio(Anuncio id) {
		return this.dao.obterPorAnuncio(id);
	}

	@Override
	public Long lastArqId() {
		return this.dao.lastArqId();
	}

	@Override
	public List<Arquivo> obterPorBanner(Banner b) {
		return this.dao.obterPorBanner(b);
	}
	
	@Override
	public List<Arquivo> obterPorSlide(SlideShow b) {
		return this.dao.obterPorSlide(b);
	}

	@Override
	public List<Arquivo> listar() {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public void apagarArquivo(String endereco){
		FacesContext fc = FacesContext.getCurrentInstance();
		ServletContext sc = (ServletContext)fc.getExternalContext().getContext();
		String real = sc.getRealPath("/");
		File file = new File(real + endereco);
		file.delete();
	}

	@Override
	public List<Arquivo> obterPorInst(Institucional institucional) {
		return this.dao.obterPorInst(institucional);
	}

	@Override
	public List<Arquivo> obterPorInst(Long id) {
		return this.dao.obterPorInst(id);
	}

	@Override
	public List<Arquivo> obterPorInst(InstitucionalMenu institucionalMenu) {
		return this.dao.obterPorInst(institucionalMenu);
	}

}

meu applicationContext

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
	<!--CONEXÃO COM BANCO -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName">
			<value>org.postgresql.Driver</value>
		</property>
		<property name="url">
<!--			<value>jdbc:postgresql://10.0.0.212/site</value>-->
	     <value>jdbc:postgresql://localhost:5432/site</value>
		</property>
		<property name="username">
			<value>postgres</value>
		</property>
		<property name="password">
			<value>1</value>
		</property>
	</bean>

	<bean name="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
		<property name="mappingLocations">
			<list>
				<value>classpath:/dom/*.hbm.xml</value>
			</list>
		</property>
	</bean>

	<bean name="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

	<!--Controle transacional -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

	<bean id="txProxyTemplate" abstract="true"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager" ref="transactionManager" />
		<property name="transactionAttributes">
			<props>
				<prop key="obter*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>


	<!--Services e DAO -->

	<bean name="arquivoDao" class="dao.hibernate.ArquivoDaoHibernate">
		<property name="hibernateTemplate">
			<ref bean="hibernateTemplate" />
		</property>
	</bean>

	<bean id="arquivoService" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="target" ref="arquivoServiceTarget" />
	</bean>

	<bean name="arquivoServiceTarget" parent="txProxyTemplate">
		<property name="target">
			<bean class="service.impl.ArquivoServiceImpl">
				<property name="dao" ref="arquivoDao" />
			</bean>
		</property>
	</bean>

5 Respostas

heatcold

vc utilizou anotacoes e o xml para o mesmo bean (arquivoDao) ?
se sim, deixe apenas as anotações (@repository)

com o spring 3 não ha necessidade de configurar boa parte dos beans utilizando o xml, sendo quase tudo feito utilizando apenas anotações

J

Eu nao utilizava anotacoes do spring, preciso colocar apenas @Repository nas classes e retirar as referencias dos beans do xml?

heatcold

sim. de uma olhada na referencia do spring:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/

dao: @Repository
service: @Service
controller: @Controller

etc…

Lembrando que é preciso habilitar a configuração por anotações no applicationContext.xml

<context:annotation-config/>
heatcold

O spring possui uma aplicação, criada para ser utilizada como referencia:
https://src.springframework.org/svn/spring-samples/petclinic/trunk/src/main/java/org/springframework/samples/petclinic/jpa/

navegue pelas outras pastas para ver exemplos de configuração e utilização.

J

Vou tentar aq, desde ja agradeco!

Criado 1 de dezembro de 2011
Ultima resposta 1 de dez. de 2011
Respostas 5
Participantes 2