Olá Lucas, estou tendo o mesmo problema, porém não tenho o CriadorDeSessionFactory e nem está configurado context-param br.com.caelum.vraptor.packages no web.xml.
Segue erro:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘hibernateTransactionInterceptor’: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.Session]: : Error creating bean with name ‘br.com.caelum.vraptor.plugin.hibernate4.SessionCreator’: FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘sessionCreator’: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.SessionFactory]: : No unique bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2: [sessionFactory, br.com.caelum.vraptor.plugin.hibernate4.SessionFactoryCreator]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2: [sessionFactory, br.com.caelum.vraptor.plugin.hibernate4.SessionFactoryCreator]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘br.com.caelum.vraptor.plugin.hibernate4.SessionCreator’: FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘sessionCreator’: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.SessionFactory]: : No unique bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2: [sessionFactory, br.com.caelum.vraptor.plugin.hibernate4.SessionFactoryCreator]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2: [sessionFactory, br.com.caelum.vraptor.plugin.hibernate4.SessionFactoryCreator]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:332)
at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:328)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:274)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1106)
at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:86)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.environment.EnvironmentInterceptor.intercept(EnvironmentInterceptor.java:37)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
E o meu web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<display-name>teste</display-name>
<filter>
<filter-name>vraptor</filter-name>
<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
</filter>
<filter-mapping>
<filter-name>vraptor</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>messages</param-value>
</context-param>
E o meu applicationContext:
<?xml version="1.0" encoding="UTF-8"?>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
<property name="dataSource" ref="defaultDataSource" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="defaultDataSource" />
<property name="packagesToScan" value="com.teste.*.model.domain"/>
<property name="configLocation">
<value>classpath:/hibernate.cfg.xml</value>
</property>
</bean>
<bean id="hibernateSupport" class="com.teste.framework.dao.DaoSupport">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="baseDAO" class="com.teste.framework.dao.BaseDAO" abstract="true"></bean>
<bean id="defaultDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://localhost/teste</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
<property name="acquireIncrement">
<value>3</value>
</property>
<property name="minPoolSize">
<value>1</value>
</property>
<property name="maxPoolSize">
<value>15</value>
</property>
<property name="maxStatementsPerConnection">
<value>100</value>
</property>
<property name="numHelperThreads">
<value>20</value>
</property>
</bean>
<context:component-scan base-package="com.teste.*.model.dao">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
<context:component-scan base-package="com.teste.*.model.service">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
Minha classe com.teste.framework.dao.DaoSupport:
package com.teste.framework.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class DaoSupport {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* Abrindo acesso ao session no mesmo pacote, nao somente subclasses.
*
* Get a Hibernate Session, either from the current transaction or a new
* one. The latter is only allowed if the "allowCreate" setting of this
* bean's HibernateTemplate is true.
*
*
* @return the Hibernate Session
*/
public Session getHibernateSession() {
return getSessionFactory().getCurrentSession();
}
}
E minha classe com.teste.framework.dao.BaseDAO:
package com.teste.framework.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import com.teste.framework.domain.BaseVO;
@Repository
public abstract class BaseDAO {
@Autowired
protected DaoSupport hibernateSupport;
protected Log log = LogFactory.getLog(this.getClass());
private Class<T> type = null;
/**
* Remove o VO do session cache
*
* @param vo
*/
public void evict(BaseVO vo) {
this.getSession().evict(vo);
}
/**
* Delete the given persistent instance.
*
* @param vo
* @throws HibernateException
*/
public void delete(T vo) {
getSession().delete(vo);
}
/**
* Delete the given persistent instances.
*
* @param entities
* @throws DataAccessException
* @see org.springframework.orm.hibernate4.HibernateTemplate#delete(java.util.Collection)
*/
public void delete(Collection<T> entities) {
for (T t : entities) {
this.delete(t);
}
}
/**
* Persist the given transient instance.
*
*
* @param vo
* @return a chave nova
* @throws HibernateException
*/
public Serializable insert(final T vo) {
return getSession().save(vo);
}
/**
* @param vo
* @return uma instancia conectada da entidade persistida
*/
@SuppressWarnings("unchecked")
public T update(T vo) {
return (T) getSession().merge(vo);
}
public T findById(Serializable id) {
return findById(getParameterizedBaseDomainClass(), id);
}
public void load(T entity, Serializable id) {
getSession().load(entity, id);
}
@SuppressWarnings("unchecked")
public T findById(Class<? extends T> clazz, Serializable id) {
return (T) getSession().get(clazz, id);
}
public void refresh(T entity) {
getSession().refresh(entity);
}
public void flush() {
getSession().flush();
}
public void clear() {
getSession().clear();
}
public Object merge(Object entity) {
return getSession().merge(entity);
}
public void persist(Object entity) {
getSession().persist(entity);
}
/**
* Return all persistent instances of the given entity class. Note: Use
* queries or criteria for retrieving a specific subset.
*
* @return colecao de tipo t
*/
public List<T> findAll() {
return findAll(getParameterizedBaseDomainClass());
}
@SuppressWarnings("unchecked")
public List<T> findAll(Class<? extends T> clazz) {
Criteria criteria = getSession().createCriteria(clazz);
return criteria.list();
}
/**
* @return o tipo VO deste DAO
*/
@SuppressWarnings("unchecked")
Class<T> getParameterizedBaseDomainClass() {
return (this.type == null) ? this.type = (Class<T>) BaseDAO
.getParameterizedClass(this.getClass()) : this.type;
}
public static Class<?> getParameterizedClass(Class<?> c) {
return getParameterizedClass(c, 1);
}
@SuppressWarnings("unchecked")
public static Class<?> getParameterizedClass(Class<?> c, int index) {
Type[] types = getParameterizedTypes((Class<ParameterizedType>) c);
return index <= types.length ? (Class<?>) types[index - 1] : null;
}
public static Type[] getParameterizedTypes(Class<ParameterizedType> c) {
Type superClass = c.getGenericSuperclass();
if (!(superClass instanceof ParameterizedType))
superClass = c.getSuperclass().getGenericSuperclass();
return (superClass instanceof ParameterizedType) ? ((ParameterizedType) superClass)
.getActualTypeArguments()
: new Type[] {};
}
/**
* Return the HibernateTemplate for this DAO, pre-initialized with the
* SessionFactory or set explicitly.
*
* @param hibernateSupport
* the this.hibernateSupport to set
*/
public void setHibernateSupport(DaoSupport hibernateSupport) {
this.hibernateSupport = hibernateSupport;
}
public Session getSession() {
return this.hibernateSupport.getHibernateSession();
}
}
Todas as outras DAO’s estenderão a baseDAO.
Poderia me ajudar?