001
014
015 package com.liferay.portal.spring.transaction;
016
017 import java.lang.reflect.AccessibleObject;
018 import java.lang.reflect.Method;
019
020 import java.util.concurrent.Callable;
021
022 import org.aopalliance.intercept.MethodInvocation;
023
024 import org.springframework.transaction.PlatformTransactionManager;
025 import org.springframework.transaction.interceptor.TransactionAttribute;
026
027
030 public class TransactionalCallableUtil {
031
032 public static <T> T call(
033 TransactionAttribute transactionAttribute, Callable<T> callable)
034 throws Throwable {
035
036 return (T)_transactionExecutor.execute(
037 _platformTransactionManager, transactionAttribute,
038 new CallableMethodInvocation(callable));
039 }
040
041 public void setPlatformTransactionManager(
042 PlatformTransactionManager platformTransactionManager) {
043
044 _platformTransactionManager = platformTransactionManager;
045 }
046
047 public void setTransactionExecutor(
048 TransactionExecutor transactionExecutor) {
049
050 _transactionExecutor = transactionExecutor;
051 }
052
053 private static PlatformTransactionManager _platformTransactionManager;
054 private static TransactionExecutor _transactionExecutor;
055
056 private static class CallableMethodInvocation implements MethodInvocation {
057
058 @Override
059 public Object[] getArguments() {
060 throw new UnsupportedOperationException();
061 }
062
063 @Override
064 public Method getMethod() {
065 throw new UnsupportedOperationException();
066 }
067
068 @Override
069 public AccessibleObject getStaticPart() {
070 throw new UnsupportedOperationException();
071 }
072
073 @Override
074 public Object getThis() {
075 throw new UnsupportedOperationException();
076 }
077
078 @Override
079 public Object proceed() throws Throwable {
080 return _callable.call();
081 }
082
083 private CallableMethodInvocation(Callable<?> callable) {
084 _callable = callable;
085 }
086
087 private final Callable<?> _callable;
088
089 }
090
091 }