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
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. –
Veröffentlichen Sie die Ablaufverfolgung für den Ausnahme-Stack. – lexicore