maia/.svn/pristine/1f/1f98bc837897effb0fdb5bf5e37...

63 lines
2.1 KiB
Plaintext
Executable File

package com.fp.persistence.commondb;
import com.fp.common.exception.ExceptionHandler;
import com.fp.common.logger.APPLogger;
import com.fp.dto.hb.HibernateBean;
import com.fp.persistence.commondb.data.SessionData;
import com.fp.persistence.commondb.data.ThreadFacade;
/**
* Clase que permite grabar o actualizar información en la base de datos en una sesión de base de datos independiente a
* la utiliza en la ejecución de una transacción..
*
* @version 2.1
*/
public class NestedSave extends Thread {
private final HibernateBean[] bean;
private final Integer company;
private boolean merge;
public NestedSave(Integer pCompany, HibernateBean... pBean) {
bean = pBean;
company = pCompany;
}
public NestedSave(Integer pCompany, boolean merge, HibernateBean... pBean) {
bean = pBean;
company = pCompany;
this.merge = merge;
}
@Override
public void run() {
try {
SessionData s = new SessionData();
s.setCompany(company);
ThreadFacade.setSaveRequest(s);
PersistenceHelper.setEntityManager(PersistenceManager.getInstance().createEntityManagerLocal());
PersistenceHelper.beginNewTransaction();
for (HibernateBean b : bean) {
if (!merge) {
APPLogger.getLogger().info("Inserta registro de auditoria");
PersistenceHelper.getEntityManager().detach(b);
PersistenceHelper.save(b);
} else {
PersistenceHelper.getEntityManager().merge(b);
}
}
PersistenceHelper.commitNewTransaction();
} catch (Exception e) {
PersistenceHelper.rollbackNewTransaction();
ExceptionHandler eh = new ExceptionHandler(e, "es");
String usrmsg = eh.getUserMessage();
APPLogger.getLogger().error("User Message:==>\n" + usrmsg);
APPLogger.getLogger().error("Stack trace:==>\n" + eh.getStackTrace());
} finally {
PersistenceHelper.closeSession();
}
}
}