Transação Spring

Boa Tarde.

Estou tentando salvar um objeto, mas ao tentar salvar a seguinte exception é gerada

save is not valid without active transaction

Como faço pro spring gerar uma nova transação ?

Na camada de serviço já usei a annotation @Transactional

@Transactional(readOnly=false)
public class EstadoRNImp implements EstadoRN {
– metodos
}

Ola amigo

por acaso no seu applicationContext voce tem as transações habilitadas assim

<!--Instrui o Spring a realizar gerenciamento transacional declarativo automático nas classes anotadas --> <tx:annotation-driven transaction-manager="transactionManager" />

Abraços

Sim eu tenho.

Pesquisei um pouco sobre o erro antes de abrir esse topico.

Li que era porque eu tinha no hibernate.cfg.xml

a property hibernate.current_session_context_class setada com o value thread

retirei essa linha mais dai o servidor não subiu mais, e a causa do erro era justamente a fala dessa linha.

Segue o applicationContext.xml e o hibernate.cfg.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans 	xmlns="http://www.springframework.org/schema/beans" 
       	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       	xmlns:p="http://www.springframework.org/schema/p" 
       	xmlns:tx="http://www.springframework.org/schema/tx"
       	xmlns:context="http://www.springframework.org/schema/context"
       	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">
	
	
	<context:property-placeholder location="/WEB-INF/spring/spring.properties" />
	<context:annotation-config/> 
	<context:component-scan base-package="classe.projeto"/>
   
    <!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->
    <!-- See http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/hibernate3/annotation/AnnotationSessionFactoryBean.html --> 							
	<!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/SessionFactory.html -->
	<!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/Session.html -->
	<!-- Declare a datasource that has pooling capabilities-->	 
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
				destroy-method="close"
				p:driverClass="${app.jdbc.driverClassName}"
				p:jdbcUrl="${app.jdbc.url}"
				p:user="${app.jdbc.username}"
				p:password="${app.jdbc.password}"
				p:acquireIncrement="5"
				p:idleConnectionTestPeriod="60"
				p:maxPoolSize="100"
				p:maxStatements="50"
				p:minPoolSize="10" />

	<bean id="sessionFactory" 
		  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
		  p:dataSource-ref="dataSource"
		  p:configLocation="${hibernate.config}"/>
		  
	<!-- Declare a transaction manager-->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory" />
	
	<!-- Enable annotation style of managing transactions -->
	<tx:annotation-driven transaction-manager="transactionManager" />	
  	
</beans>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	
	<session-factory>
	
		<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
		<property name="current_session_context_class">thread</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="hibernate.show_sql">true</property>
		<property name="format_sql">true</property>
		
		
		<mapping class="classe.projeto.usuario.Usuario"/>
		<mapping class="classe.projeto.estado.Estado"/>
		
				
	</session-factory>
	
</hibernate-configuration>

Amigo tenta coloca o codigo abaixo no seu applicationContext referenciando o seu hibernateTransactionManager

<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> </bean>

Tente usar essa anotação em seu método: @Transactional(TransactionPropagationType.REQUIRED)

romarcio
Já coloquei a @Transactional(TransactionPropagationType.REQUIRED)
na classe e no método, não funcionou…

DarthCego
Pesquisei tbm esse post

e fiz tbm o que vc falou agora, mas ainda nada.

Amigo achei esse post procurando pelo seu erro

http://forum.springsource.org/archive/index.php/t-48650.html

Basicamente ele diz pra voce remover a propriedade

do seu hibernate config ve se funciona

Abraços

sua camada de serviço está anotada com @Service certo?

o meu applicationContext está bem parecido com o seu e funciona, a diferença é que configuro o hibernate nele também, vou postar para referencia.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-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/tx
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

	<!-- Activates various annotations to be detected in bean classes -->
	<context:annotation-config />

	<!-- Scans the classpath for annotated components that will be auto-registered 
		as Spring beans. For example @Controller and @Service. Make sure to set the 
		correct base-package -->
	<context:component-scan base-package="br.com.domain" />


	<bean id="pooledDataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost/banco" />
		<property name="username" value="user" />
		<property name="password" value="123" />
	</bean>

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
		destroy-method="destroy">
		<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
		<property name="dataSource" ref="pooledDataSource" />
		<property name="packagesToScan" value="br.com.dominio" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.id.new_generator_mappings">true</prop>
			</props>
		</property>
		

	</bean>

	<tx:annotation-driven />

	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
