Fixed in r1616928

Regards
Scott

On 9/08/2014, at 12:41 pm, Scott Gray <[email protected]> wrote:

> Oh sorry, force of habit I guess.  If we've stopped using it, why haven't we 
> removed the libs?  That's a sure fire way of preventing its use!
> 
> Regards
> Scott
> 
> On 9/08/2014, at 12:24 pm, Adrian Crum <[email protected]> 
> wrote:
> 
>> :(
>> 
>> I thought we stopped using Javolution.
>> 
>> Adrian Crum
>> Sandglass Software
>> www.sandglass-software.com
>> 
>> On 8/9/2014 10:00 AM, [email protected] wrote:
>>> Author: lektran
>>> Date: Sat Aug  9 09:00:39 2014
>>> New Revision: 1616925
>>> 
>>> URL: http://svn.apache.org/r1616925
>>> Log:
>>> Replace the ServiceXaWrapper with a simpler Synchronization implementation. 
>>>  Helps pave the way for use of alternative transaction management libraries 
>>> that don't work well with our XA wrapper implementations. Still 
>>> DebugXaResource to go.
>>> 
>>> Added:
>>>    
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceSynchronization.java
>>>    (with props)
>>> Modified:
>>>    
>>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/valuelink/ValueLinkServices.java
>>>    ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java
>>>    
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/GenericAbstractDispatcher.java
>>>    ofbiz/trunk/framework/service/src/org/ofbiz/service/LocalDispatcher.java
>>>    ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceXaWrapper.java
>>>    
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java
>>> 
>>> Modified: 
>>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/valuelink/ValueLinkServices.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/valuelink/ValueLinkServices.java?rev=1616925&r1=1616924&r2=1616925&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/valuelink/ValueLinkServices.java
>>>  (original)
>>> +++ 
>>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/valuelink/ValueLinkServices.java
>>>  Sat Aug  9 09:00:39 2014
>>> @@ -24,8 +24,6 @@ import java.util.Locale;
>>> import java.util.Map;
>>> import java.util.Properties;
>>> 
>>> -import javax.transaction.xa.XAException;
>>> -
>>> import javolution.util.FastMap;
>>> 
>>> import org.ofbiz.base.util.Debug;
>>> @@ -48,7 +46,6 @@ import org.ofbiz.service.GenericServiceE
>>> import org.ofbiz.service.LocalDispatcher;
>>> import org.ofbiz.service.ModelService;
>>> import org.ofbiz.service.ServiceUtil;
>>> -import org.ofbiz.service.ServiceXaWrapper;
>>> 
>>> /**
>>>  * ValueLinkServices - Integration with ValueLink Gift Cards
>>> @@ -792,13 +789,11 @@ public class ValueLinkServices {
>>>         // Activate/Rollback is not supported by valuelink
>>>         if (!vlInterface.equals("Activate")) {
>>>             // create the listener
>>> -            ServiceXaWrapper xaw = new ServiceXaWrapper(dctx);
>>> -            xaw.setRollbackService("vlTimeOutReversal", context);
>>> -            //xaw.setCommitService("vlTimeOutReversal", context);
>>>             Debug.logInfo("Set 704 context : " + context, module);
>>>             try {
>>> -                xaw.enlist();
>>> -            } catch (XAException e) {
>>> +                
>>> dctx.getDispatcher().addRollbackService("vlTimeOutReversal", context, 
>>> false);
>>> +                
>>> //dctx.getDispatcher().addCommitService("vlTimeOutReversal", context, 
>>> false);
>>> +            } catch (GenericServiceException e) {
>>>                 Debug.logError(e, "Unable to setup 0704 Timeout Reversal", 
>>> module);
>>>             }
>>>         }
>>> @@ -1214,14 +1209,10 @@ public class ValueLinkServices {
>>>             }
>>> 
>>>             if (!failure) {
>>> -                // set the void on rollback wrapper
>>> -                ServiceXaWrapper xaw = new ServiceXaWrapper(dctx);
>>> -                activateCtx.put("cardNumber", 
>>> activateResult.get("cardNumber"));
>>> -                activateCtx.put("pin", activateResult.get("pin"));
>>> -                xaw.setRollbackService("voidActivateGiftCard", 
>>> activateCtx);
>>> +                // set the void on rollback
>>>                 try {
>>> -                    xaw.enlist();
>>> -                } catch (XAException e) {
>>> +                    dispatcher.addRollbackService("voidActivateGiftCard", 
>>> activateCtx, false);
>>> +                } catch (GenericServiceException e) {
>>>                     Debug.logError(e, "Unable to setup Activate/Void on 
>>> error", module);
>>>                 }
>>>             }
>>> 
>>> Modified: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java?rev=1616925&r1=1616924&r2=1616925&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java 
>>> (original)
>>> +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java 
>>> Sat Aug  9 09:00:39 2014
>>> @@ -40,7 +40,6 @@ import java.util.Set;
>>> import java.util.TreeSet;
>>> 
>>> import javax.mail.internet.MimeMessage;
>>> -import javax.transaction.xa.XAException;
>>> 
>>> import javolution.util.FastList;
>>> import javolution.util.FastMap;
>>> @@ -65,8 +64,8 @@ import org.ofbiz.service.DispatchContext
>>> import org.ofbiz.service.GenericServiceException;
>>> import org.ofbiz.service.LocalDispatcher;
>>> import org.ofbiz.service.ModelService;
>>> +import org.ofbiz.service.ServiceSynchronization;
>>> import org.ofbiz.service.ServiceUtil;
>>> -import org.ofbiz.service.ServiceXaWrapper;
>>> import org.ofbiz.service.mail.MimeMessageWrapper;
>>> import org.owasp.esapi.errors.EncodingException;
>>> 
>>> @@ -142,23 +141,19 @@ public class CommonServices {
>>>     }
>>> 
>>>     public static Map<String, Object> testRollbackListener(DispatchContext 
>>> dctx, Map<String, ?> context) {
>>> -        Locale locale = (Locale) context.get("locale");
>>> -        ServiceXaWrapper xar = new ServiceXaWrapper(dctx);
>>> -        xar.setRollbackService("testScv", context);
>>>         try {
>>> -            xar.enlist();
>>> -        } catch (XAException e) {
>>> +            ServiceSynchronization.registerRollbackService(dctx, 
>>> "testScv", null, context, false, false);
>>> +        } catch (GenericServiceException e) {
>>>             Debug.logError(e, module);
>>>         }
>>> +        Locale locale = (Locale) context.get("locale");
>>>         return ServiceUtil.returnError(UtilProperties.getMessage(resource, 
>>> "CommonTestRollingBack", locale));
>>>     }
>>> 
>>>     public static Map<String, Object> testCommitListener(DispatchContext 
>>> dctx, Map<String, ?> context) {
>>> -        ServiceXaWrapper xar = new ServiceXaWrapper(dctx);
>>> -        xar.setCommitService("testScv", context);
>>>         try {
>>> -            xar.enlist();
>>> -        } catch (XAException e) {
>>> +            ServiceSynchronization.registerCommitService(dctx, "testScv", 
>>> null, context, false, false);
>>> +        } catch (GenericServiceException e) {
>>>             Debug.logError(e, module);
>>>         }
>>>         return ServiceUtil.returnSuccess();
>>> 
>>> Modified: 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/GenericAbstractDispatcher.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/GenericAbstractDispatcher.java?rev=1616925&r1=1616924&r2=1616925&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/GenericAbstractDispatcher.java
>>>  (original)
>>> +++ 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/GenericAbstractDispatcher.java
>>>  Sat Aug  9 09:00:39 2014
>>> @@ -22,7 +22,6 @@ import java.util.Date;
>>> import java.util.Map;
>>> 
>>> import javax.transaction.Transaction;
>>> -import javax.transaction.xa.XAException;
>>> 
>>> import org.ofbiz.service.calendar.RecurrenceRule;
>>> import org.ofbiz.entity.Delegator;
>>> @@ -117,14 +116,7 @@ public abstract class GenericAbstractDis
>>>     }
>>> 
>>>     public void addRollbackService(String serviceName, Map<String, ? 
>>> extends Object> context, boolean persist) throws GenericServiceException {
>>> -        ServiceXaWrapper xa = new 
>>> ServiceXaWrapper(this.getDispatchContext());
>>> -        xa.setRollbackService(serviceName, context, true, persist);
>>> -        try {
>>> -            xa.enlist();
>>> -        } catch (XAException e) {
>>> -            Debug.logError(e, module);
>>> -            throw new GenericServiceException(e.getMessage(), e);
>>> -        }
>>> +        
>>> ServiceSynchronization.registerRollbackService(this.getDispatchContext(), 
>>> serviceName, null, context, true, persist);
>>>     }
>>> 
>>>     public void addRollbackService(String serviceName, boolean persist, 
>>> Object... context) throws GenericServiceException {
>>> @@ -132,14 +124,7 @@ public abstract class GenericAbstractDis
>>>     }
>>> 
>>>     public void addCommitService(String serviceName, Map<String, ? extends 
>>> Object> context, boolean persist) throws GenericServiceException {
>>> -        ServiceXaWrapper xa = new 
>>> ServiceXaWrapper(this.getDispatchContext());
>>> -        xa.setCommitService(serviceName, context, true, persist);
>>> -        try {
>>> -            xa.enlist();
>>> -        } catch (XAException e) {
>>> -            Debug.logError(e, module);
>>> -            throw new GenericServiceException(e.getMessage(), e);
>>> -        }
>>> +        
>>> ServiceSynchronization.registerCommitService(this.getDispatchContext(), 
>>> serviceName, null, context, true, persist);
>>>     }
>>> 
>>>     public void addCommitService(String serviceName, boolean persist, 
>>> Object... context) throws GenericServiceException {
>>> 
>>> Modified: 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/LocalDispatcher.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/LocalDispatcher.java?rev=1616925&r1=1616924&r2=1616925&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/LocalDispatcher.java 
>>> (original)
>>> +++ 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/LocalDispatcher.java 
>>> Sat Aug  9 09:00:39 2014
>>> @@ -281,7 +281,7 @@ public interface LocalDispatcher {
>>> 
>>> 
>>>     /**
>>> -     * Adds a rollback service to the current TX using the ServiceXaWrapper
>>> +     * Adds a rollback service to the current TX using 
>>> ServiceSynchronization
>>>      * @param serviceName
>>>      * @param context
>>>      * @param persist
>>> @@ -291,7 +291,7 @@ public interface LocalDispatcher {
>>>     public void addRollbackService(String serviceName, boolean persist, 
>>> Object... context) throws GenericServiceException;
>>> 
>>>     /**
>>> -     * Adds a commit service to the current TX using the ServiceXaWrapper
>>> +     * Adds a commit service to the current TX using ServiceSynchronization
>>>      * @param serviceName
>>>      * @param context
>>>      * @param persist
>>> 
>>> Added: 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceSynchronization.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceSynchronization.java?rev=1616925&view=auto
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceSynchronization.java
>>>  (added)
>>> +++ 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceSynchronization.java
>>>  Sat Aug  9 09:00:39 2014
>>> @@ -0,0 +1,167 @@
>>> +package org.ofbiz.service;
>>> +
>>> +import java.util.List;
>>> +import java.util.Map;
>>> +import java.util.WeakHashMap;
>>> +
>>> +import javax.transaction.RollbackException;
>>> +import javax.transaction.Status;
>>> +import javax.transaction.Synchronization;
>>> +import javax.transaction.SystemException;
>>> +import javax.transaction.Transaction;
>>> +
>>> +import javolution.util.FastList;
>>> +import javolution.util.FastMap;
>>> +
>>> +import org.ofbiz.base.util.Debug;
>>> +import org.ofbiz.entity.transaction.GenericTransactionException;
>>> +import org.ofbiz.entity.transaction.TransactionFactory;
>>> +import org.ofbiz.entity.transaction.TransactionUtil;
>>> +
>>> +/**
>>> + * This class is used to execute services when a transaction is either
>>> + * committed or rolled back.  It should generally be accessed via
>>> + * LocalDispatcher's addCommitService and addRollbackService methods
>>> + * or by using the service ECA event attribute values global-commit,
>>> + * global-rollback or global-commit-post-run
>>> + *
>>> + */
>>> +public class ServiceSynchronization implements Synchronization {
>>> +
>>> +    public static final String MODULE = 
>>> ServiceSynchronization.class.getName();
>>> +
>>> +    private static Map<Transaction, ServiceSynchronization> syncingleton = 
>>> new WeakHashMap<Transaction, ServiceSynchronization>();
>>> +    private List<ServiceExecution> services = FastList.newInstance();
>>> +
>>> +    public static void registerCommitService(DispatchContext dctx, String 
>>> serviceName, String runAsUser, Map<String, ? extends Object> context, 
>>> boolean async, boolean persist) throws GenericServiceException {
>>> +        ServiceSynchronization sync = ServiceSynchronization.getInstance();
>>> +        if (sync != null) {
>>> +            sync.services.add(new ServiceExecution(dctx, serviceName, 
>>> runAsUser, context, async, persist, false));
>>> +        }
>>> +    }
>>> +
>>> +    public static void registerRollbackService(DispatchContext dctx, 
>>> String serviceName, String runAsUser, Map<String, ? extends Object> 
>>> context, boolean async, boolean persist) throws GenericServiceException {
>>> +        ServiceSynchronization sync = ServiceSynchronization.getInstance();
>>> +        if (sync != null) {
>>> +            sync.services.add(new ServiceExecution(dctx, serviceName, 
>>> runAsUser, context, async, persist, true));
>>> +        }
>>> +    }
>>> +
>>> +    protected static ServiceSynchronization getInstance() throws 
>>> GenericServiceException {
>>> +        ServiceSynchronization sync = null;
>>> +        try {
>>> +            Transaction transaction = 
>>> TransactionFactory.getTransactionManager().getTransaction();
>>> +            synchronized (transaction) {
>>> +                sync = syncingleton.get(transaction);
>>> +                if (sync == null) {
>>> +                    sync = new ServiceSynchronization();
>>> +                    transaction.registerSynchronization(sync);
>>> +                    syncingleton.put(transaction, sync);
>>> +                }
>>> +            }
>>> +        } catch (SystemException e) {
>>> +            throw new GenericServiceException(e.getMessage(), e);
>>> +        } catch (IllegalStateException e) {
>>> +            throw new GenericServiceException(e.getMessage(), e);
>>> +        } catch (RollbackException e) {
>>> +            throw new GenericServiceException(e.getMessage(), e);
>>> +        }
>>> +        return sync;
>>> +    }
>>> +
>>> +    @Override
>>> +    public void afterCompletion(int status) {
>>> +        for (ServiceExecution serviceExec : this.services) {
>>> +            serviceExec.runService(status);
>>> +        }
>>> +    }
>>> +
>>> +    @Override
>>> +    public void beforeCompletion() {
>>> +
>>> +    }
>>> +
>>> +    static class ServiceExecution {
>>> +        protected DispatchContext dctx = null;
>>> +        protected String serviceName;
>>> +        protected String runAsUser = null;
>>> +        protected Map<String, ? extends Object> context = null;
>>> +        protected boolean rollback = false;
>>> +        protected boolean persist = true;
>>> +        protected boolean async = false;
>>> +
>>> +        ServiceExecution(DispatchContext dctx, String serviceName, String 
>>> runAsUser, Map<String, ? extends Object> context, boolean async, boolean 
>>> persist, boolean rollback) {
>>> +            this.dctx = dctx;
>>> +            this.serviceName = serviceName;
>>> +            this.runAsUser = runAsUser;
>>> +            this.context = context;
>>> +            this.async = async;
>>> +            this.persist = persist;
>>> +            this.rollback = rollback;
>>> +        }
>>> +
>>> +        protected void runService(int status) {
>>> +            if ((status == Status.STATUS_COMMITTED && !rollback) || 
>>> (status == Status.STATUS_ROLLEDBACK && rollback)) {
>>> +                Thread thread = new Thread() {
>>> +                    @Override
>>> +                    public void run() {
>>> +                        String msgPrefix = null;
>>> +                        if (rollback) {
>>> +                            msgPrefix = "[Rollback] ";
>>> +                        } else {
>>> +                            msgPrefix = "[Commit] ";
>>> +                        }
>>> +
>>> +                        boolean beganTx;
>>> +                        try {
>>> +                            // begin the new tx
>>> +                            beganTx = TransactionUtil.begin();
>>> +                            // configure and run the service
>>> +                            try {
>>> +                                // obtain the model and get the valid 
>>> context
>>> +                                ModelService model = 
>>> dctx.getModelService(serviceName);
>>> +                                Map<String, Object> thisContext;
>>> +                                if (model.validate) {
>>> +                                    thisContext = model.makeValid(context, 
>>> ModelService.IN_PARAM);
>>> +                                } else {
>>> +                                    thisContext = FastMap.newInstance();
>>> +                                    thisContext.putAll(context);
>>> +                                }
>>> +
>>> +                                // set the userLogin object
>>> +                                thisContext.put("userLogin", 
>>> ServiceUtil.getUserLogin(dctx, thisContext, runAsUser));
>>> +                                if (async) {
>>> +                                    if (Debug.infoOn()) 
>>> Debug.logInfo(msgPrefix + "Invoking [" + serviceName + "] via runAsync", 
>>> MODULE);
>>> +                                    
>>> dctx.getDispatcher().runAsync(serviceName, thisContext, persist);
>>> +                                } else {
>>> +                                    if (Debug.infoOn()) 
>>> Debug.logInfo(msgPrefix + "Invoking [" + serviceName + "] via 
>>> runSyncIgnore", MODULE);
>>> +                                    
>>> dctx.getDispatcher().runSyncIgnore(serviceName, thisContext);
>>> +                                }
>>> +                            } catch (Throwable t) {
>>> +                                Debug.logError(t, "Problem calling " + 
>>> msgPrefix + "service : " + serviceName + " / " + context, MODULE);
>>> +                                try {
>>> +                                    TransactionUtil.rollback(beganTx, 
>>> t.getMessage(), t);
>>> +                                } catch (GenericTransactionException e) {
>>> +                                    Debug.logError(e, MODULE);
>>> +                                }
>>> +
>>> +                            } finally {
>>> +                                // commit the transaction
>>> +                                try {
>>> +                                    TransactionUtil.commit(beganTx);
>>> +                                } catch (GenericTransactionException e) {
>>> +                                    Debug.logError(e, MODULE);
>>> +                                }
>>> +                            }
>>> +                        } catch (GenericTransactionException e) {
>>> +                            Debug.logError(e, MODULE);
>>> +                        }
>>> +
>>> +                    }
>>> +                };
>>> +                thread.start();
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +}
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceSynchronization.java
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceSynchronization.java
>>> ------------------------------------------------------------------------------
>>>    svn:keywords = "Date Rev Author URL Id"
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceSynchronization.java
>>> ------------------------------------------------------------------------------
>>>    svn:mime-type = text/plain
>>> 
>>> Modified: 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceXaWrapper.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceXaWrapper.java?rev=1616925&r1=1616924&r2=1616925&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceXaWrapper.java 
>>> (original)
>>> +++ 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/ServiceXaWrapper.java 
>>> Sat Aug  9 09:00:39 2014
>>> @@ -34,7 +34,9 @@ import org.ofbiz.entity.transaction.Tran
>>> 
>>> /**
>>>  * ServiceXaWrapper - XA Resource wrapper for running services on commit() 
>>> or rollback()
>>> + * @deprecated - Use ServiceSynchronization instead (via LocalDispatcher)
>>>  */
>>> +@Deprecated
>>> public class ServiceXaWrapper extends GenericXaResource {
>>> 
>>>     public static final String module = ServiceXaWrapper.class.getName();
>>> 
>>> Modified: 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java?rev=1616925&r1=1616924&r2=1616925&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java
>>>  (original)
>>> +++ 
>>> ofbiz/trunk/framework/service/src/org/ofbiz/service/eca/ServiceEcaAction.java
>>>  Sat Aug  9 09:00:39 2014
>>> @@ -22,8 +22,6 @@ import java.util.LinkedList;
>>> import java.util.List;
>>> import java.util.Map;
>>> 
>>> -import javax.transaction.xa.XAException;
>>> -
>>> import javolution.util.FastMap;
>>> 
>>> import org.ofbiz.base.util.Debug;
>>> @@ -33,8 +31,8 @@ import org.ofbiz.service.DispatchContext
>>> import org.ofbiz.service.GenericServiceException;
>>> import org.ofbiz.service.LocalDispatcher;
>>> import org.ofbiz.service.ModelService;
>>> +import org.ofbiz.service.ServiceSynchronization;
>>> import org.ofbiz.service.ServiceUtil;
>>> -import org.ofbiz.service.ServiceXaWrapper;
>>> import org.w3c.dom.Element;
>>> 
>>> /**
>>> @@ -115,19 +113,12 @@ public class ServiceEcaAction implements
>>>         }
>>> 
>>>         if (eventName.startsWith("global-")) {
>>> -            // XA resource ECA
>>> -            ServiceXaWrapper xaw = new ServiceXaWrapper(dctx);
>>>             if (eventName.equals("global-rollback")) {
>>> -                xaw.setRollbackService(serviceName, runAsUser, context, 
>>> "async".equals(serviceMode), persist); // using the actual context so we 
>>> get updates
>>> +                ServiceSynchronization.registerRollbackService(dctx, 
>>> serviceName, runAsUser, context, "async".equals(serviceMode), persist); // 
>>> using the actual context so we get updates
>>>             } else if (eventName.equals("global-commit")) {
>>> -                xaw.setCommitService(serviceName, runAsUser, context, 
>>> "async".equals(serviceMode), persist);   // using the actual context so we 
>>> get updates
>>> +                ServiceSynchronization.registerCommitService(dctx, 
>>> serviceName, runAsUser, context, "async".equals(serviceMode), persist); // 
>>> using the actual context so we get updates
>>>             } else if (eventName.equals("global-commit-post-run")) {
>>> -                xaw.setCommitService(serviceName, runAsUser, context, 
>>> "async".equals(serviceMode), persist);   // using the actual context so we 
>>> get updates
>>> -            }
>>> -            try {
>>> -                xaw.enlist();
>>> -            } catch (XAException e) {
>>> -                throw new GenericServiceException("Unable to enlist 
>>> ServiceXaWrapper with transaction", e);
>>> +                ServiceSynchronization.registerCommitService(dctx, 
>>> serviceName, runAsUser, context, "async".equals(serviceMode), persist); // 
>>> using the actual context so we get updates
>>>             }
>>>         } else {
>>>             // standard ECA
>>> 
>>> 
> 

Reply via email to