Spring e Hibernate - Erro ao pegar a transação

Olá pessoal, boa noite.

Estou usando spring-config, spring 2.5 e hibernate 3.0 (sem jpa), e ao executar uma pesquisa do hibernate ele da este erro:

createQuery is not valid without active transaction
org.hibernate.HibernateException: createQuery is not valid without active transaction
	org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:314)
	$Proxy13.createQuery(Unknown Source)
	br.com.estudos.dao.impl.UserDAOImpl.findByLogin(UserDAOImpl.java:17)
	br.com.estudos.service.impl.UserServiceImpl.loadUserByLogin(UserServiceImpl.java:33)
	br.com.estudos.service.impl.UserServiceImpl.loadUserByUsername(UserServiceImpl.java:29)
	org.springframework.security.providers.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:83)
	org.springframework.security.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:121)
	org.springframework.security.providers.ProviderManager.doAuthentication(ProviderManager.java:188)
	org.springframework.security.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:46)
	org.springframework.security.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:82)
	org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:258)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

applicationContext


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://cxf.apache.org/core" xmlns:jaxws="http://cxf.apache.org/jaxws"
  xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
  xsi:schemaLocation="http://www.springframework.org/schema/beans   
                           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
                           http://www.springframework.org/schema/context   
                           http://www.springframework.org/schema/context/spring-context-2.5.xsd  
                           http://www.springframework.org/schema/tx   
                           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
      <value>classpath:/jdbc.properties</value>
    </property>
  </bean>

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${database.driver}" />
    <property name="url" value="${database.url}" />
    <property name="username" value="${database.user}" />
    <property name="password" value="${database.pass}" />
    <property name="initialSize" value="${database.initConnections}" />
    <property name="maxActive" value="${database.maxActive}" />
    <property name="maxIdle" value="${database.maxIdle}" />
    <property name="removeAbandoned" value="${database.removeAbandoned}" />
  </bean>

  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource">
      <ref local="dataSource" />
    </property>
    <property name="annotatedClasses">
      <list>
        <value>br.com.estudos.model.Perfil</value>
        <value>br.com.estudos.model.User</value>
      </list>
    </property>
    <property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect
        </prop>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.format_sql">false</prop>
        <prop key="hibernate.current_session_context_class">thread</prop>
        <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
      </props>
    </property>
    <property name="exposeTransactionAwareSessionFactory" value="false"/>
  </bean>

  <bean id="userDAO" class="br.com.estudos.dao.impl.UserDAOImpl">
    <property name="sessionFactory" ref="sessionFactory" />
  </bean>

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

  <tx:annotation-driven transaction-manager="transactionManager" />
</beans>  

spring-security

<?xml version="1.0" encoding="ISO-8859-1"?>

<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security"
  xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
		http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security-2.0.2.xsd">

  <global-method-security secured-annotations="disabled" />

  <http auto-config="false" access-denied-page="/accessDenied.jsp">
    <intercept-url pattern="/usuarios/**" access="ROLE_USUARIO,ROLE_ADMIN" />
    <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
    <form-login login-page="/login.jsp" login-processing-url="/j_spring_security_check"
      authentication-failure-url="/login.jsp?login_error=true" default-target-url="/index.jsp" />
  </http>

  <beans:bean id="userDetailService" class="br.com.estudos.service.impl.UserServiceImpl">
    <beans:property name="userDAO" ref="userDAO" />
  </beans:bean>

  <authentication-provider user-service-ref="userDetailService">
    <password-encoder hash="md5" />
  </authentication-provider>

  <beans:bean class="br.com.estudos.util.UserLoggerEventListener" />
  <beans:bean class="org.springframework.security.event.authorization.LoggerListener" />
  <beans:bean class="org.springframework.security.event.authentication.LoggerListener" />

</beans:beans>

Como ativar a transação pelo spring?

grato

Boa noite,

A transaçào no Spring é controlada pelos entitymanager ou Session que ele cria e gerencia, de acordo com a injeçào de dependências, acredito que o teu método de dao para essa transaçào não esteja corretamente escrito ou por algum motivo não tenha sido injetdo pelo Spring… vc pode mostrá-los?
As classes e os dao…