service에서 transaction 처리
- 작성자 :
- 차*원
- 작성일 :
- 2010-06-03 12:07:12
- 조회수 :
- 4,333
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
Service 에서 transactio 질문입니다.
설정과 소스는 다음과 같습니다.
- 설정 -
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="select*" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx"
expression="execution(* egovframework.**.*Impl.*(..))"/>
<aop:advisor advice-ref="txAdvice"
pointcut-ref="requiredTx" />
</aop:config>
- 소스 -
@Service
public class AServiceImpl implements AService
{
public void insertA() throws Exception
{
// insert
}
public void deleteA() throws Exception
{
// delete
}
public void updateB() throws Exception
{
// update
}
public void updateA() throws Exception
{
if(condition)
{
insertA();
}
else if(condition)
{
deleteA();
}
else
{
updateB();
}
// update
}
}
- 질문 -
Service 내부에서 updateA()를 수행 할경우 같은 Service 내에 있는 메소드 호출시
트렌젝션 처리가 어떻게 되는지 궁금합니다.
하나의 updateA라는 메소드에 걸린 하나의 트렌젝션으로 처리가 되는지 아니면
updateA에 사용된 insertA, deleteA, updataA 각각 별도로 트렌잭션이 걸리는지
그리고 updateA 처리중 insertA나 updateB, deleteA 과정은 정상이지만
다음 부분에 Exception 발생시 전체 처리된게 롤백 되게 설정을 맞게 한건지 궁금합니다.
설정과 소스는 다음과 같습니다.
- 설정 -
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="select*" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx"
expression="execution(* egovframework.**.*Impl.*(..))"/>
<aop:advisor advice-ref="txAdvice"
pointcut-ref="requiredTx" />
</aop:config>
- 소스 -
@Service
public class AServiceImpl implements AService
{
public void insertA() throws Exception
{
// insert
}
public void deleteA() throws Exception
{
// delete
}
public void updateB() throws Exception
{
// update
}
public void updateA() throws Exception
{
if(condition)
{
insertA();
}
else if(condition)
{
deleteA();
}
else
{
updateB();
}
// update
}
}
- 질문 -
Service 내부에서 updateA()를 수행 할경우 같은 Service 내에 있는 메소드 호출시
트렌젝션 처리가 어떻게 되는지 궁금합니다.
하나의 updateA라는 메소드에 걸린 하나의 트렌젝션으로 처리가 되는지 아니면
updateA에 사용된 insertA, deleteA, updataA 각각 별도로 트렌잭션이 걸리는지
그리고 updateA 처리중 insertA나 updateB, deleteA 과정은 정상이지만
다음 부분에 Exception 발생시 전체 처리된게 롤백 되게 설정을 맞게 한건지 궁금합니다.
A
안녕하세요.. 차재원님
올려주신 transaction 처리 방법은 AOP에 의한 방법으로 정의되어 있는 pointcut에 의해 지정된 클래스의 메소드가 호출되는 시점부터 transaction 영역으로 처리됩니다.
즉 updateA 메소드가 처음으로 호출되는 시점부터 transaction이 처리되기 때문에 그 안에서 호출되는 다른 메소드들도 같은 transaction 영역으로 묶이게 됩니다.
자세한 내용은 가이드를 참조하시면 될 것 같습니다.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:psl:transaction:declarative_transaction_management
그리고.. "rollback-for"의 의미가 해당 Exception이 발생되는 경우는 rollback을 처리하라는 의미입니다.
일반적으로 위와 같이 정의하시면 됩니다.
그럼.. 즐거운 하루되십시오.
감사합니다.
올려주신 transaction 처리 방법은 AOP에 의한 방법으로 정의되어 있는 pointcut에 의해 지정된 클래스의 메소드가 호출되는 시점부터 transaction 영역으로 처리됩니다.
즉 updateA 메소드가 처음으로 호출되는 시점부터 transaction이 처리되기 때문에 그 안에서 호출되는 다른 메소드들도 같은 transaction 영역으로 묶이게 됩니다.
자세한 내용은 가이드를 참조하시면 될 것 같습니다.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:psl:transaction:declarative_transaction_management
그리고.. "rollback-for"의 의미가 해당 Exception이 발생되는 경우는 rollback을 처리하라는 의미입니다.
일반적으로 위와 같이 정의하시면 됩니다.
그럼.. 즐거운 하루되십시오.
감사합니다.