Foros del Web » Programación para mayores de 30 ;) » Java »

Error de transaccion activa con JPA

Estas en el tema de Error de transaccion activa con JPA en el foro de Java en Foros del Web. Saludos a todos, tengo el siguiente inconveniente guardando en BD con JPA, resulta k al realizar el manager.persist(imp); o manager.merge(imp); la aplicacion se cualga y ...
  #1 (permalink)  
Antiguo 12/10/2011, 08:02
Avatar de rocka8613  
Fecha de Ingreso: abril-2010
Mensajes: 33
Antigüedad: 9 años, 11 meses
Puntos: 0
Error de transaccion activa con JPA

Saludos a todos, tengo el siguiente inconveniente guardando en BD con JPA, resulta k al realizar el manager.persist(imp); o manager.merge(imp); la aplicacion se cualga y me sale error pork existe una transaccion activa, podria alguien ayudarme, no se k pueda ser ya que de la misma manera e construido otros metodos y me funcionan perfectamente.


la BD esta en un servidor diferente pero incluso apuntando a una base de datos local me sale el mismo error, muchas gracias por cualquier colaboracion

el metodo es el siguiente, recibe una lista de entidades y un numero de registros a guardar por lote.


@SuppressWarnings("unchecked")
public void saveCalculations(List<ImaTitulosOperacion> result, int numLotes) {

if (result.isEmpty())
return;

EntityManager manager = EntityManagerHelper.getEntityManager();
EntityTransaction transaction = manager.getTransaction();

if(numLotes > result.size()){
numLotes = result.size();
}

try {

Query selectHistorical = manager.createQuery("SELECT x FROM ImaTitulosOperacion x WHERE x.pk.itoFecha=?1");
selectHistorical.setParameter(1, result.get(0).getPk().getItoFecha());

List<ImaTitulosOperacion> dbHistorical = (List<ImaTitulosOperacion>)selectHistorical.getRes ultList();
Hashtable<String, ImaTitulosOperacion> hash = new Hashtable<String, ImaTitulosOperacion>();

for (ImaTitulosOperacion historical : dbHistorical)
hash.put(historical.getPk().getItoFecha().toString ()+ "-" + historical.getPk().getItoOrigenComercial(), historical);

transaction.begin();
int i=0;
for (ImaTitulosOperacion imp : result) {

ImaTitulosOperacion validate = hash.get(imp.getPk().getItoFecha().toString() + "-" + imp.getPk().getItoOrigenComercial());

if (validate == null) {
log4j.info("Almacenando Operación: " + imp.getPk().getItoOrigenComercial() +
" fecha: " + imp.getPk().getItoFecha());
manager.persist(imp);
hash.put(imp.getPk().getItoFecha().toString() + "-" + imp.getPk().getItoOrigenComercial(), imp);
} else {
log4j.info("Actualizando Operación: " + imp.getPk().getItoOrigenComercial() +
" fecha: " + imp.getPk().getItoFecha());
manager.merge(imp);

i++;
if(i%numLotes==0){
transaction.commit();
manager.close();
manager = EntityManagerHelper.getEntityManager();
transaction = manager.getTransaction();

if(i!=result.size()){
transaction.begin();
}
}
}

if (transaction.isActive()){
transaction.commit();
}
log4j.info("Se almacenaron los datos correctamente");
} catch (IllegalStateException ex) {
if (transaction.isActive())
transaction.rollback();
log4j.error("operación inválida contra la BD al almacenar los cálculos", ex);
throw new DataAccessOperationException("operación inválida contra la BD al almacenar los cálculos", ex);
} catch (TransactionRequiredException ex) {
if (transaction.isActive())
transaction.rollback();
log4j.error("operación inválida contra la BD al almacenar los cálculos", ex);
throw new DataAccessOperationException("operación inválida contra la BD al almacenar los cálculos", ex);
} catch (PersistenceException ex) {
if (transaction.isActive())
transaction.rollback();
log4j.error("Actualización no permitida por restricción de relaciones al almacenar los cálculos.", ex);
throw new DataAccessOperationException("Actualización no permitida por restricción de relaciones al almacenar los cálculos.", ex);
} catch (Exception ex) {
if (transaction.isActive())
transaction.rollback();
log4j.error("Ocurrio un error inesperado al almacenar los cálculos", ex);
throw new DataAccessUnexpectedException("Ocurrio un error inesperado al almacenar los cálculos", ex);
} finally {
if (manager.isOpen())
manager.close();
}

}
  #2 (permalink)  
Antiguo 14/10/2011, 00:52
 
Fecha de Ingreso: mayo-2011
Mensajes: 79
Antigüedad: 8 años, 10 meses
Puntos: 14
Respuesta: Error de transaccion activa con JPA

prueba a tener todas las operaciones del metodo de negocio que expones en una unica transacción (que es lo logico para mantener consistencia de datos habitualmente) en lugar de abrir y cerrar transacciones, que fijo que te as dejado alguna sin cerrar.

Saludos
__________________
Web Admin:
http://www.coretec.es
Tutoriales, Noticias y Recursos Liferay y J2EE

Etiquetas: jpa, transacciones, activo, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:22.