001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.spring.transaction;
016    
017    import com.liferay.portal.kernel.transaction.Isolation;
018    import com.liferay.portal.kernel.transaction.Propagation;
019    import com.liferay.portal.kernel.transaction.TransactionAttribute;
020    import com.liferay.portal.kernel.transaction.TransactionAttribute.Builder;
021    import com.liferay.portal.kernel.transaction.TransactionLifecycleManager;
022    import com.liferay.portal.kernel.transaction.TransactionStatus;
023    
024    /**
025     * @author Michael C. Han
026     * @author Shuyang Zhou
027     */
028    public abstract class BaseTransactionExecutor implements TransactionExecutor {
029    
030            protected TransactionAttribute createTransactionAttribute(
031                    org.springframework.transaction.interceptor.TransactionAttribute
032                            transactionAttribute) {
033    
034                    Builder builder = new Builder();
035    
036                    builder.setIsolation(
037                            Isolation.getIsolation(transactionAttribute.getIsolationLevel()));
038                    builder.setPropagation(
039                            Propagation.getPropagation(
040                                    transactionAttribute.getPropagationBehavior()));
041                    builder.setReadOnly(transactionAttribute.isReadOnly());
042    
043                    return builder.build();
044            }
045    
046            protected TransactionStatus createTransactionStatus(
047                    org.springframework.transaction.TransactionStatus transactionStatus) {
048    
049                    return new TransactionStatus(
050                            transactionStatus.isNewTransaction(),
051                            transactionStatus.isRollbackOnly(),
052                            transactionStatus.isCompleted());
053            }
054    
055            protected void fireTransactionCommittedEvent(
056                    org.springframework.transaction.interceptor.TransactionAttribute
057                            transactionAttribute,
058                    org.springframework.transaction.TransactionStatus transactionStatus) {
059    
060                    TransactionLifecycleManager.fireTransactionCommittedEvent(
061                            createTransactionAttribute(transactionAttribute),
062                            createTransactionStatus(transactionStatus));
063            }
064    
065            protected void fireTransactionCreatedEvent(
066                    org.springframework.transaction.interceptor.TransactionAttribute
067                            transactionAttribute,
068                    org.springframework.transaction.TransactionStatus transactionStatus) {
069    
070                    TransactionLifecycleManager.fireTransactionCreatedEvent(
071                            createTransactionAttribute(transactionAttribute),
072                            createTransactionStatus(transactionStatus));
073            }
074    
075            protected void fireTransactionRollbackedEvent(
076                    org.springframework.transaction.interceptor.TransactionAttribute
077                            transactionAttribute,
078                    org.springframework.transaction.TransactionStatus transactionStatus,
079                    Throwable throwable) {
080    
081                    TransactionLifecycleManager.fireTransactionRollbackedEvent(
082                            createTransactionAttribute(transactionAttribute),
083                            createTransactionStatus(transactionStatus), throwable);
084            }
085    
086    }