2016-11-29 1 views
0

Ich mache ein Maven-Projekt und Bereitstellung auf einem Wildfly 10-Server mit einem UDP-Listener, ich habe meine Fassade mit meiner DB (MariaDB) verbunden. Ich habe eine Testwebseite, wo ich eine Zeichenfolge senden, um den Prozess zu machen, die Probleme kommen, wenn ich versuche, denselben Prozess aber mit dem UDP-Listener zu machen.Nullpointerexception mit Entity Manager

Mein UDP-Server wartet auf den Port und erhält die Nachricht, aber mit der gleichen Prozedur, die ich auf meiner Webseite verwende, bringt mich die Nullpointerexzeption auf meiner Fassade und ich entdeckte, dass es passiert, wann immer ich den Entity Manager benutze.

Meine UDP-Server-Hauptklasse (Dies ist die Klasse, die ich zum Testen verwende, aber das Gleiche passiert mit der Klasse, die bereitgestellt wird).

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

Dies ist die Klasse, die mit der Fassade verbindet (auch eine Testklasse).

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

} 

Die Fassade (Ich markiere die Linie, wo ich den Fehler bekomme).

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

} 
} 

Ich versuche das Problem zu erklären, jetzt bin ich es nicht über die Server-Log, aber so schnell bekommen kann, werde ich es hier schreiben.

Bearbeiten: Mein Protokoll sagt dies.

GRAVE: null 
java.lang.NullPointerException 
+0

Willkommen bei Stack Overflow! Bitte lesen Sie unsere [SO Fragen-Checkliste] (http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist), um Ihnen zu helfen, eine gute Frage zu stellen und somit eine gute Antwort zu erhalten. –

+0

Veröffentlichen Sie die Ablaufverfolgung für den Ausnahme-Stack. – lexicore

Antwort

0

In Ihrem RegistrarEntrada Sie die EJB sind Instanziieren AsistenciasFacade. Damit die EntityManager injiziert werden kann, muss die EJB vom Container verwaltet werden. Dies bedeutet, dass der Lebenszyklus für RegistrarEntrada auch vom Container verwaltet werden muss und Sie die AsistenciasFacade EJB injizieren müssen.

Mit anderen Worten, Sie können kein Objekt instantiieren und Ressourcen in es injiziert werden. Der Container muss den gesamten Lebenszyklus dieser Objekttypen verarbeiten.

+0

Und die Frage ist: Wie kann ich es lösen? –

+0

Nun, ich bin mir nicht sicher, was genau Sie tun, also ist es schwer zu sagen. Aber wenn Sie 'neue AsistenciasFacade()' 'machen, wird der' EntityManger' immer 'null' sein, weil Sie den Lebenszyklus nicht diesen Container verwalten. –

+0

Ok so ... Ich möchte nur wissen, wie man den EntityManager von Registrar Entrada verwenden kann. –

Verwandte Themen