EntityManager 变为空
EntityManager becomes null
我在使用 EntityManager 时遇到一个奇怪的错误。这是代码的摘录。
@PersistenceUnit
EntityManagerFactory factory;
@Resource
UserTransaction transaction;
EntityManager em;
方法内部:
try{
datos.crearDatos(docEntrada);
ctx.setDatosMensajes(datos);
factory=Persistence.createEntityManagerFactory("ealia");
transaction = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
EntityManager em = factory.createEntityManager();
//Do whatever it does, everything works fine.
// HERE THE ENTITY MANAGER IS NOT NULL
}
catch (Exception e){
}
finally{
// HERE THE ENTITY MANAGER IS NULL
try {
SVCSMensajes.grabarMensajeSalida(datos, Constantes.MENSAJE_SALIDA_WS_USUARIOS_GESTION, Constantes.NOMBRE_SERVICIO_WS_USUARIOS_GESTION, Constantes.MENSAJE_ENTRADA_WS_USUARIOS_GESTION, em, ctx,transaction);
} catch (CecaException e) {
// No devolvemos error en este caso
}
em.close();
factory.close();
}
我不明白为什么eentity manager在finally里面变成null,刚好在try结束时不为null,当一切正常时,没有异常。我跟踪变量,它变为 null,中间没有中间指令。
相反,如果我以这种方式重新排列代码
factory=Persistence.createEntityManagerFactory("ealia");
transaction = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
EntityManager em = factory.createEntityManager();
try{
datos.crearDatos(docEntrada);
ctx.setDatosMensajes(datos);
....
}
....
一切正常。谁能解释一下,好吗?
您在此处将 em
声明为 try
块的局部变量:
EntityManager em = factory.createEntityManager();
变量对 finally
块不可见。该块使用您声明为 class.
字段的那个
您需要将上面的行更改为:
em = factory.createEntityManager();
为了初始化你的字段,不是局部变量。
更好的是,您可能希望注入 EntityManager
而不是手动创建它。
我在使用 EntityManager 时遇到一个奇怪的错误。这是代码的摘录。
@PersistenceUnit
EntityManagerFactory factory;
@Resource
UserTransaction transaction;
EntityManager em;
方法内部:
try{
datos.crearDatos(docEntrada);
ctx.setDatosMensajes(datos);
factory=Persistence.createEntityManagerFactory("ealia");
transaction = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
EntityManager em = factory.createEntityManager();
//Do whatever it does, everything works fine.
// HERE THE ENTITY MANAGER IS NOT NULL
}
catch (Exception e){
}
finally{
// HERE THE ENTITY MANAGER IS NULL
try {
SVCSMensajes.grabarMensajeSalida(datos, Constantes.MENSAJE_SALIDA_WS_USUARIOS_GESTION, Constantes.NOMBRE_SERVICIO_WS_USUARIOS_GESTION, Constantes.MENSAJE_ENTRADA_WS_USUARIOS_GESTION, em, ctx,transaction);
} catch (CecaException e) {
// No devolvemos error en este caso
}
em.close();
factory.close();
}
我不明白为什么eentity manager在finally里面变成null,刚好在try结束时不为null,当一切正常时,没有异常。我跟踪变量,它变为 null,中间没有中间指令。
相反,如果我以这种方式重新排列代码
factory=Persistence.createEntityManagerFactory("ealia");
transaction = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
EntityManager em = factory.createEntityManager();
try{
datos.crearDatos(docEntrada);
ctx.setDatosMensajes(datos);
....
}
....
一切正常。谁能解释一下,好吗?
您在此处将 em
声明为 try
块的局部变量:
EntityManager em = factory.createEntityManager();
变量对 finally
块不可见。该块使用您声明为 class.
您需要将上面的行更改为:
em = factory.createEntityManager();
为了初始化你的字段,不是局部变量。
更好的是,您可能希望注入 EntityManager
而不是手动创建它。