source: contrib/MailArchiver/sources/src/serpro/mailarchiver/util/transaction/AnnotationTransactionAspect.java @ 6785

Revision 6785, 3.4 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado codigo do MailArchiver?. Documentação na subpasta DOCS.

Line 
1/**
2 * MailArchiver is an application that provides services for storing and managing e-mail messages through a Web Services SOAP interface.
3 * Copyright (C) 2012  Marcio Andre Scholl Levien and Fernando Alberto Reuter Wendt and Jose Ronaldo Nogueira Fonseca Junior
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19/******************************************************************************\
20*
21*  This product was developed by
22*
23*        SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO),
24*
25*  a government company established under Brazilian law (5.615/70),
26*  at Department of Development of Porto Alegre.
27*
28\******************************************************************************/
29
30package serpro.mailarchiver.util.transaction;
31
32import org.aspectj.lang.annotation.Aspect;
33import org.aspectj.lang.annotation.Pointcut;
34
35import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource;
36import org.springframework.transaction.aspectj.AbstractTransactionAspect;
37
38@Aspect
39public class AnnotationTransactionAspect extends AbstractTransactionAspect {
40
41    public AnnotationTransactionAspect() {
42        super(new AnnotationTransactionAttributeSource(false));
43    }
44
45    /**
46     * Matches the execution of any public method in a type with the
47     * Transactional annotation, or any subtype of a type with the
48     * Transactional annotation.
49     */
50    @Pointcut("execution(public * ((@Transactional *)+).*(..)) && @this(org.springframework.transaction.annotation.Transactional)")
51    private void executionOfAnyPublicMethodInAtTransactionalType() {}
52
53    /**
54     * Matches the execution of any method with the
55     * Transactional annotation.
56     */
57    @Pointcut("execution(* *(..)) && @annotation(org.springframework.transaction.annotation.Transactional)")
58    private void executionOfTransactionalMethod() {}
59
60    /**
61     * Matches the execution of any method with the
62     * WithReadOnlyTx annotation.
63     */
64    @Pointcut("execution(* *(..)) && @annotation(serpro.mailarchiver.util.transaction.WithReadOnlyTx)")
65    private void executionOfWithReadOnlyTxMethod() {}
66
67    /**
68     * Matches the execution of any method with the
69     * WithReadWriteTx annotation.
70     */
71    @Pointcut("execution(* *(..)) && @annotation(serpro.mailarchiver.util.transaction.WithReadWriteTx)")
72    private void executionOfWithReadWriteTxMethod() {}
73
74    /**
75     * Definition of pointcut from super aspect - matched join points
76     * will have Spring transaction management applied.
77     */
78    @Pointcut("(executionOfAnyPublicMethodInAtTransactionalType()"
79    + "||executionOfTransactionalMethod()"
80    + "||executionOfWithReadOnlyTxMethod()"
81    + "||executionOfWithReadWriteTxMethod()"
82    + ")"
83    + "&& this(txObject)")
84    protected void transactionalMethodExecution(Object txObject) {}
85}
Note: See TracBrowser for help on using the repository browser.