Skip to main content

Transaction AOP 예외 처리


Service class 단위의 트랜잭션 처리는 다음의 설정으로 가능합니다.

<!-- Transaction AOP -->
<aop:config proxy-target-class="true">
<aop:pointcut id="serviceMethods"
expression="execution(* *..*Service.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>
<!-- Transaction -->

여기서 트랜잭션 예외 처리를 하려면 메소드 명을 다음과 같이 해야 합니다.

    <!-- Transaction -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
  <tx:method name="retrieve*" read-only="true" />
  <tx:method name="get*" read-only="true" />
  <tx:method name="print*" read-only="true" />
  <tx:method name="start*" propagation="REQUIRES_NEW"/>
<tx:method name="finish*" propagation="REQUIRES_NEW"/>
<tx:method name="error*" propagation="REQUIRES_NEW"/>
<tx:method name="logging*" propagation="REQUIRES_NEW"/>
<tx:method name="*" propagation="REQUIRED" timeout="10000" />
</tx:attributes>
</tx:advice>

=> start, finish, error, logging 으로 시작되는 public 메소드명 사용

* 여기서 문제는 메인 메소드와 트랜잭션 예외 처리해야 하는 메소드는 다른 클래스에서 선언된 것이어야 합니다.

관련 자료입니다.

http://www.javablog.fr/spring-transaction-visibility-proxy-propagation-required-and-requires_new.html

몇가지 솔루션들이 있는데 참고하시기 바랍니다.

1. When using proxies, the @Transactional annotation should only be applied to methods with public visibility
2. This means that ‘self-invocation’, i.e. a method within the target object calling some other method of the target object

Comments

Popular posts from this blog

Amazon RDS Blue/Green Deployments

In order to avoid some errors I experienced when proceeding as described in the official documentation, I describe what I did in order. 1) Modify parameters of source_database * error: Blue Green Deployments requires cluster parameter group has binlog enabled. RDS Parameter groups: source-params-group binlog_format => MIXED mysql> show global variables like 'binlog_format'; 2) Insert a row after rebooting the source database, to avoid this error. * error: Correct the replication errors and then switch over. Read Replica Replication Error - IOError: 1236, reason: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' => To Fix: You need to change the data in the source database. INSERT INTO dummy_table ( `favorite_id` , `favorite_order` , `user_id` , `board_id` ) VALUES ('100001', '1', '11111', '11111'); 3) Modify the param...

Fluentd for mysql in AWS

(0) preparation ulimit -n If your console shows 1024, it is insufficient. Please add following lines to your /etc/security/limits.conf file and reboot your machine. root soft nofile 65536 root hard nofile 65536 (1) install Fluentd // “Ubuntu 12.04 LTS / Precise” curl -L http://toolbelt.treasuredata.com/sh/install-ubuntu-precise.sh | sh /etc/init.d/td-agent start/stop/restart/status // test curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test /etc/init.d/td-agent stop chown: changing ownership of `/var/run/td-agent/td-agent.pid': Operation not permitted chown: changing ownership of `/var/run/td-agent': Operation not permitted  * Stopping td-agent td-agent                                                                                   ...

Install CoreOs on linode without VM

Install CoreOs on linode without VM 1. Add a Linode 2. Create a new Disk   CoreOS 3. Rescue > Reboot into Rescue Mode 4. Remote Access   Launch Lish Console 5. make an install script cat <<'EOF1' > install.sh # add needed package sudo apt-get update sudo apt-get install -y curl wget whois sudo apt-get install -y ca-certificates #sudo apt-get install gawk -y # get discovery url discoveryUrl=`curl https://discovery.etcd.io/new` # write cloud-config.yml cat <<EOF2 > cloud-config.yml #cloud-config users:   - name: core     groups:       - sudo       - docker coreos:   etcd:     name: node01     discovery: $discoveryUrl hostname: node01 EOF2 # get the coreos installation script #wget https://raw.github.com/coreos/init/master/bin/coreos-install wget https://raw.githubusercontent.com/coreos/init/master/bin/coreos-install # run installation chmod 75...