Vraptor 3 - Hibernate 4

Estou tentando configurar o hibernate 4 com vraptor 3 - já adicionei o plug ao projeto, mas estou com o seguinte 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.gov.to.al.site.infra.CriadorDeSession’: FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘criadorDeSession’: 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 3: [br.gov.to.al.site.infra.CriadorDeSessionFactory, br.com.caelum.vraptor.util.hibernate.SessionFactoryCreator, 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 3: [br.gov.to.al.site.infra.CriadorDeSessionFactory, br.com.caelum.vraptor.util.hibernate.SessionFactoryCreator, br.com.caelum.vraptor.plugin.hibernate4.SessionFactoryCreator]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘br.gov.to.al.site.infra.CriadorDeSession’: FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘criadorDeSession’: 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 3: [br.gov.to.al.site.infra.CriadorDeSessionFactory, br.com.caelum.vraptor.util.hibernate.SessionFactoryCreator, 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 3: [br.gov.to.al.site.infra.CriadorDeSessionFactory, br.com.caelum.vraptor.util.hibernate.SessionFactoryCreator, br.com.caelum.vraptor.plugin.hibernate4.SessionFactoryCreator]
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:263)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:86)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

A baixo meu WEB XML

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


site2012

index.jsp



br.com.caelum.vraptor.packages
br.com.caelum.vraptor.util.hibernate

<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>


<jsp-config>
	<jsp-property-group>
		<description>site2012</description>
		<display-name>site2012</display-name>
		<url-pattern>*.jsp</url-pattern>
		<include-prelude>/WEB-INF/jsp/topo.jspf</include-prelude>
		<include-coda>/WEB-INF/jsp/base.jspf</include-coda>
	</jsp-property-group>
</jsp-config>

o erro é que tem 3 caras criando o SessionFactory…

um deles é o plugin do hibernate4, que é o certo

o outro é o plugin do hibernate 3, remova o context-param br.com.caelum.vraptor.packages do web.xml

e o outro é o seu CriadorDeSessionFactory, só remover também…

mesma coisa pra Session.

Lucas muito obrigado por sua dica rpz…valeu mesmo…resolveu o problema

[quote=Lucas Cavalcanti]o erro é que tem 3 caras criando o SessionFactory…

um deles é o plugin do hibernate4, que é o certo

o outro é o plugin do hibernate 3, remova o context-param br.com.caelum.vraptor.packages do web.xml

e o outro é o seu CriadorDeSessionFactory, só remover também…

mesma coisa pra Session.[/quote]

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?

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];

vc deve estar com o jar do plugin do hibernate4 no classpath… ele se auto-registra, então é só tirá-lo do classpath se vc não for usar o plugin.

Estou com o mesmo problema, se alguém souber como me ajudar.

Meu projeto estava funcionando corretamente, mas quero colocá-lo no openshift,
aí pra isso preciso mudar do Hibernate 3 para o Hibernate 4

Para ter a sessão do Hibernate, estava utilizando o CustomProvider

<context-param>
       <param-name>br.com.caelum.vraptor.provider</param-name>
       <param-value>br.com.caelum.vraptor.util.hibernate.HibernateCustomProvider</param-value>
</context-param>

Esse CustomProvider funciona com o Hibernate 4?

No meu pom tem as seguintes dependências referentes ao Hibernate

<dependency>
	<groupId>br.com.caelum.vraptor</groupId>
	<artifactId>vraptor-plugin-hibernate4</artifactId>
	<version>1.0.0</version>
	<exclusions>
		<exclusion>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-annotations</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>4.3.0.Final</version>
</dependency>

Estou recebendo o seguinte erro:
No unique bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2: [br.com.caelum.vraptor.plugin.hibernate4.SessionFactoryCreator, br.com.caelum.vraptor.util.hibernate.SessionFactoryCreator]

Pelo q vi a session está sendo criada pelo provider do VRaptor e pelo Hibernate 4, mas se retiro o provider do vraptor o projeto não funciona.

Tem como utilizar o CustomProvider do VRaptor e desabilizar a criação da session pelo Hibernate 4?

Não sei se expliquei muito bem, rs

vc deveria tirar a configuração do provider. Só isso já deve funcionar.

Retirei a configuração do provider e tb não funcionou.

Mas aí baixei os fontes do vraptor-plugin-hibernate4 para a minha máquina, e no pom do meu projeto setei para o plugin da minha máquina, e funcionou, sem ter alterado nd.

