001
014
015 package com.liferay.portal.spring.transaction;
016
017 import com.liferay.portal.kernel.transaction.TransactionAttribute;
018 import com.liferay.portal.kernel.transaction.TransactionInvoker;
019 import com.liferay.portal.kernel.transaction.TransactionStatus;
020
021 import java.util.concurrent.Callable;
022
023 import org.springframework.transaction.support.DefaultTransactionStatus;
024
025
028 public class TransactionInvokerImpl implements TransactionInvoker {
029
030 @Override
031 public void commit(
032 TransactionAttribute transactionAttribute,
033 TransactionStatus transactionStatus) {
034
035 TransactionHandlerUtil.commit(
036 TransactionAttributeBuilder.build(
037 true, transactionAttribute.getIsolation(),
038 transactionAttribute.getPropagation(),
039 transactionAttribute.isReadOnly(),
040 transactionAttribute.getTimeout(),
041 transactionAttribute.getRollbackForClasses(),
042 transactionAttribute.getRollbackForClassNames(),
043 transactionAttribute.getNoRollbackForClasses(),
044 transactionAttribute.getNoRollbackForClassNames()),
045 toTransactionStatus(transactionStatus));
046 }
047
048 @Override
049 public <T> T invoke(
050 TransactionAttribute transactionAttribute, Callable<T> callable)
051 throws Throwable {
052
053 return TransactionHandlerUtil.invoke(
054 TransactionAttributeBuilder.build(
055 true, transactionAttribute.getIsolation(),
056 transactionAttribute.getPropagation(),
057 transactionAttribute.isReadOnly(),
058 transactionAttribute.getTimeout(),
059 transactionAttribute.getRollbackForClasses(),
060 transactionAttribute.getRollbackForClassNames(),
061 transactionAttribute.getNoRollbackForClasses(),
062 transactionAttribute.getNoRollbackForClassNames()),
063 callable);
064 }
065
066 @Override
067 public void rollback(
068 Throwable throwable, TransactionAttribute transactionAttribute,
069 TransactionStatus transactionStatus)
070 throws Throwable {
071
072 TransactionHandlerUtil.rollback(
073 throwable,
074 TransactionAttributeBuilder.build(
075 true, transactionAttribute.getIsolation(),
076 transactionAttribute.getPropagation(),
077 transactionAttribute.isReadOnly(),
078 transactionAttribute.getTimeout(),
079 transactionAttribute.getRollbackForClasses(),
080 transactionAttribute.getRollbackForClassNames(),
081 transactionAttribute.getNoRollbackForClasses(),
082 transactionAttribute.getNoRollbackForClassNames()),
083 toTransactionStatus(transactionStatus));
084 }
085
086 @Override
087 public TransactionStatus start(TransactionAttribute transactionAttribute) {
088 org.springframework.transaction.TransactionStatus transactionStatus =
089 TransactionHandlerUtil.start(
090 TransactionAttributeBuilder.build(
091 true, transactionAttribute.getIsolation(),
092 transactionAttribute.getPropagation(),
093 transactionAttribute.isReadOnly(),
094 transactionAttribute.getTimeout(),
095 transactionAttribute.getRollbackForClasses(),
096 transactionAttribute.getRollbackForClassNames(),
097 transactionAttribute.getNoRollbackForClasses(),
098 transactionAttribute.getNoRollbackForClassNames()));
099
100 return new TransactionStatus(
101 transactionStatus.isNewTransaction(),
102 transactionStatus.isRollbackOnly(),
103 transactionStatus.isCompleted());
104 }
105
106 protected static org.springframework.transaction.TransactionStatus
107 toTransactionStatus(TransactionStatus transactionStatus) {
108
109 DefaultTransactionStatus defaultTransactionStatus =
110 new DefaultTransactionStatus(
111 null, transactionStatus.isNewTransaction(), false, false, false,
112 null);
113
114 if (transactionStatus.isCompleted()) {
115 defaultTransactionStatus.setCompleted();
116 }
117
118 if (transactionStatus.isRollbackOnly()) {
119 defaultTransactionStatus.setRollbackOnly();
120 }
121
122 return defaultTransactionStatus;
123 }
124
125 }