NullPointerException usando JPA

Oi pessoal.

Estou estudando JPA com TopLink e MySQL. No entanto, estou com um problema que não consigo encontrar onde pode estar dando caca.
A exception é a seguinte:

[quote]Exception in thread “main” java.lang.NullPointerException
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:120)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
at br.com.NFL.persistencia.JogadorDAO.(JogadorDAO.java:17)
at br.com.NFL.negocio.NegocioJogador.inserirJogador(NegocioJogador.java:11)
at br.com.NFL.teste.Teste.main(Teste.java:13)[/quote]
Meu persistence.xml está assim:

<?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="jogadores" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
    <class>br.com.NFL.modelo.Jogador</class>
    <properties>
      <property name="toplink.logging.level" value="INFO"/>
      <property name="toplink.jdbc.url" value="jdbc:mysql://localhost/jogadores"/>
      <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="toplink.jdbc.user" value="root"/>
      <property name="toplink.jdbc.password" value=""/>
      <property name="toplink.ddl-generation" value="create-tables"/> 
    </properties>
  </persistence-unit>
  
</persistence>

E minha classe de DAO está assim:

package br.com.NFL.persistencia;

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

import br.com.NFL.modelo.*;

public class JogadorDAO {
	
	private EntityManagerFactory factory = null;
	
	private EntityManager em = null;
	
	public JogadorDAO() {
		factory = Persistence.createEntityManagerFactory("jogadores");
		em = factory.createEntityManager();
	}
	
	public void adicionarJogador(Jogador novoJogador) {
		EntityTransaction transacao = em.getTransaction();
		
		try {
			transacao.begin();
			
			em.persist(novoJogador);
			
			transacao.commit();
		} catch (Exception e) {
			transacao.rollback();
			
			System.err.println("Erro: " + e.getMessage());
		} finally {
			em.close();
		}	
	}
	
	public Jogador pesquisarJogador(Integer codigo, Jogador jogador) {
		EntityTransaction transacao = em.getTransaction();
		
		Jogador retorno = null;
		
		try {
			transacao.begin();
			
			retorno = (Jogador)em.find(Jogador.class, codigo);
		} catch (Exception e) {
			transacao.rollback();
			
			System.err.println("Erro: " + e.getMessage());
		} finally {
			em.close();
		}
		
		return retorno;
	}

}

Alguém pode me dizer aonde estou fazendo coisas erradas?

Abraço.

[quote=Andre Brito]Oi pessoal.
[/code]
public class JogadorDAO {

private EntityManagerFactory factory = null;

private EntityManager em = null;

[/code]
[/quote]
Parece que faltam as anotações @PersistentContext ou @PersistentUnit no seu código

nadilson,

Pode me dizer em qual parte eu devo colocar essas Anotações?

Abraço.

[editado]
Esqueci de dizer: é aplicação desktop.

Conversando com um amigo meu que entende do assunto, coloquei a anotação na linha anterior à declaração do EntityManager.
Dessa forma, o DAO fica assim:

package br.com.NFL.persistencia;

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

import br.com.NFL.modelo.*;

public class JogadorDAO {
	
	@PersistenceContext(unitName = "jogadores")
	private EntityManager em;
	
	public JogadorDAO() {
		
	}
	
	public void adicionarJogador(Jogador novoJogador) {
		//EntityTransaction transacao = em.getTransaction();
		
		try {
			//transacao.begin();
			
			em.persist(novoJogador);
			
			//transacao.commit();
		} catch (Exception e) {
			//transacao.rollback();
			
			System.err.println("Erro: " + e.getMessage());
		} finally {
			em.close();
		}	
	}

//...
}

Mas o NullPointerException é na hora de dar o persist ou chamar a transaction (o begin e depois o commit). E, de fato, acho que isso faz sentido, pois não inicializo o EM.

Abraço.
[/editado]

Desculpe-me a demora.

Bem, como você está em uma aplicação standalone, não existe um servidor que injete na sua classe o EntityManager. Então, você tem que obtê-lo manualmente createEntityManager do EntityManagerFactory

Este link, com certeza, vai te ajudar:

Até

Oi nadilson,

Eu não li o link ainda, mas conversei hoje na aula com um colega que entende do assunto e vi que o META-INF estava fora dos pacotes. Acho que foi isso. Agora está funcionando tudo beleza.

Valeu cara!
Abraço.