package com.fp.facade.ejb; import javax.ejb.Stateless; import javax.ejb.TransactionManagement; import javax.ejb.TransactionManagementType; import javax.persistence.EntityManager; import com.fp.bpm.actions.SaveAction; import com.fp.common.logger.APPLogger; import com.fp.dto.Request; import com.fp.facade.ejb.helper.BeanHelper; import com.fp.facadeclient.ejb.FacadeBeanJsfRemote; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.commondb.PersistenceManager; @Stateless(name = "savebean") @TransactionManagement(value = TransactionManagementType.BEAN) public class SaveBean extends BeanHelper implements FacadeBeanJsfRemote { /** * Metodo que se encarga de la ejecucion de una accion. * @param request Request con los datos necesarios para ejecutar una accion, consulta o mantenimiento. * @return Object * @throws Exception */ public Object process(Request request) throws Throwable{ this.fillThreadFacade(request.getCompany()); Object resp = null; // Para obtener un EntityManager dinamico EntityManager em = PersistenceManager.getInstance().createEntityManagerLocal(); PersistenceHelper.setEntityManager(em); try { BeanHelper.cleanThreadLocal(); PersistenceHelper.beginTransaction(); SaveAction sa = new SaveAction(); resp = sa.process(request); PersistenceHelper.commitTransaction(); return resp; } catch (Throwable e) { APPLogger.getLogger().warn(e, e); PersistenceHelper.rollbackTransaction(); try { return BeanHelper.fillError(e); } catch (Throwable e1) { APPLogger.getLogger().warn(e1, e1); throw e1; } } finally { PersistenceHelper.closeSession(); } } }