Erro utilizando JPA

16 respostas
E

Por favor me ajudem. Estou iniciando com o jpa. Esta ocorrendo o seguinte erro:

Exception in thread main javax.persistence.PersistenceException: No persistence providers available for openjpa after trying the following discovered implementations: NONE

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:182)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:72)

at com.swe.cliente.model.Teste.lista(Teste.java:19)

at com.swe.cliente.model.Teste.main(Teste.java:14)

Minha classe teste:
package com.swe.cliente.model;

import java.util.List;
import java.util.Properties;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import javax.persistence.Query;

public class Teste {

public static void main(String[] args){
	lista();
}

public static void lista(){
	Properties props = new Properties(); 
	EntityManagerFactory factory = Persistence.createEntityManagerFactory("openjpa");
	
	EntityManager em = factory.createEntityManager();
	em.getTransaction().begin();
	Query query = em.createQuery("select codigo, nome from swe.clientes");
	List results = query.getResultList();
	
	for (Object res : results){
		Clientes cliente = (Clientes)res;
		System.out.println(cliente.toString());
	}
	em.close();
	
}

}

Meu persistence.xml esta na pasta WebContent\META-INF

<?xml version="1.0" encoding="UTF-8"?> org.apache.openjpa.persistence.PersistenceProviderImpl com.swe.cliente.model.Clientes

Meu pojo:

package com.swe.cliente.model;

import java.io.Serializable;
import java.sql.Date;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;

@Entity
public class Clientes implements Serializable{

@Id @GeneratedValue
@Column (name="codigo")
private int codigo;

@Column (name="nome")
private String nome;

@Column (name="dt_cadastro")
private Date dataCadastro;

public Clientes(){
	
}

public Clientes(String nome){
	this.nome = nome;
	this.dataCadastro = new Date(System.currentTimeMillis());
}

public int getCodigo() {
	return codigo;
}

public void setCodigo(int codigo) {
	this.codigo = codigo;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public Date getDataCadastro() {
	return dataCadastro;
}

public void setDataCadastro(Date dataCadastro) {
	this.dataCadastro = dataCadastro;
}

@Override
public String toString(){
	return "Nome "+nome+" Data Cadastro "+dataCadastro.toString();
}

}

Elenilson

16 Respostas

wbdsjunior

primeiro uma dica: coloque o código entre as tags code.

segundo: seu persistence.xml deve estar em [color=green]src[/color]\META-INF e não em [color=red]WebContent[/color]\META-INF.

elenilson.costa

Não funcionou.

De que Código você esta falando ?

Kanin_Dragon

elenilson.costa:
Não funcionou.

De que Código você esta falando ?

A tag code do forum meu amigo.

elenilson.costa

Agora formatado

Por favor me ajudem.

Estou iniciando com o jpa. Esta ocorrendo o seguinte erro:

Exception in thread &quot;main&quot; javax.persistence.PersistenceException: No persistence providers available for &quot;openjpa&quot; after trying the following discovered implementations: NONE 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:182) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:72) 
at com.swe.cliente.model.Teste.lista(Teste.java:19) 
at com.swe.cliente.model.Teste.main(Teste.java:14)

Minha classe teste:

package com.swe.cliente.model; 

import java.util.List; 
import java.util.Properties; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import javax.persistence.Query; 

public class Teste { 

public static void main(String[] args){ 
lista(); 
} 

public static void lista(){ 
Properties props = new Properties(); 
EntityManagerFactory factory = Persistence.createEntityManagerFactory(&quot;openjpa&quot;); 

EntityManager em = factory.createEntityManager(); 
em.getTransaction().begin(); 
Query query = em.createQuery(&quot;select codigo, nome from swe.clientes&quot;); 
List results = query.getResultList(); 

for (Object res : results){ 
Clientes cliente = (Clientes)res; 
System.out.println(cliente.toString()); 
} 
em.close(); 

} 

}

Meu persistence.xml esta na pasta WEB-INF

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; 
&lt;persistence version="1.0"&gt; 
&lt;persistence-unit name="openjpa"&gt; 
&lt;provider&gt;org.apache.openjpa.persistence.PersistenceProviderImpl&lt;/provider&gt; 
&lt;class&gt;com.swe.cliente.model.Clientes&lt;/class&gt; 
&lt;properties&gt; 
&lt;property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/swe"/&gt; 
&lt;property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/&gt; 
&lt;property name="openjpa.ConnectionUserName" value="root"/&gt; 
&lt;property name="openjpa.ConnectionPassword" value="october"/&gt; 
&lt;property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/&gt; 
&lt;/properties&gt; 
&lt;/persistence-unit&gt; 
&lt;/persistence&gt;

Meu pojo:

package com.swe.cliente.model; 

import java.io.Serializable; 
import java.sql.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

@Entity 
public class Clientes implements Serializable{ 

@Id @GeneratedValue 
@Column (name="codigo") 
private int codigo; 

@Column (name="nome") 
private String nome; 

@Column (name="dt_cadastro") 
private Date dataCadastro; 

public Clientes(){ 

} 

public Clientes(String nome){ 
this.nome = nome; 
this.dataCadastro = new Date(System.currentTimeMillis()); 
} 

public int getCodigo() { 
return codigo; 
} 

public void setCodigo(int codigo) { 
this.codigo = codigo; 
} 

public String getNome() { 
return nome; 
} 

public void setNome(String nome) { 
this.nome = nome; 
} 

public Date getDataCadastro() { 
return dataCadastro; 
} 

public void setDataCadastro(Date dataCadastro) { 
this.dataCadastro = dataCadastro; 
} 

@Override 
public String toString(){ 
return "Nome "+nome+" Data Cadastro "+dataCadastro.toString(); 
} 
}

