2.3. camel-jms 프로젝트에 대한 설명
Camel 경로는 다음 끝점 URI를 사용합니다.
<route id="file-to-jms-route"> ... <to uri="jms:queue:incomingOrders?transacted=true" /> </route> <route id="jms-cbr-route"> <from uri="jms:queue:incomingOrders?transacted=true" /> ... </route>
jms
구성 요소는 다음 스니펫을 사용하여 구성됩니다.
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> <property name="connectionFactory"> <reference interface="javax.jms.ConnectionFactory" /> </property> <property name="transactionManager" ref="transactionManager"/> </bean>
transactionManager
참조는 다음과 같습니다.
<reference id="transactionManager" interface="org.springframework.transaction.PlatformTransactionManager" />
위 화면과 같이, PlatformTransactionManager
의 JMS 연결 팩토리와 Spring 인터페이스 모두 참조일 뿐입니다. 블루프린트 XML에서 정의할 필요가 없습니다. 이러한 서비스는 Fuse 자체에 의해 노출됩니다.
javax.jms.ConnectionFactory
는 etc/org.ops4j.connectionfactory-amq7.cfg
를 사용하여 생성된 것을 이미 확인했습니다.
트랜잭션 관리자는 다음과 같습니다.
karaf@root()> service:list org.springframework.transaction.PlatformTransactionManager [org.springframework.transaction.PlatformTransactionManager] ------------------------------------------------------------ service.bundleid = 21 service.id = 527 service.scope = singleton Provided by : Red Hat Fuse :: Fuse Modules :: Transaction (21) Used by: Red Hat Fuse :: Quickstarts :: camel-jms (256)
실제 트랜잭션 관리자가 등록된 다른 인터페이스를 확인합니다.
karaf@root()> headers 21 Red Hat Fuse :: Fuse Modules :: Transaction (21) ------------------------------------------------ ... Bundle-Name = Red Hat Fuse :: Fuse Modules :: Transaction Bundle-SymbolicName = fuse-pax-transx-tm-narayana Bundle-Vendor = Red Hat ... karaf@root()> bundle:services -p 21 Red Hat Fuse :: Fuse Modules :: Transaction (21) provides: ---------------------------------------------------------- objectClass = [org.osgi.service.cm.ManagedService] service.bundleid = 21 service.id = 519 service.pid = org.ops4j.pax.transx.tm.narayana service.scope = singleton ---- objectClass = [javax.transaction.TransactionManager] provider = narayana service.bundleid = 21 service.id = 520 service.scope = singleton ---- objectClass = [javax.transaction.TransactionSynchronizationRegistry] provider = narayana service.bundleid = 21 service.id = 523 service.scope = singleton ---- objectClass = [javax.transaction.UserTransaction] provider = narayana service.bundleid = 21 service.id = 524 service.scope = singleton ---- objectClass = [org.jboss.narayana.osgi.jta.ObjStoreBrowserService] provider = narayana service.bundleid = 21 service.id = 525 service.scope = singleton ---- objectClass = [org.ops4j.pax.transx.tm.TransactionManager] provider = narayana service.bundleid = 21 service.id = 526 service.scope = singleton ---- objectClass = [org.springframework.transaction.PlatformTransactionManager] service.bundleid = 21 service.id = 527 service.scope = singleton
트랜잭션 관리자는 다음 인터페이스에서 사용할 수 있습니다.
-
javax.transaction.TransactionManager
-
javax.transaction.TransactionSynchronizationRegistry
-
javax.transaction.UserTransaction
-
org.jboss.narayana.osgi.jta.ObjStoreBrowserService
-
org.ops4j.pax.transx.tm.TransactionManager
-
org.springframework.transaction.PlatformTransactionManager
필요한 모든 컨텍스트에서 사용할 수 있습니다. 예를 들어 camel-jms
를 사용하려면 org.apache.camel.component.jms.JmsConfiguration. CryostatManager
필드를 초기화해야 합니다. 이 예제에서는 다음을 사용합니다.
<reference id="transactionManager" interface="org.springframework.transaction.PlatformTransactionManager" />
대신 예를 들면 다음과 같습니다.
<reference id="transactionManager" interface="javax.transaction.TransactionManager" />