Isso no tomcat

Nos jboss 7, ainda n consegui funcionar

Se tento subir sem alterar nd, aparece o erro:

Service jboss-as has a circular dependency

Isso pq no jboss já existe o hibernate 4

no jboss 7 vc não pode ter o hibernate na lib da aplicação… só remover que já funciona.

Obrigado pela ajuda Lucas, mas ainda estou com alguma dificuldade

Qual a melhor forma de retirar essa dependência?
Tentei com o exclude, mas eu preciso da dependência para compilar.

Tentei alterar o pom do plugin tb, colocando o escopo do hibernate como provided mas tb n deu certo

O q vc recomenda fazer?

Meu pom está da seguinte maneira:

<groupId>br.com.caelum.vraptor</groupId>
	<artifactId>vraptor-plugin-hibernate4</artifactId>
	<version>1.0.2-SNAPSHOT</version>
	<exclusions>
		<exclusion>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-annotations</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-core</artifactId>
	<version>4.1.4.Final</version>
	<scope>provided</scope>
</dependency>

<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>4.3.0.Final</version>
	<scope>provided</scope>
</dependency>

E estou recebendo o erro:

15:16:40,721 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/loja]] (MSC service thread 1-4) Exception starting filter vraptor: java.lang.NoClassDefFoundError: org/hibernate/criterion/Criterion
	at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_33]
	at java.lang.Class.forName(Class.java:169) [rt.jar:1.6.0_33]
	at br.com.caelum.vraptor.scan.DynamicWebAppBootstrap.configure(DynamicWebAppBootstrap.java:45) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:84) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:108) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:102) [vraptor-3.4.1.jar:]
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:447) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3269) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3865) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_33]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_33]
	at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_33]
Caused by: java.lang.ClassNotFoundException: org.hibernate.criterion.Criterion from [Module "deployment.loja.war:main" from Service Module Loader]
	at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
	at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
	... 15 more

Não entendi o pq de estar dando ClassNotFoundException: org.hibernate.criterion.Criterion, olhei nos módulos do jboss 7, e esta class está presente lá

vc tá gerando o war com o maven? senão a configuração de provided não faz efeito…

vc precisa gerar o war, ou fazer o deploy no servidor via maven.

Realmente estava faltando fazer o deploy com o maven, só estava gerando pelo maven.

Ao fazer o deploy tive o seguinte erro

16:25:33,978 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/loja]] (MSC service thread 1-2) Exception starting filter vraptor: br.com.caelum.vraptor.scan.ScannerException: Could not scan base packages
	at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scanBasePackages(ScannotationComponentScanner.java:88) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scan(ScannotationComponentScanner.java:56) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.scan.WebAppBootstrapFactory.scannerFor(WebAppBootstrapFactory.java:81) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.scan.WebAppBootstrapFactory.create(WebAppBootstrapFactory.java:51) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:83) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:108) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:102) [vraptor-3.4.1.jar:]
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:447) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3269) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3865) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_33]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_33]
	at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_33]
Caused by: java.io.FileNotFoundException: F:\servidores\jboss-as-7.1.1.Final\bin\content\loja.war\WEB-INF\lib\vraptor-environment-1.0.1.jar (O sistema não pode encontrar o caminho especificado)
	at java.io.FileInputStream.open(Native Method) [rt.jar:1.6.0_33]
	at java.io.FileInputStream.<init>(FileInputStream.java:120) [rt.jar:1.6.0_33]
	at java.io.FileInputStream.<init>(FileInputStream.java:79) [rt.jar:1.6.0_33]
	at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) [rt.jar:1.6.0_33]
	at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) [rt.jar:1.6.0_33]
	at java.net.URL.openStream(URL.java:1010) [rt.jar:1.6.0_33]
	at org.scannotation.archiveiterator.FileProtocolIteratorFactory.create(FileProtocolIteratorFactory.java:23) [scannotation-1.0.2.jar:]
	at org.scannotation.archiveiterator.IteratorFactory.create(IteratorFactory.java:40) [scannotation-1.0.2.jar:]
	at org.scannotation.AnnotationDB.scanArchives(AnnotationDB.java:291) [scannotation-1.0.2.jar:]
	at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scanPackage(ScannotationComponentScanner.java:106) [vraptor-3.4.1.jar:]
	at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scanBasePackages(ScannotationComponentScanner.java:83) [vraptor-3.4.1.jar:]
	... 15 more

vc colocou o pacote do vraptor-environment no web.xml?