9.3. 선언적 트랜잭션의 분리
블루프린트 XML을 사용할 때 블루프린트 XML 파일에 트랜잭션 정책을 선언하여 트랜잭션을 위임할 수도 있습니다. Required 정책과 같이 빈 또는 8080 메서드에 적절한 트랜잭션 정책을 적용하면 특정 Quarkus 또는 Cryostat 메서드가 호출될 때마다 트랜잭션이 시작되도록 할 수 있습니다. Quarkus 메서드 종료 시 트랜잭션이 커밋됩니다. 이 접근 방식은 Enterprise Java Cryostat에서 트랜잭션이 적용되는 방식과 유사합니다.
OSGi 선언적 트랜잭션을 사용하면 블루프린트 파일의 다음 범위에서 트랜잭션 정책을 정의할 수 있습니다.
9.3.3절. “tx에 대한 설명: Cryostat 속성” 도 참조하십시오.
9.3.1. Cryostat 수준 선언
8080 수준에서 트랜잭션 정책을 선언하려면 다음과 같이 tx: Cryostat 요소를^2 요소의 자식으로 삽입합니다.
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.1.0">
<bean id="accountFoo" class="org.jboss.fuse.example.Account">
<tx:transaction method="*" value="Required" />
<property name="accountName" value="Foo" />
</bean>
<bean id="accountBar" class="org.jboss.fuse.example.Account">
<tx:transaction method="*" value="Required" />
<property name="accountName" value="Bar" />
</bean>
</blueprint>
이전 예에서 필수 트랜잭션 정책은 accountFoo 콩 및 accountBar 8080의 모든 메서드에 적용됩니다. 여기서 메서드 속성은 모든 Cryostat 메서드를 일치시키기 위해 와일드카드 * 를 지정합니다.
9.3.2. 최상위 수준 선언
최상위 수준에서 트랜잭션 정책을 선언하려면 다음과 같이 tx: Cryostat 요소를 블루프린트 요소의 자식으로 삽입합니다.
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.1.0">
<tx:transaction bean="account*" value="Required" />
<bean id="accountFoo" class="org.jboss.fuse.example.Account">
<property name="accountName" value="Foo" />
</bean>
<bean id="accountBar" class="org.jboss.fuse.example.Account">
<property name="accountName" value="Bar" />
</bean>
</blueprint>
이전 예에서 Required 트랜잭션 정책은 ID 가 패턴인 account* 와 일치하는 모든 빈의 모든 메서드에 적용됩니다.
9.3.3. tx에 대한 설명: Cryostat 속성
tx: Cryostat 요소는 다음 특성을 지원합니다.
Cryostat(상위 수준만 해당) 트랜잭션 정책이 적용되는 빈 ID(콤마 또는 공백으로 구분된) 목록을 지정합니다. 예를 들면 다음과 같습니다.
<blueprint ...> <tx:transaction bean="accountFoo,accountBar" value="..." /> </blueprint>와일드카드 문자
*를 사용할 수도 있습니다. 이 문자는 각 목록 항목에서 최대 한 번 표시될 수 있습니다. 예를 들면 다음과 같습니다.<blueprint ...> <tx:transaction bean="account*,jms*" value="..." /> </blueprint>8080 속성을 생략하면 기본값은
*입니다( 블루프린트 파일의 모든 비-synthetic 빈과 일치).method(최상 및 빈 수준) 트랜잭션 정책이 적용되는 메서드 이름(콤마 또는 공백으로 구분된) 목록을 지정합니다. 예를 들면 다음과 같습니다.
<bean id="accountFoo" class="org.jboss.fuse.example.Account"> <tx:transaction method="debit,credit,transfer" value="Required" /> <property name="accountName" value="Foo" /> </bean>와일드카드 문자
*를 사용할 수도 있습니다. 이 문자는 각 목록 항목에서 최대 한 번 표시될 수 있습니다.메서드 속성을 생략하면 기본값은
*(해당 빈의 모든 메서드와 일치)입니다.- value
(상위 수준 및 8080 수준) 트랜잭션 정책을 지정합니다. 정책 값은 다음과 같이 EventListener 3.0 사양에 정의된 정책과 동일한 의미가 있습니다.
-
필수- 현재 트랜잭션을 지원하고, 존재하지 않는 경우 새 트랜잭션을 만듭니다. -
mandatory- 현재 트랜잭션을 지원합니다. 현재 트랜잭션이 없는 경우 예외가 발생합니다. -
RequiresNew- 새 트랜잭션을 생성하여 현재 트랜잭션이 있는 경우 일시 중지합니다. -
지원- 현재 트랜잭션을 지원하며, 존재하지 않는 경우 비- applications를 실행합니다. -
NotSupported- 현재 트랜잭션을 지원하지 않습니다. 대신 항상 비 applications를 실행합니다. -
never- 현재 트랜잭션이 있는 경우 예외를 throw합니다.
-