[RESOLVIDO] Problema com VRaptor: org.springframework.beans.factory.BeanCreationException

7 respostas
R

Externalizei algumas classes em comum entre vários projetos, em um projeto separado.
Após isso, estou recebendo essa exceção do VRaptor. Preciso fazer algum mapeamento adicional?

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.cauirs.nome.infra.CriadorDeSessionFactory': FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError: Lbr/com/cauirs/tipos/Dinheiro; at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:150) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109) at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1387) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:244) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189) at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:820) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:762) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691) ... 64 more Caused by: java.lang.NoClassDefFoundError: Lbr/com/cauirs/tipos/Dinheiro; at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Class.java:2308) at java.lang.Class.getDeclaredFields(Class.java:1760) at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredFieldProperties(JavaXClass.java:102) at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredProperties(JavaXClass.java:126) at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredProperties(JavaXClass.java:121) at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:259) at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:223) at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:686) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3977) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3931) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1368) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1826) at br.com.cauirs.nome.infra.CriadorDeSessionFactory.abrirSessionFactory(CriadorDeSessionFactory.java:35) at br.com.cauirs.nome.infra.CriadorDeSessionFactory.getInstance(CriadorDeSessionFactory.java:47) at br.com.cauirs.nome.infra.CriadorDeSessionFactory.getInstance(CriadorDeSessionFactory.java:1) at br.com.caelum.vraptor.ioc.spring.ComponentFactoryBean.getObject(ComponentFactoryBean.java:43) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:143) ... 73 more Caused by: java.lang.ClassNotFoundException: br.com.cauirs.tipos.Dinheiro at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) ... 91 more

Class CriadorDeSessionFactory

@Component
@ApplicationScoped
public class CriadorDeSessionFactory implements ComponentFactory<SessionFactory>
{

	private Map<Tenant, SessionFactory> conexoes = new HashMap<Tenant, SessionFactory>();
	
	private SessionFactory abrirSessionFactory()
	{
		SessionFactory conexao;
		Configuration configuracao = new Configuration();
		
		String arquivoConfiguracao = new StringBuilder().append("hibernate").append(".cfg.xml").toString();
		configuracao.configure(arquivoConfiguracao); 

		configuracao.addAnnotatedClass(Venda.class); //ERRO OCORRE NESSA LINHA
		
		conexao = configuracao.buildSessionFactory();
		
		return conexao;
	}

	@Override
	public SessionFactory getInstance() 
	{
		SessionFactory conexao = conexoes.get("hibernate");
		
		if( conexao == null )
		{
			conexao = abrirSessionFactory();
		}
		
		return conexao;
	}  
	
}

Classe Venda:

@Entity
@Table(name="venda")
@XStreamAlias("venda")
public class Venda 
{

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long id;
	
	@Embedded
	private Dinheiro valorItens = new Dinheiro();
        .....
}

Observações:
1) O projeto está referenciado no Eclipse, tanto é que consigo usar a classe no código.
2) Se copio a classe Dinheiro para dentro do projeto, funciona.

7 Respostas

G

O padrão JPA diz que somente as classes que estão no seu projeto podem ser usadas na persistência. Ou seja, se está em um jar separado não funciona. Já com o Hibernate puro não sei como isso funciona, mas não creio que o comportamento seja diferente.

Lucas_Cavalcanti

o jar em que está a classe Dinheiro está no WEB-INF/lib ou direto no lib do servidor?

R

garcia-jj

Faz sentido. Legal saber disto.

Lucas Cavalcanti

Havia tentado linkando para um jar externo dentro do outro projeto e também apenas referenciando o projeto. (Para não precisar exportar o jar toda alteração).
Exportei o jar e coloquei dentro da pasta WEB-INF/lib e esse erro não ocorre mais.

Outro detalhe, havia acontecido o erro abaixo com as libs que peguei por padrão no projeto do VRaptor.
Troquei a lib ejb3-persistence.jar pela persistence.jar e o erro desapareceu.

<blockquote>Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1912)

at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)

at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)

at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3977)

at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3931)

at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1368)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1826)

at br.com.cauirs.nome.infra.CriadorDeSessionFactory.abrirSessionFactory(CriadorDeSessionFactory.java:35)

at br.com.cauirs.nome.infra.CriadorDeSessionFactory.getInstance(CriadorDeSessionFactory.java:47)

at br.com.cauirs.nome.infra.CriadorDeSessionFactory.getInstance(CriadorDeSessionFactory.java:1)

at br.com.caelum.vraptor.ioc.spring.ComponentFactoryBean.getObject(ComponentFactoryBean.java:43)

at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:143)

… 73 more</blockquote>

Valeu a força vou continuar os testes aqui. Quando ‘trancar’ de novo venho pedir ajuda :roll:

G
Esse método é o JPA2. Talvez você estivesse com o jar do JPA1.

Esse método é o JPA2. Talvez você estivesse com o jar do JPA1.

R

Eu estava com o Jar ejb3-persistence-1.0.1.GA, tentei também trocar pelo ejb3-persistence-1.0.2.GA.

Lucas_Cavalcanti

1.0.2-GA ainda é JPA1

R

Ok. Então foi isso. Obrigado.

Criado 1 de fevereiro de 2011
Ultima resposta 2 de fev. de 2011
Respostas 7
Participantes 3