[RESOLVIDO]Erro ao criar o EntityManagerFactory (JPA)

7 respostas
B

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

K

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.

M

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

B

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

B

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

B

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?

L

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