How to cancel a series of claims in JPA?

I have a situation where I need to roll back a number of persist methods. I have a method in the controller class from where I call the persist method.

Controller Class:

@EJB
private jpa.session.ClassMasterFacade ejbFacadeCM;
@EJB
private jpa.session.StudentMasterFacade ejbFacadeSM;
@EJB
private jpa.session.ParentsMasterFacade ejbFacadePM;
@EJB
private jpa.session.AddressMasterFacade ejbFacadeAM;

public String confirmData() {
    try {
        ejbFacadeSM;.create(selectedSM);
        ejbFacadeCM;.create(selectedCM)
        ejbFacadeAM;.create(selectedAM);
        ejbFacadePM;.create(selectedPM);
    } catch (Exception e) {
        //rollback all
        JsfUtil.addErrorMessage(e, ResourceBundle.getBundle ("/resources/Bundle").getString("PersistenceErrorOccured"));
        return null;
    }
 }

Example Facade class:

@Stateless
public class ClassMasterFacade extends AbstractFacade<ClassMaster> {

    @PersistenceContext(unitName = "sdjv_smsPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public ClassMasterFacade() {
        super(ClassMaster.class);
    }

}

All other facade classes are similar to the above class. Abstract class:

public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }
}

I want to cancel the entire create method if any exception is found.

I searched and found some answers:

I am new to JPA and just started to learn it. Am I missing a concept?

, , . . , create, , mysql, . .

:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "class_group_id")
private Integer classGroupId;
+4
2

javax.transaction.UserTransaction, Java EE.

, :

  • begin(),
  • commit(), ,
  • rollback(), , , begin()

: Oracle UserTransaction

@Resource
UserTransaction tran;

...

public void confirmData (){

    tran.begin();
    try {
        ejbFacadeSM.create(selectedSM);
        ejbFacadeCM.create(selectedCM)
        ejbFacadeAM.create(selectedAM);
        ejbFacadePM.create(selectedPM);

        // Create succeeded, commit transaction.
        tran.commit();
    } catch (Exception e) {
        // Error occurred, rollback transaction
        tran.rollback();
    }
}
+4

. , , , . , REQUIRES_NEW

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public String confirmData() {
    try{
        ejbFacadeSM.create(selectedSM);
        ejbFacadeCM.create(selectedCM)
        ejbFacadeAM.create(selectedAM);
        ejbFacadePM.create(selectedPM);
    }catch(PersistenceException e){
        //do some stuff
    }
}

PersistenceException, . .

, ( JSR 338) :

PersistenceException, NoResultException, NonUniqueResultException, LockTimeoutException QueryTimeoutException , , .

. 4- ejbFacadePM.create(selectedPM) , . a LockTimeoutException 4- , . . , , , . confirmData(), - , ejbFacadeXX.

, , , , catch. rollback() Bean Managend (BMT) setRollbackOnly() (CMT). bean (, @TransactionManagement( TransactionManagementType.BEAN )), , , , JEE 5.

BMT , , , .

0

Source: https://habr.com/ru/post/1620849/


All Articles