簡體   English   中英

使用實體管理器的NullpointerException

[英]Nullpointerexception using entity manager

我正在制作Maven項目,並使用UDP偵聽器部署到Wildfly 10服務器,我已將Facade連接到數據庫(MariaDB)。 我有一個測試網頁,我在其中發送一個String來進行該過程,當我嘗試使用UDP偵聽器嘗試進行相同的過程時,問題就來了。

我的UDP服務器偵聽該端口並獲取消息,但是使用與我在網頁中使用的相同過程,使我的外觀上出現了nullpointerexception,並且發現在使用實體管理器時它就會發生。

我的UDP服務器主類(這是我用來測試的類,但與已部署的類相同)。

public class UDPServerRun {

public static void main(String[] args) {
    System.out.println("UDP Server");
    try {
        DatagramSocket serverSocket = new DatagramSocket(8282);
        byte[] receiveData = new byte[9];
        byte[] sendData = new byte[9];
        while (true) {
            RegistrarEntrada entrada = new RegistrarEntrada();

            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            serverSocket.receive(receivePacket);
            String sentence = new String(receivePacket.getData());
            System.out.println("RECEIVED: " + sentence + "!");

            entrada.setCadenaEntrada(sentence);
            String cadena = entrada.registrar();

            InetAddress IPAddress = receivePacket.getAddress();
            int port = receivePacket.getPort();
            sendData = cadena.getBytes();
            DatagramPacket sendPacket
                    = new DatagramPacket(sendData, sendData.length, IPAddress, port);
            serverSocket.send(sendPacket);
        }
    } catch (Exception ex) {
        Logger.getLogger(RegistrarEntrada.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}

這是與Facade連接的類(也是測試類)。

public class RegistrarEntrada implements Serializable {

private AsistenciasFacadeLocal facade = new AsistenciasFacade();

private String cadenaEntrada;

public RegistrarEntrada() {

}

public String registrar() {
    Calendar cal = Calendar.getInstance();
    int idPersonal = -1;

    String entradas[] = cadenaEntrada.split(" ");
    String idChecador = entradas[0];
    String idTarjeta = entradas[1];
    //String idChecador = "A1";
    //String idTarjeta = "F37C96";
    DateFormat timeFormat = new SimpleDateFormat("HH:mm");

    //try {
    idPersonal = facade.consultarIdPersonal(idTarjeta);
    //        } catch (Exception e) {
    //            System.out.println(e);
    //        }

    if (idPersonal != -1) {
        Personal persona = facade.consultarPersona(idPersonal);

        if (persona != null) {
            facade.registrarEntrada(idPersonal, idChecador);
            return persona.getNombre() + " se registro a las: " + timeFormat.format(cal.getTime());
        } else {
            return "Error 02";
        }
    } else {
        return "Error 01";
    }

}

//Getters and Setters
public String getCadenaEntrada() {
    return cadenaEntrada;
}

public void setCadenaEntrada(String cadenaEntrada) {
    this.cadenaEntrada = cadenaEntrada;
}

public AsistenciasFacadeLocal getFacade() {
    return facade;
}

public void setFacade(AsistenciasFacadeLocal facade) {
    this.facade = facade;
}

}

門面(我將在出現錯誤的行上標記)。

@Stateless
public class AsistenciasFacade implements AsistenciasFacadeLocal,     AsistenciasFacadeRemote {

@PersistenceContext(unitName = "uvaqAsistenciasPU")
private EntityManager em;

protected EntityManager getEntityManager() {
    return em;
}

public AsistenciasFacade() {
    getEntityManager();
}

@Override
public void registrarEntrada(int idPersonal, String idChecador) {
    Registros registro = new Registros();
    Calendar fecha = Calendar.getInstance();

    registro.setIdpersonal(idPersonal);
    registro.setFechahoraregistro(fecha.getTime());
    registro.setIdchecador(idChecador);
    em.persist(registro);
}

@Override
public Personal consultarPersona(int idPersonal) {
    String query = "SELECT * FROM personal WHERE IDPERSONAL=" + idPersonal;
    List<Personal> objList = null;
    objList = em.createNativeQuery(query, Personal.class).getResultList();
    if (objList.size() != 0) {
        return objList.get(0);
    } else {
        return null;
    }
}

@Override
public int consultarIdPersonal(String idTarjeta) {
    int idPersonal;
    String query = "SELECT * FROM credenciales WHERE IDTARJETA = '" + idTarjeta + "'";
    List<Credenciales> objList = null;
    objList = em.createNativeQuery(query, Credenciales.class).getResultList();  //<====== The error happens here and also in every place where I use the entity manager
    if (objList.size() != 0) {
        idPersonal = Integer.parseInt(objList.get(0).getIdpersonal());
        return idPersonal;
    } else {
        return -1;
    }

}

@Override
public void sincronizarPersonal(List<String[]> personal) {
    System.out.println("Funcion Sincronizar Personal en Asistencias");
    List<Personal> nuevoPersonaltodos = new ArrayList<>();

    for (int i = 0; i < personal.size(); i++) {
        Personal nuevoPersonal = new Personal();
        nuevoPersonal.setIdpersonal(Integer.parseInt(personal.get(i)[0]));
        nuevoPersonal.setNombre(personal.get(i)[1]);
        nuevoPersonal.setApellidopat(personal.get(i)[2]);
        nuevoPersonal.setApellidomat(personal.get(i)[3]);
        nuevoPersonal.setIdstatusper(Integer.parseInt(personal.get(i)[4]));
        nuevoPersonaltodos.add(nuevoPersonal);
    }
    try {
        em.persist(nuevoPersonaltodos);
    } catch (Exception e) {
        System.out.println(e);
    }

}
}

我正在嘗試解釋問題,現在我沒有服務器日志,但是一旦獲得它,我就會在這里寫它。

編輯:我的日志這樣說。

GRAVE: null
java.lang.NullPointerException

RegistrarEntrada您將實例化EJB AsistenciasFacade 為了注入EntityManager ,EJB需要由容器管理。 這意味着RegistrarEntrada生命周期也需要由容器管理,並且您必須注入AsistenciasFacade EJB。

換句話說,您無法實例化對象並將資源注入其中。 容器需要處理這些類型的對象的完整生命周期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM