Olá, essa minha primeira mensagem para o grupo.
estou estudando uma apostila da k19 - Desenvolvimento Web com JSF2 e JPA2, e em um dos exercicios fiquei parado em um erro que é o seguinte.
Exception in thread “main” java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at javax.persistence.Persistence.findAllProviders(Persistence.java:80)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:49)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
at ListaEditorasComJPA.main(ListaEditorasComJPA.java:12)
segue a classe.
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class ListaEditorasComJPA {
public static void main(String[] args) {
EntityManagerFactory factory =
Persistence.createEntityManagerFactory("livraria");
EntityManager manager = factory.createEntityManager();
Query query = manager.createQuery("SELECT e FROM Editora e");
List<Editora> editoras = query.getResultList();
for(Editora e : editoras) {
System.out.println("EDITORA: " + e.getNome() + " - " + e.getEmail());
}
}
}
quanto ao seu código aconselho a usar as tags code (com code entre “[” e “]”, tem botão para ajudar nisso em cima do textarea da mensagem quando você a posta).
agora quanto ao erro eu desconfio que nem todos os jars de libs que sua aplicação precisa foram adicionadas ao seu classpath, posta ai quais jars você está usando.
uma coisa que você pode fazer , dica para quando tiver essa exceção, NoClassDefFoundError, é pesquisar em qual jar fica a a classe que deu o erro, download do jar e add ele no seu classpath, o www.findjar.com pode te ajudar com isso…
antlr-2.7.6.jar
c3p0-0.9.1.jar
cglib-2.2.jar
commons-collections-3.1.jar
dom4j.jar
dom4j-1.6.1.jar
ejb3-persistence.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
javassist.jar
javassist-3.12.0GA-jar
jta-1.1.jar
slf4j-api-1.6.1.jar
slf4j-log4j12.jar
mysql-connector-java-5.1.18.jar
[quote=tiagostrokes]Olá, essa minha primeira mensagem para o grupo.
estou estudando uma apostila da k19 - Desenvolvimento Web com JSF2 e JPA2, e em um dos exercicios fiquei parado em um erro que é o seguinte.
Exception in thread “main” java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at javax.persistence.Persistence.findAllProviders(Persistence.java:80)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:49)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
at ListaEditorasComJPA.main(ListaEditorasComJPA.java:12)
segue a classe.
[code]
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class ListaEditorasComJPA {
public static void main(String[] args) {
EntityManagerFactory factory =
Persistence.createEntityManagerFactory(“livraria”);
EntityManager manager = factory.createEntityManager();
Query query = manager.createQuery(“SELECT e FROM Editora e”);
List editoras = query.getResultList();
for(Editora e : editoras) {
System.out.println("EDITORA: " + e.getNome() + " - " + e.getEmail());
}
}
}[/code]
[/quote]
tentei localizar qual o jar que falta, mas nao consegui.
vou continuar tentando aqui.
obrigado pela força.
Nesse post aqui eu listo todas a bibliotecas necessárias e forneço o link. Espero que te ajude.
Hibernate 3 com JPA 2
olá pessoal, resolvi o problema do JAR que faltava.
Porem ainda continua com erro.
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named livraria
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
at ListaEditorasComJPA.main(ListaEditorasComJPA.java:12)
Como está seu persistence.xml?
além de como esta seu persistence.xml, onde ele esta?
e apenas para ficar ai a dica caso alguém chegue pelo google aqui, qual era o jar faltante?
olá pessoal, resolvi o seguinte erro com o [b][color=blue] hibernate-jpa-2.0-api-1.0.0.final.jar[/color][size=18][/size] que faltava no classpath
Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at javax.persistence.Persistence.findAllProviders(Persistence.java:80)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:49)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
at ListaEditorasComJPA.main(ListaEditorasComJPA.java:12)
ok, poste seu persistence.xml e a localização dele
pasta META-INF na raiz do projeto
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="1.0">
<persistence-unit name="K19" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect. -
MySQL5InnoDBDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver -
"/>
<property name="javax.persistence.jdbc.user" value="usuario"/>
<property name="javax.persistence.jdbc.password" value="senha"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql:// -
localhost:3306/k19"/>
</properties>
</persistence-unit>
</persistence>
na raiz do projeto… seu projeto é desktop?
que eu me lembre (tem muuuuito tempo que não mecho com jpa mesmo ao invés de hibenrate) a sua pasta META-INF tem que ficar dentro do seu diretório de fontes, no src, como se fosse um pacote e o persistence.xml la dentro.
em projetos web se for seu caso você coloca do lado da WEB-INF eu acho… não tenta certeza (tenta um e se não der certo tenta o outro).
outra coisa, la na sua tag persistence-unit o atributo name name deve estar com o mesmo nome que você passa no método createEntityManagerFactory, então ou você muda na tag para “livraria” ou no método para K19, deixe os dois com a mesma string… e ai então vocÊ testa a pasta nos dois endereços que falei, acho que é no primeiro… isso me baseando em quando eu vi JPA 1, acredito que no JPA 2 isso não tenha mudado.
posta ai se der certo ou se não…
sim o meu projeto é desktop.
pessoal, rodei o exemplo em casa e tive um outro erro.
pesquisei na net e vi que são refenre ao log4j
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/LogManager
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:151)
at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:107)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:124)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
at JPA.InsereEditoraComJPA.main(InsereEditoraComJPA.java:11)
olá pessoal resolvi todos os problemas acredito seja as versoes JAR diferentes… segue um resumo de como ficou.
[code]
package JPA;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Editora {
@Id
@GeneratedValue
private Long id;
private String nome;
private String email;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
// GETTERS AND SETTERS
}[/code]
package JPA;
import java.util.Scanner;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class InsereEditoraComJPA {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("livraria");
EntityManager manager = factory.createEntityManager();
Editora novaEditora = new Editora();
Scanner entrada = new Scanner(System.in);
System.out.println("Digite o nome da editora: ");
novaEditora.setNome(entrada.nextLine());
System.out.println("Digite o email da editora: ");
novaEditora.setEmail(entrada.nextLine());
manager.persist(novaEditora);
manager.getTransaction().begin();
manager.getTransaction().commit();
factory.close();
}
}
package JPA;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class ListaEditoraComJPA {
public static void main(String[] args) {
EntityManagerFactory factory =
Persistence.createEntityManagerFactory("livraria");
EntityManager manager = factory.createEntityManager();
Query query = manager.createQuery("SELECT e FROM Editora e");
List<Editora> editoras = query.getResultList();
for(Editora e : editoras) {
System.out.println("EDITORA: " + e.getNome() + " - " + e.getEmail());
}
}
}
Gostaria de agradecer a todos que me ajudaram.
obrigado e que Deus abençoe a todos do GUJ.