001
014
015 package com.liferay.portal.spring.transaction;
016
017 import com.liferay.portal.dao.jdbc.aop.DynamicDataSourceAdvice;
018 import com.liferay.portal.dao.jdbc.aop.DynamicDataSourceTargetSource;
019 import com.liferay.portal.kernel.spring.util.FactoryBean;
020 import com.liferay.portal.kernel.util.InfrastructureUtil;
021
022 import org.aopalliance.intercept.MethodInterceptor;
023
024
027 public class TransactionInterceptorFactoryBean
028 implements FactoryBean<MethodInterceptor> {
029
030 @Override
031 public MethodInterceptor create() {
032 return new TransactionInterceptor();
033 }
034
035 @Override
036 public MethodInterceptor postProcessing(
037 MethodInterceptor methodInterceptor) {
038
039 DynamicDataSourceTargetSource dynamicDataSourceTargetSource =
040 (DynamicDataSourceTargetSource)
041 InfrastructureUtil.getDynamicDataSourceTargetSource();
042
043 if (dynamicDataSourceTargetSource == null) {
044 return methodInterceptor;
045 }
046
047 DynamicDataSourceAdvice dynamicDataSourceAdvice =
048 new DynamicDataSourceAdvice();
049
050 dynamicDataSourceAdvice.setDynamicDataSourceTargetSource(
051 dynamicDataSourceTargetSource);
052 dynamicDataSourceAdvice.setNextMethodInterceptor(methodInterceptor);
053
054 TransactionInterceptor transactionInterceptor =
055 (TransactionInterceptor)methodInterceptor;
056
057 dynamicDataSourceAdvice.setTransactionAttributeSource(
058 transactionInterceptor.transactionAttributeSource);
059
060 return dynamicDataSourceAdvice;
061 }
062
063 }