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(); } } }