Bom dia pessoal,
Não consegui fazer o GlassFish injetar o EntityManager na minha classe DAO, ele so injeta no meu Managed Bean .
Essa e minha classe DAO para teste, mas ele não injeta o EntityManager e da um java.lang.NullPointerException.
package key.dao;
import bean.Licensa;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.transaction.UserTransaction;
/**
*
* @author ekszuki
*/
public class LicensaDAO {
@PersistenceContext(name = "keyglobalpecPU")
private EntityManager em;
@Resource
private UserTransaction utx;
public EntityManager getEntityManager() {
return em ;
}
public Licensa getLicensaByLicenseKey(String licenseKey) {
Query query = em.createNamedQuery("Licensa.findByLicensekey");
query.setParameter("licensekey", licenseKey);
return (Licensa) query.getSingleResult();
}
}
Já aqui ele funciona normalmente se eu chamar o método renovarChave(), mas se eu chamo o metodo teste que faz uso da classe DAO acima ele da o java.lang.NullPointerException.
l
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package key.managedbean;
import bean.Liberacao;
import bean.Licensa;
import br.com.sygnux.util.Util;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.transaction.UserTransaction;
import key.Cript.Criptografia;
import key.dao.LicensaDAO;
/**
*
* @author Ekszuki
*/
public class MyKeyManagerBean {
private String theOldKey;
private String theNewKey;
private int Dias;
@PersistenceContext(name = "keyglobalpecPU" )
private EntityManager em;
@Resource
private UserTransaction utx;
private FacesContext context ;
// private LicensaJpaController licensaController ;
public MyKeyManagerBean() {
context = FacesContext.getCurrentInstance() ;
}
public String getTheNewKey() {
return theNewKey;
}
public String getTheOldKey() {
return theOldKey;
}
public void setTheOldKey(String theOldKey) {
this.theOldKey = theOldKey;
}
public int getDias() {
return Dias;
}
public void setDias(int Dias) {
this.Dias = Dias;
}
/** Creates a new instance of MyKeyManagerBean */
public String renovarChave() {
Criptografia crip = new Criptografia();
DateFormat df = DateFormat.getDateInstance();
Licensa licensa = null;
Query query = null;
try {
// verifica se esta liberado para gerar chaves
utx.begin() ;
query = em.createNamedQuery("Liberacao.findAll");
Liberacao liberacao = (Liberacao) query.getSingleResult();
if (liberacao.getStatus().equals("N")) {
throw new Throwable("O Sistema está bloqueado para atualizar as chaves");
}
// find old key in database
query = em.createNamedQuery("Licensa.findByLicensekey");
query.setParameter("licensekey", theOldKey);
licensa = (Licensa) query.getSingleResult();
// verifica se a licensa informada esta cancelada
if (licensa.getStatus().equals("R") ) {
throw new Throwable("Licensa informada ja foi renovada");
}
Date hoje = new Date();
// verifica se a chave esta vencida
int diasParaTravar = Util.dataDiff(hoje, licensa.getDataTrava());
// Permiti gerar a nova chave a partir de 10 dias para vencer
if (diasParaTravar > 10) {
throw new Throwable("Chave esta dentro do periodo de validade");
}
String key = crip.Desencripta(theOldKey);
String hd = key.substring(10, 18);
Date data = df.parse(key.substring(0, 10));
Calendar dataProximaTrava = Calendar.getInstance();
dataProximaTrava.setTime(data);
dataProximaTrava.add(Calendar.DATE, Dias);
theNewKey = crip.Encripta(df.format(dataProximaTrava.getTime()) + hd);
// passa a licensa informada para cancelada
licensa.setStatus("R") ;
em.persist(licensa) ;
//licensaController.edit(licensa) ;
// registra nova licensa e seus dados
Licensa novaLicensa = new Licensa() ;
novaLicensa.setDataGeracao(hoje);
novaLicensa.setDataTrava(dataProximaTrava.getTime());
novaLicensa.setHdkey(hd);
novaLicensa.setLicensekey(theNewKey) ;
novaLicensa.setCliente( licensa.getCliente() ) ;
novaLicensa.setStatus("A") ;
em.persist(novaLicensa);
utx.commit();
} catch (ParseException ex) {
Logger.getLogger(MyKeyManagerBean.class.getName()).log(Level.SEVERE, null, ex);
} catch ( Throwable ex ) {
FacesContext.getCurrentInstance().addMessage("invalido", new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), "Detail") );
}
return "refresh";
}
public String teste() {
Licensa lic ;
LicensaDAO DAO = new LicensaDAO() ;
try {
lic = DAO.getLicensaByLicenseKey( theOldKey ) ;
System.out.println("Vindos do DAO: " + lic.getLicensekey() ) ;
} catch( Exception e ) {
e.printStackTrace();
}
return "refresh" ;
}
}
Alguem poderia me dizer o porque isso acontece ?
Será que o GlassFish so faz injeção em um Managed Bean ?
Att,