Abraços,
Elenilson

denislima

como nosso amigo disse acima:

elenilson.costa

Eu já fiz isso. Não funcionou.

gilmaslima

Pelo seu erro parece ser falta do provider.

Você já verificou se não está faltando nenhum jar no seu projeto?

flw!

elenilson.costa

Eu coloquei a pasta lib do openjpa em WebContent/web-inf/lib

Isso basta ? Precisa fazer alguma configuração após isso ?

wbdsjunior

elenilson.costa:
Eu coloquei a pasta lib do openjpa em WebContent/web-inf/lib

Isso basta ? Precisa fazer alguma configuração após isso ?


acho que seu persistence.xml está mal formado.

tente:

<?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="openjpa" transaction-type="RESOURCE_LOCAL"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <class>com.swe.cliente.model.Clientes</class> <properties> <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/swe" /> <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" /> <property name="openjpa.ConnectionUserName" value="root" /> <property name="openjpa.ConnectionPassword" value="october" /> <property name="openjpa.Log" value="DefaultLevel=WARN,Tool=INFO" /> </properties> </persistence-unit> </persistence>

elenilson.costa

Deu o mesmo erro.

Estou enviando o print em anexo. Ai vocês podem ver como esta a estrutura.

wbdsjunior

se você não tiver dois (ou mais) provedores de persistência (hibernate e eclipselink, por exemplo) no mesmo projeto, pode omitir a linha de configuração de provider.

faça um teste.

elenilson.costa

Tentei. Deu a mesma mensagem.

Esta correto eu ter colocado a pasta lib do openjpa direto em WEB-INF/LIB ? Eu preciso fazer alguma configuração do tipo classpath ou algo parecido ?

wbdsjunior

elenilson.costa:
Tentei. Deu a mesma mensagem.

Esta correto eu ter colocado a pasta lib do openjpa direto em WEB-INF/LIB ? Eu preciso fazer alguma configuração do tipo classpath ou algo parecido ?


sim, no diretório WebContent\WEB-INF\lib.

você já configurou o classpath do seu projeto para utilizar as bibliotecas da aplicação web. note que há a biblioteca Web App Libraries, e dentro dela deve haver os jars do OpenJPA.

desculpe, mas não tenho mais idéia de como ajudar.

wbdsjunior

fiz um teste e não tive problemas.

baixei os arquivos do OpenJPA 1.2.2.

criei uma User Library chamada "OpenJPA 1.2" e adicionei os arquivos:

- openjpa-1.2.2.jar;
- commons-collection-3.2.jar;
- commons-lang-2.1.jar;
- commons-pool-1.3.jar;
- geronimo-jpa_3.0_spec-1.0.jar;
- geronimo-jta_1.1_spec-1.1.jar;
- serp-1.13.1.jar.

criei um projeto JPA Project do tipo Minimal JPA 1.0 Configuration e apontei para bliblioteca do OpenJPA 1.2 criada anteriormente

adicionei uma Connectivity Driver Definition, apontando para o driver JDBC do Derby (JavaDB), que eu já tinha aqui.

criei o banco de dados Test e a tabela Person no Derby e configurei o persistence.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;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"&gt;
	&lt;persistence-unit name="test"
		transaction-type="RESOURCE_LOCAL"&gt;
		&lt;class&gt;br.blog.wbdsjunior.test.Person&lt;/class&gt;
		&lt;properties&gt;
			&lt;property name="openjpa.ConnectionURL"
				value="jdbc:derby://localhost:1527/../data/test" /&gt;
			&lt;property name="openjpa.ConnectionDriverName"
				value="org.apache.derby.jdbc.ClientDriver" /&gt;
			&lt;property name="openjpa.ConnectionUserName"
				value="test" /&gt;
			&lt;property name="openjpa.ConnectionPassword"
				value="test" /&gt;
			&lt;property name="openjpa.Log"
				value="DefaultLevel=WARN,Tool=INFO" /&gt;
		&lt;/properties&gt;
	&lt;/persistence-unit&gt;
&lt;/persistence&gt;

criei a entidade.

package br.blog.wbdsjunior.test;

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Person implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@Column(nullable = false)
	private String name;

	public Person() {
	}

	public Person(String name) {
		this.name = name;
	}

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}

		if (obj == null) {
			return false;
		}

		if (getClass() != obj.getClass()) {
			return false;
		}
		Person other = (Person) obj;

		if (id == null) {
			if (other.id != null) {
				return false;
			}
		} else if (!id.equals(other.id)) {
			return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return "Person[id=" + id + ",name=" + name + "]";
	}
}

e testei.

package br.blog.wbdsjunior.test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Test {
	public static void main(String[] args) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();

//		Person p = new Person("Wilson");
//		em.persist(p);

		Person p = em.find(Person.class, 1l);
		System.out.println(p);

		em.getTransaction().commit();
		em.close();
		emf.close();
	}
}

veja se seus jars são os mesmos, tente criar um projeto JPA Project, sei lá.

elenilson.costa

Meu amigo, muito obrigado pelo empenho em me ajudar. Consegui !

Grande abraço.
Elenilson

elenilson.costa

Valeu Amigo. Muito obrigado.

O que estava faltando era associar os facelets JPA ao projeto.

Muito obrigado pela ajuda.

Criado 21 de fevereiro de 2011
Ultima resposta 1 de mar. de 2011
Respostas 16
Participantes 6