[RESOLVIDO]Erro ao criar o EntityManagerFactory (JPA)

7 respostas
bcartaxo

Estou obtendo a seguinte mensagem de erro ao utilizar a JPA com o Hibernate:

18/12/2007 10:45:03 org.hibernate.cfg.annotations.Version <clinit>
INFO: Hibernate Annotations 3.3.0.GA
18/12/2007 10:45:03 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
18/12/2007 10:45:03 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
18/12/2007 10:45:03 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
18/12/2007 10:45:03 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
18/12/2007 10:45:04 org.hibernate.ejb.Version <clinit>
INFO: Hibernate EntityManager 3.3.1.GA
Exception in thread "main" java.lang.NoClassDefFoundError: javassist/bytecode/ClassFile
	at org.hibernate.ejb.packaging.JarVisitor.checkAnnotationMatching(JarVisitor.java:332)
	at org.hibernate.ejb.packaging.JarVisitor.executeJavaElementFilter(JarVisitor.java:298)
	at org.hibernate.ejb.packaging.JarVisitor.addElement(JarVisitor.java:259)
	at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:54)
	at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:62)
	at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:62)
	at org.hibernate.ejb.packaging.ExplodedJarVisitor.doProcessElements(ExplodedJarVisitor.java:45)
	at org.hibernate.ejb.packaging.JarVisitor.getMatchingEntries(JarVisitor.java:241)
	at org.hibernate.ejb.Ejb3Configuration.addMetadataFromVisitor(Ejb3Configuration.java:271)
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:240)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:120)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	at contacts.core.persistence.util.JPAUtil.<clinit>(JPAUtil.java:23)
	at contacts.core.persistence.impl.HSQLDB.configure(HSQLDB.java:26)
	at Test.main(Test.java:10)

Alguém já passou por isso ou sabem oq pode ser?
Já utilizei a busca do GUJ em busca das palavras chave “javassist/bytecode/ClassFile” e não obtive sucesso.
Apelando para o “oráculo” (google) obtive informações que esse erro está ligado com a forma como os bytecodes estão sendo manipulados, ou seja é algo bem “embaixo”, mas n faço ideia do que seja.

Meu persistence.xml se encontra na pasta META-INF dentro da pasta src e está com a seguinte estrutura.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
	<persistence-unit name="contacts">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>

		<class>contacts.core.common.BaseEntity</class>
		<class>contacts.core.contact.api.Contact</class>
		<class>contacts.core.contact.api.Group</class>
		<class>contacts.core.contact.api.Phone</class>

		<properties>
			<property name="hibernate.show_sql" value="true"/>	
			<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />			
			<property name="hibernate.connection.driver_class" value="org.hsql.jdbcDriver" />
			<property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost/contacts" />
			<property name="hibernate.connection.username" value="sa" />
			<property name="hibernate.connection.password" value="" />
		</properties>
	</persistence-unit>
</persistence>

Vale lembrar que essa aplicação é desktop.

Desde já agradeço.

7 Respostas

kaique

Acho que essa frase diz tudo…
Essa classe não existe no seu classpath, e por algum motivo o código que você escreveu ou a(s) API(s) que você usa precisam dessa classe.
Tenta colocá-la no classpath para ver se resolve o problema…

[]'s.

marceloquinta

Você já tentou criar um bean, apontando para o EntityManageFactory?

bcartaxo

marceloquinta:
Você já tentou criar um bean, apontando para o EntityManageFactory?

Meus beans estão nos pacotes indicados no persistence.xml, o erro esta acontencedo quando tento criar a EntitymanagrFactory, segue a linha qu está levantando o erro:

entityManagerFactory = Persistence.createEntityManagerFactory("contacts");
H

kaique:
bcartaxo:

ava.lang.NoClassDefFoundError: javassist/bytecode/ClassFile

Acho que essa frase diz tudo…
Essa classe não existe no seu classpath, e por algum motivo o código que você escreveu ou a(s) API(s) que você usa precisam dessa classe.
Tenta colocá-la no classpath para ver se resolve o problema…

[]'s.

Como foi dito acima, está faltando algum jar na sua aplicação. Liste aqui todos os jar referentes ao hibernate que estão incluidos no seu projeto

bcartaxo

Seque uma imagem em anexo com todas as libs que estão importadas no meu classpath.

bcartaxo

Pesquisei na net e encontrei uma lib chamda javassist baixei e inlcuir no classpath, agora sim td funcionaou, porem eh bem estranho td isso, pq eu ja li sobre JPA em inúeras fontes, e em momento algum cita-se essa lib, nem mesmo na dacumentação do hibernate, pelo menos eu n encontrei em canto algum, só fui atras dela por conta do NoClasDefFoundError q falava de uma classe num pacote javassist. É bem estranho, algum de vcs q trabalham com JPA e HIbernate ja tiveram q incluir tal lib no classpath?

leandros

Que você não tenha encontrado nenhuma referência a essa lib no JPA tudo bem, mas devems lembrar que JPA é apenas uma abstração que os distrubuidores tem que implementar para estarem compatíveis com a especificação.
Distribuidores estou me referindo a Hibernate, Toplink, etc… Dê uma olhada no que eles exigem de bibliotecas para que você possa utilizar essas distribuições de acordo com a especificação.

Criado 18 de dezembro de 2007
Ultima resposta 25 de dez. de 2007
Respostas 7
Participantes 5