package org.mobicents.slee.resource; import javax.slee.SLEEException; import javax.slee.resource.ActivityHandle; import javax.slee.resource.StartActivityException; import javax.transaction.NotSupportedException; import javax.transaction.SystemException; import javax.transaction.Transaction; import org.mobicents.slee.container.SleeContainer; import org.mobicents.slee.runtime.transaction.SleeTransactionManager; public class SleeEndpointStartActivityNotTransactedExecutor { private final SleeContainer sleeContainer; private final SleeEndpointImpl sleeEndpoint; public SleeEndpointStartActivityNotTransactedExecutor(SleeContainer sleeContainer,SleeEndpointImpl sleeEndpoint) { this.sleeContainer = sleeContainer; this.sleeEndpoint = sleeEndpoint; } void execute(final ActivityHandle handle, final int activityFlags) throws StartActivityException, SLEEException { final SleeTransactionManager txManager = sleeContainer.getTransactionManager(); final Runnable runnable = new Runnable() { public void run() { boolean rollback = true; try { txManager.begin(); sleeEndpoint._startActivity(handle, activityFlags); rollback = false; } catch (NotSupportedException e) { throw new SLEEException(e.getMessage(),e); } catch (SystemException e) { throw new SLEEException(e.getMessage(),e); } finally { try { if (rollback) { txManager.rollback(); } else { txManager.commit(); } } catch (Throwable e) { throw new SLEEException(e.getMessage(),e); } } } }; Transaction tx = null; try { tx = txManager.getTransaction(); if (tx != null) { txManager.suspend(); } runnable.run(); } catch (SystemException e) { throw new SLEEException(e.getMessage(),e); } finally { if (tx != null) { try { txManager.resume(tx); } catch (Throwable e) { throw new SLEEException(e.getMessage(),e); } } } } }