</beans>

abrasss

DarthCego
Eu tinha encontrado aquele post tbm, mas como falei antes, ao retirar aquela propriedade do hibernate.cfg.xml o server não sobe mais, e o erro diz que tenho que ter aquela propriedade setada…

renanreismartins
meu service é esse, acredito estar correto.


@Service("estadoRN")
public class EstadoRNImp implements EstadoRN {

	@Autowired
	private EstadoDAO estadoDAO;
	
	public void Salvar(Estado estado) throws RNException{
		try {
			this.estadoDAO.Salvar(estado);
		} catch (DAOException dao) {
			throw new RNException(dao.getMessage());
		}
	}
	
	public void Excluir(Estado estado) throws RNException{
		try {
			this.estadoDAO.Excluir(estado);
		} catch (DAOException dao) {
			throw new RNException(dao.getMessage());
		}
	}
	
	public Integer TotalRegistros(){
		return this.estadoDAO.TotalRegistros();
	}
	
	public Estado Obter (Estado estado){
		return this.estadoDAO.Obter(estado);
	}
	
	public List<Estado> Pesquisar(Estado estado, String campoOrdenacao, String ordenacao, Integer pagina,  Integer limit){
		return this.estadoDAO.Pesquisar(estado, campoOrdenacao, ordenacao, pagina, limit);
	}
	
}

sem o @Transactional ?

abrasss

pois eh, já coloquei o @Transactional setado com @Transactional(readOnly=false) e sem nada, apenas @Transactional
e não funcionou,

Pode ter algo a ver com o JSF, pois utilizou, JSF, Spring e Hibernate.
e gerencio os bean com o JSF, não com o spring. ?

por exemplo


@ManagedBean(name="EstadoListagemBean")
@ViewScoped
public class EstadoListagemBean{

}

Pessoal, como disseram eu tirei a linha

<property name="current_session_context_class">thread</property>

mas dai a seguinte exception é gerada, tens alguma idea do motivo ???


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'estadoDAO' defined in file [D:\ProjetoJavaWEB\wtpwebapps\Projeto\WEB-INF\classes\classe\Projeto\estado\EstadoDAOHibernate.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [classe.Projeto.estado.EstadoDAOHibernate]: Constructor threw exception; nested exception is org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) ~[spring-context-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) ~[spring-context-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) ~[spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) ~[spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) [catalina.jar:7.0.16]
	at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) [catalina.jar:7.0.16]
	at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) [catalina.jar:7.0.16]
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) [na:1.6.0_29]
	at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.6.0_29]
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [na:1.6.0_29]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.6.0_29]
	at java.lang.Thread.run(Unknown Source) [na:1.6.0_29]
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [classe.Projeto.estado.EstadoDAOHibernate]: Constructor threw exception; nested exception is org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:108) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	... 22 common frames omitted
Caused by: org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
	at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63) ~[spring-orm-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687) ~[hibernate3.jar:3.6.5.Final]
	at classe.Projeto.estado.EstadoDAOHibernate.setSession(EstadoDAOHibernate.java:33) ~[EstadoDAOHibernate.class:na]
	at classe.Projeto.estado.EstadoDAOHibernate.<init>(EstadoDAOHibernate.java:29) ~[EstadoDAOHibernate.class:na]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.6.0_29]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.6.0_29]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.6.0_29]
	at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[na:1.6.0_29]
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) ~[spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
	... 24 common frames omitted

Pessoal, alguém tem ideia de como posso resolver isso ?

poste seu dao por favor

Segue.

EstadoDAOHibernate

package classe.projeto.estado;

@Repository("estadoDAO")
public class EstadoDAOHibernate implements EstadoDAO {
	
	private SessionFactory 	factory;
	private Session			session;
	private String 			filtroQuery; 

	@Autowired
	public EstadoDAOHibernate(SessionFactory factory) {
		this.factory = factory;
		this.setSession();
	}
	
	private void setSession() {
		this.session 	=	factory.getCurrentSession();
	}
	
	private void setFiltroQuery(Estado estado){
		this.filtroQuery = FiltroQuery.FiltroQuery(estado);
	}
	
	@Override
	@Transactional
	public void Salvar(Estado estado) throws DAOException {
		
		if (estado.getEstadoID() == null ){
			try {
				this.session.save(estado);
			} catch (Exception e) {
				System.out.println(e.getMessage());
				System.out.println(e.getCause());
				throw new DAOException(GlossarioMensagens.getInstance().getMSG04());
			}
		}else{
			try {
				this.session.update(estado);
			} catch (Exception e) {
				throw new DAOException(GlossarioMensagens.getInstance().getMSG05());
			}
		}
	}

	@Override
	public void Excluir(Estado estado) throws DAOException{
		
		try {
			this.session.delete(estado);
		} catch (Exception e) {
			throw new DAOException(GlossarioMensagens.getInstance().getMSG06());
		}
			
	}
	
	@SuppressWarnings("deprecation")
	@Override
	public Integer TotalRegistros() {
		String sql			   	= 	"SELECT COUNT(*) AS totalRegistros FROM vwlistaestado " ;
		Query consulta	        =	this.session.createSQLQuery(sql).addScalar("totalRegistros", Hibernate.INTEGER);
		Integer totalRegistros  =   (Integer) consulta.uniqueResult();
		return totalRegistros;
	}
	
	@Override
	public Estado Obter(Estado estado) {
		this.setFiltroQuery(estado);
		String sql			   	= 	"SELECT * FROM vwlistaestado " + this.filtroQuery ;
		Query consulta	        =	this.session.createSQLQuery(sql).addEntity(Estado.class);
		return (Estado)			consulta.uniqueResult();		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Estado> Pesquisar(Estado estado, String campoOrdenacao, String ordenacao, Integer pagina,  Integer limit) {
		
		this.setFiltroQuery(estado);
		
		String sql			   		= 	" SELECT * FROM vwlistaestado " + this.filtroQuery;
		sql							=	ValidaOrdenacaoLimit.ValidaOrdenacaoLimit(sql, campoOrdenacao, ordenacao, pagina, limit);
		Query consulta	        	=	this.session.createSQLQuery(sql).addEntity(Estado.class);
		List<Estado> listaEstado  	=	consulta.list();
		return listaEstado;		
	}

}

EstadoRNImp


package classe.projeto.estado;

@Service("estadoRN")
@Transactional
public class EstadoRNImp implements EstadoRN {

	@Autowired
	private EstadoDAO estadoDAO;
	
	public void Salvar(Estado estado) throws RNException{
		try {
			this.estadoDAO.Salvar(estado);
		} catch (DAOException dao) {
			throw new RNException(dao.getMessage());
		}
	}
	
	public void Excluir(Estado estado) throws RNException{
		try {
			this.estadoDAO.Excluir(estado);
		} catch (DAOException dao) {
			throw new RNException(dao.getMessage());
		}
	}
	
	public Integer TotalRegistros(){
		return this.estadoDAO.TotalRegistros();
	}
	
	public Estado Obter (Estado estado){
		return this.estadoDAO.Obter(estado);
	}
	
	public List<Estado> Pesquisar(Estado estado, String campoOrdenacao, String ordenacao, Integer pagina,  Integer limit){
		return this.estadoDAO.Pesquisar(estado, campoOrdenacao, ordenacao, pagina, limit);
	}
	
}

EstadoListagemBean


package classe.projeto.bean;


@ManagedBean(name="EstadoListagemBean")
@ViewScoped
public class EstadoListagemBean{
	
	private Estado estado 			= 	new Estado();
	private Estado[] estadoSelecionados;
	private LazyDataModel<Estado> lazyModel;
	 
	@ManagedProperty(name="estadoRN", value="#{estadoRN}")
	private EstadoRN estadoRN;
	
	public void setEstadoRN(EstadoRN estadoRN) {
		this.estadoRN = estadoRN;
	}
	
	private void CarregaLazyDataModel() {  
		
		this.lazyModel 			= new LazyDataModel<Estado>() {

			private static final long serialVersionUID = 1829143374090645173L;

			@Override
			public List<Estado> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {
				List<Estado> listaEstado 	= 	new ArrayList<Estado>();
				return Pesquisar(listaEstado, sortField, sortOrder, first, pageSize);
			}
		};
		
		lazyModel.setRowCount(estadoRN.TotalRegistros());
		
	} 
	
	private List<Estado> Pesquisar(List<Estado> listEstado, String campoOrdecacao,boolean ordenacao, int pagina, int limit){
		
		String orderBy 			= 		ordenacao?"ASC":"DESC";
		listEstado				=		estadoRN.Pesquisar(this.estado, campoOrdecacao, orderBy, pagina, limit);
		return listEstado;
		
	}
	
	public LazyDataModel<Estado> getLazyModel() {
		this.CarregaLazyDataModel();
    	return this.lazyModel;
	}
	
	public String Excluir(){
		
		if( estadoSelecionados.length > 0) {
			
			try {
				
				for (Estado estado : estadoSelecionados) {
					estadoRN.Excluir(estado);
		        }
				
				FacesContext context 	= 	FacesContext.getCurrentInstance();
				FacesMessage msg 	 	=	new FacesMessage(GlossarioTexto.getInstance().getSucesso(),GlossarioMensagens.getInstance().getMSG03());
				context.addMessage(null, msg);
			
			} catch (RNException rn) {
				
				FacesContext context 	= 	FacesContext.getCurrentInstance();
				FacesMessage msg 	 	=	new FacesMessage(GlossarioTexto.getInstance().getErro(),rn.getMessage());
				context.addMessage(null, msg);
				
			}
			
		}else{
			
			FacesContext context 	= 	FacesContext.getCurrentInstance();
			FacesMessage msg 	 	=	new FacesMessage(FacesMessage.SEVERITY_WARN,GlossarioTexto.getInstance().getAtencao(),GlossarioMensagens.getInstance().getMSG11());
			context.addMessage(null, msg);
			
		}
	
		return "/gerenciador/content/estado/index";
	}

	public Estado[] getEstadoSelecionados() {
		return estadoSelecionados;
	}

	public void setEstadoSelecionados(Estado[] estadoSelecionados) {
		this.estadoSelecionados = estadoSelecionados;
	}
	
	public Estado getEstado() {
		return estado;
	}
 
	
}

cara que estranho, anota seu dao com @Transactional

abrass

O pior é q já tentei isso.

Bom, não sei se tem haver, mas nos exemplos que pesquisei, o pessoal criava packages diferentes para as @Service e @Repository, eu tenho tudo no mesmo, apenas os meus beans estão na pasta separada.

por exemplo, para o objeto estado eu tenho

a package classe.projeto.estado e as classes

  • Estado
  • EstadoDAO
  • EstadoDAOHibernate
  • EstadoRN
  • EstadoImp

ai o bean fica em uma package separado, e quem gerencia os meus beans é o JSF, por isso nasso a injeção de dependência assim

    @ManagedProperty(name="estadoRN", value="#{estadoRN}")  
    private EstadoRN estadoRN;  
      
    public void setEstadoRN(EstadoRN estadoRN) {  
        this.estadoRN = estadoRN;  
    }

no meu bean eu não tenho a annotation @Controller do Spring.

e se eu mudo o bean e deixo o spring controlá-lo, fazendo a injeção assim


@Autowired
private EstadoRN estadoRN;  

o objeto estadoRN fica null;

[quote]
e se eu mudo o bean e deixo o spring controlá-lo…[/quote]

vc qr dizer colocando o @controller no managedbean?

abrasss

bom eu estou iniciando no desenvolvimento e posso estar falando besteira agora.
mas pelo que entendi nos meus estudos, se você declarar uma bean da seguinte forma, que o controla-rá é o JSF


@ManagedBean(name="EstadoListagemBean")  
@ViewScoped  
public class EstadoListagemBean{ 
       -- metodos
}

mas se o programá-lo assim


@Controller
@Scope("request")
public class EstadoListagemBean{ 
       -- metodos
}

que o controla-rá é o Spring.

pelo que entendi é isso.

e da segunda forma a injeção de dependência não funciona.

está certo, uma ultima observação

no applicationContext vc tem algo tipo:

<context:component-scan base-package="br.com.domain"/>  

seus beans estão dentro deste pacote ou subpacotes ali declarados certo?

se nao for isso, não tenho mais idéias.

abrasss