[RESOLVIDO] SessionFactory customizada VRaptor 3

Hail!

Utilizo o hibernate num projeto, e surgiu a necessidade de criar uma sessionFactory customizada.
Criei um novo ComponentFactory, mas agora recebo um erro, dizendo que há 2 beans do mesmo tipo:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2:  [br.com.meu.pacote.persistence.helper.SessionFactoryComponentFactory, br.com.caelum.vraptor.util.hibernate.SessionFactoryCreator]

Logicamente isso faz todo sentido, dado que de fato há dois ComponentFactories registrados, o que gera a ambiguidade.

O que eu não sei é se tem como “desabilitar” a factory que vem junto com o VRaptor.

Alguém aí sabe me dizer se isso é possível?
Pq ficar engessado com uma única implementação me quebra as pernas… =/

Basta remover o pacote definido no web.xml.

Easy!

Só remover o parâmetro “br.com.caelum.vraptor.provider” do web.xml:

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

Agora somente o meu “sessionFactoryFactory” (tsc tsc…rs) é registrado! :smiley:
Em contrapartida, tenho que implementar também a factory de session. Nada d+! ;D

Sim, porque o vraptor faz scan por pacote. Ou seja, ou ele usa todas as classes do pacote, ou nada.

O que você pode fazer é, ao invés de remover o pacote do web.xml, é sobrescrever a classe SessionFactoryCreator.

E como se daria esse override?

Minha classe já estava estendendo SessionFactoryCreator:

@Component
@ApplicationScoped
public class SessionFactoryComponentFactory extends SessionFactoryCreator{
	//método getInstance sobrescrito
}

=/

Ao invés de usar um custom provider, funciona assim?

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