All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.arjuna.ats.jta.cdi.TransactionScopeCleanup Maven / Gradle / Ivy

There is a newer version: 7.1.0.Final
Show newest version
package com.arjuna.ats.jta.cdi;

import com.arjuna.ats.jta.logging.jtaLogger;

import javax.enterprise.context.spi.Contextual;
import javax.enterprise.context.spi.CreationalContext;
import javax.transaction.RollbackException;
import javax.transaction.Synchronization;
import javax.transaction.SystemException;
import javax.transaction.Transaction;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

public class TransactionScopeCleanup implements Synchronization {
    private Set beans;
    private TransactionContext context;
    private Transaction transaction;

    public TransactionScopeCleanup(TransactionContext context, Transaction transaction) {
        this.context = context;
        this.transaction = transaction;
        this.beans = new CopyOnWriteArraySet();

        try {
            transaction.registerSynchronization(this);
        } catch (RollbackException e) {
            throw new RuntimeException(jtaLogger.i18NLogger.get_transaction_arjunacore_syncwhenaborted());
        } catch (SystemException e) {
            throw new RuntimeException(jtaLogger.i18NLogger.get_transaction_arjunacore_nullparam());
        }
    }

    public void registerBean(Contextual contextual, CreationalContext creationalContext, T bean) {
        beans.add(new TransactionScopedBean(contextual, creationalContext, bean));
    }

    @Override
    public void beforeCompletion() {
    }

    @Override
    public void afterCompletion(int i) {
        for (TransactionScopedBean bean : beans)
            bean.destroy();

        context.cleanupScope(transaction);
    }

    private class TransactionScopedBean {
        Contextual contextual;
        CreationalContext creationalContext;
        T bean;

        private TransactionScopedBean(Contextual contextual, CreationalContext creationalContext, T bean) {
            this.contextual = contextual;
            this.creationalContext = creationalContext;
            this.bean = bean;
        }

        public  void destroy() {
            contextual.destroy(bean, creationalContext);
        }
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy