2014-12-26 2 views
0

저는 스프링 코어 인증을 받기 위해 공부하고 있는데 선언적 트랜시 컨 구성을 통해 XML 구성 파일을 통해 다음과 같은 의심을 품고 있습니다.Spring XML 구성을 사용하여 트랜잭션 동작을 활성화하는 방법은 무엇입니까?

그래서 나는 수업을 주석 트랜잭션 동작을 구성 할 수 있다는 것을 알고 \ 또는 트랜잭션 행동이 같을 필요는 방법 :

@Transactional(timeout=60) 
public class RewardNetworkImpl implements RewardNetwork { 

    public RewardConfirmation rewardAccountFor(Dining d) { 
     // atomic unit-of-work 
    } 

    @Transactional(timeout=45) 
    public RewardConfirmation updateConfirmation(RewardConfirmantion rc) { 
     // atomic unit-of-work 
    } 
} 

나 또한 가끔에 주석을 사용할 수 있다는 것을 알고 클래스 및 \ 또는 메소드의 트랜잭션 동작을 구성하십시오 (예 : 트랜잭션 방식으로 작동해야하는 메소드가 포함 된 클래스의 Java 코드가없는 경우).

XML 구성AOP을 사용하여 트랜잭션 동작을 구성 할 수 있습니다.

내가 이런 식으로 그것을 할 수 있다는 것을 알고 설명서를 읽기 :

  1. AOP 포인트 컷 조언하는 것을 선언합니다.

  2. 스프링의 tx 네임 스페이스는 거래상의 조언을 간결하게 정의합니다.

  3. 는 봄 콩

로 사용되는 클래스에 트랜잭션 동작을 추가 할 수 그리고 난 다음 예는 어떻게 관련이있다 :

<aop:config> 
    <aop:pointcut id=“rewardNetworkMethods” expression=“execution(* rewards.RewardNetwork.*(..))”/> 
    <aop:advisor pointcut-ref=“rewardNetworkMethods” advice-ref=“txAdvice”/> 
</aop:config> 

<tx:advice id=“txAdvice”> 
    <tx:attributes> 
     <tx:method name="get*" read-only="true" timeout="10"/> 
     <tx:method name="find*" read-only="true" timeout="10"/> 
     <tx:method name="*" timeout="30"/> 
    </tx:attributes> 
</tx:advice> 

<bean id=“transactionManager” 
class=“org.springframework.jdbc.datasource.DataSourceTransactionManager”> 
    <property name=“dataSource” ref=“dataSource”/> 
</bean> 

이 좋아,하지만 지금은 일부가 문제로 인해 이전 XML 구성이 정확히 무엇을하는지 이해해야합니다.

나는 첫 번째 섹션은 내가 조언을하고 싶은의 선언을 대표한다고 생각 :

그래서이 경우에 나는 rewards.RewardNetwork 안에있는 모든 방법과 관련된 포인트 컷을 선언하고
<aop:config> 
    <aop:pointcut id=“rewardNetworkMethods” expression=“execution(* rewards.RewardNetwork.*(..))”/> 
    <aop:advisor pointcut-ref=“rewardNetworkMethods” advice-ref=“txAdvice”/> 
</aop:config> 

모든 매개 변수를 취하고 모든 종류의 객체를 반환합니다.

그래서이 모든 방법에서 트랜잭션 동작을 추가하고 싶습니다. 또는 무엇을?

정확히이 태그의 두 번째 줄을 의미합니까?이것은 하나

: 다음

<aop:advisor pointcut-ref=“rewardNetworkMethods” advice-ref=“txAdvice”/> 

, 두 번째 섹션에, 이전의 pointcut 표현에 의해 트랜잭션 행동이이 방법을 사용할 것을 선택한 metodse의 부분 집합을 지정하는 것이 나에게 보인다 재치를 시작

  • 모든 방법 :이 경우

    <tx:advice id=“txAdvice”> 
        <tx:attributes> 
         <tx:method name="get*" read-only="true" timeout="10"/> 
         <tx:method name="find*" read-only="true" timeout="10"/> 
         <tx:method name="*" timeout="30"/> 
        </tx:attributes> 
    </tx:advice> 
    
    나는 그것이 텍사스 네임 스페이스를 사용하고 있다고 생각하는 트랜잭션 조언 간결한 정의 할 수 있습니다 h 얻을
  • 찾기로 시작하는 모든 metod
  • 세 번째 tx 태그로 무엇을 선택합니까? (*)

첫째는 대상 클래스와 I는 트랜잭션 동작을 사용하려는 방법 을 선택하는 포인트 컷을 선택 AOP를 사용하는 것이 나에게 보인다 다음은 텍사스 태그를 사용 구체적인 방법의 부분 집합을 선택하여 실제 트랜잭션을 만듭니다.

그렇다면 왜이 두 단계가 있어야 메토를 선택하고 트랜잭션으로 만들 수 있습니까?

맞습니까? 아니면 뭔가 빠졌습니까? 이 구성의 논리가 무엇인지 정확히 설명해 주시겠습니까?

답변

0
<aop:advisor pointcut-ref=“rewardNetworkMethods” advice-ref=“txAdvice”/> 

이 라인은 포인트 컷을 위해 실행하는 것입니다 txAdvise라는

<aop:pointcut id=“rewardNetworkMethods” expression=“execution(* rewards.RewardNetwork.*(..))”/> 

조언을 정의한 것을 의미한다. 두 번째 부분

<tx:advice id=“txAdvice”> 
<tx:attributes> 
    <tx:method name="get*" read-only="true" timeout="10"/> 
    <tx:method name="find*" read-only="true" timeout="10"/> 
    <tx:method name="*" timeout="30"/> 
</tx:attributes> 

는 tAdvice 조언의 구체적인 정의입니다. 첫 번째로 조언은 거래 행동 정의이다. txAdvice의 *는 get * 및 find * 행과 일치하지 않는 모든 것이 * 정의를 얻는다는 것을 의미합니다.

이 구성을 사용하면 특정 복제가 가능할 수 있지만 강제는 아닙니다. 나의 이해에서 이것은 aop 네임 스페이스의 첫 번째 부분이 AOP-ed (기본적으로 프록시 됨)가 필요한 Java 기능을 말하는 데 필요한 일반적인 AOP라는 사실에 기인합니다. 두 번째 부분에서는 구체적인 AOP 프록시를 tx 프록시로 정의하고 tx 동작을 미세 조정할 수 있습니다. AOP 네임 스페이스는 일반적인 AOP이고 트랜잭션에 대해서는 아무것도 모르기 때문에 이것을 AOP 부분에 넣을 수 없습니다. 반면에 주어진 조언에 따라 tx 동작을 미세 조정하면 편리합니다. 일반적으로 패키지의 모든 서비스에 대한 pointcut을 선언 한 다음 주어진 메소드 이름 지정 패턴에 대한 일반 tx advice를 선언합니다 (예제 에서처럼). 이 방법을 사용하면 주석 기반 정의로는 거의 균일하고 일반적인 tx 정의를 얻을 수 없습니다.