[英]Spring + Jboss : NullPointerException thrown for entity manager while finding
[英]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.