Erro utilizando JPA

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 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();
}

}

Elenilson

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.

Não funcionou.

De que Código você esta falando ?

[quote=elenilson.costa]Não funcionou.

De que Código você esta falando ?[/quote]

A tag code do forum meu amigo.

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:

[code]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();

}

}[/code]

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:

[code]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();
}
} [/code]

Abraços,
Elenilson

como nosso amigo disse acima:

Eu já fiz isso. Não funcionou.

Pelo seu erro parece ser falta do provider.

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

flw!

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

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

[quote=elenilson.costa]Eu coloquei a pasta lib do openjpa em WebContent/web-inf/lib

Isso basta ? Precisa fazer alguma configuração após isso ?[/quote]
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>

Deu o mesmo erro.

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

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.

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 ?

[quote=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 ?[/quote]
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.

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.

[code]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 + "]";
}

}[/code]

e testei.

[code]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§;

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

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

}[/code]

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

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

Grande abraço.
Elenilson

Valeu Amigo. Muito obrigado.

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

Muito obrigado pela ajuda.