VRaptor 3: Problema com JPA

Boa tarde.

Estou tentando utilizar o suporte incluído pelo VRaptor á utilização de JPA, porém estou me deparando com a seguinte exceção:

br.com.caelum.vraptor.ioc.ComponentRegistrationException: Unable to determine target type, while trying to register the ComponentFactory: class teste.EMFactoryCreator. The class implementing ComponentFactory<T> must define the generic argument. Eg.: public class MyFactory implements ComponentFactory<MyComponent> { ... } at br.com.caelum.vraptor.ioc.ComponentFactoryIntrospector.targetTypeForComponentFactory(ComponentFactoryIntrospector.java:27) at br.com.caelum.vraptor.ioc.spring.ComponentFactoryBean.<init>(ComponentFactoryBean.java:22) at br.com.caelum.vraptor.ioc.spring.ComponentScanner.postProcessBeanDefinition(ComponentScanner.java:68) at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:205) at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.scan(ClassPathBeanDefinitionScanner.java:180) at br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.loadBeanDefinitions(VRaptorApplicationContext.java:89) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353) at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.start(SpringBasedContainer.java:61) at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:58) at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:115) at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:108) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:583) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

Estou utilizando o Tomcat com o Hibernate como provider JPA. Utilizei a idéia sugerida na documentação para o Hibernate, de criar 2 classe extentendo EntityManagerCreator e EntityManagerFactoryCreator. Ambas geram exceção no início do Tomcat, impedindo a carga correta do contexto.

O problema até onde pude enxergar está associado diretamente ao VRaptor. Alguém já passou por isso ou tem alguma sugestão?

T+

Só complementando, fiz um teste e copiei os fontes dos dois Componentes para dentro do meu projeto e deixou de dar essa exceção.

T+

Ola Duron!

Quando voce estende, precisa usar o IMPLEMENTS novamente, apesar disso nao ser necessario pro java.

Ele nao este iterando entre as classes maes pra verificar isso.

Cadastrei esse improvement aqui:

Resolveu aqui, muito obrigado! Demorei a responder pois tive alguns problema para configurar o acesso ao meu DataSource através do JPA

Essa maneira de utilizar as classes base do VRaptor continuará disponível na versão final? Acho mais intuitivo do que a forma que estende o provider do VRaptor, além de não ficar atrelado a uma implementação específica.

T+

Oi Duron!

Estara disponivel sim!

Inclusive acabo de comitar um patch para que nao seja necessario redeclarar o “implements ComponentFactory” ao estender o componente:

Talvez o melhor de tudo fosse nem precisar configurar esses componentes, que eles viessem habilitados por default, e se o usuario criar um outro, daria prioridade pro do usuario. Que acham?