Tôi có một ứng dụng web mùa xuân chạy trên jboss hiện được định cấu hình để sử dụng HibernateTransactionManager cho các giao dịch db và JmsTransactionManager cho jms. Đối với jms, chúng tôi sử dụng Camel và ActiveMQ, cơ sở dữ liệu của chúng tôi là DB2. Trong một giao dịch, tôi cần viết một số bản ghi vào cơ sở dữ liệu và gửi hai tin nhắn jms không đồng bộ. Các tin nhắn jms là thông báo sự kiện và tôi chỉ muốn chúng được gửi nếu giao dịch cơ sở dữ liệu cam kết.Đồng bộ hóa giao dịch mùa xuân của JDBC và JMS
Tôi sẵn sàng chấp nhận rủi ro giao tiếp với nhà môi giới thất bại sau khi giao dịch jdbc đã cam kết (và do đó không có thư nào được gửi nhưng db cam kết) vì vậy tôi không nghĩ rằng tôi cần XA thích hợp.
Tôi tin rằng những gì tôi cần là quản lý giao dịch "nỗ lực tốt nhất" bằng cách sử dụng đồng bộ hóa giao dịch mùa xuân.
Tài liệu hướng dẫn mùa xuân gợi ý thực tế là mùa xuân sẽ đồng bộ hóa hai giao dịch và cam kết giao dịch jms chỉ sau khi giao dịch jdbc đã được cam kết - nhưng tôi không nghĩ nó rất rõ ràng. Tài liệu hướng dẫn mùa xuân ở đây http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-resource-synchronization không đi vào chi tiết đầy đủ về cách hoạt động của tài liệu.
Tôi đã tìm thấy một vài nguồn khác nói rằng mùa xuân sẽ làm những gì tôi muốn bao gồm một số javadoc dưới đây, và tôi đã viết một số bài kiểm tra tích hợp cũng hiển thị nó.
http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/jms/support/JmsAccessor.html#setSessionTransacted%28boolean%29 javadoc trên setSessionTransacted ở đây có vẻ giống như chính xác những gì tôi muốn.
Từ những gì tôi đã thấy Tôi nghĩ rằng tạo Camel JmsConfiguration với giao dịch thiết lập là true như thế này là đủ:
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory"/>
<property name="transacted" value="true"/>
<property name="concurrentConsumers" value="10"/>
</bean>
Tuy nhiên tôi cần phải thuyết phục một người nào đó tôi làm việc với ai là một chút hoài nghi và cho rằng tôi kiểm thử tích hợp chỉ hoạt động vì tác dụng phụ kém tài liệu hơn là tính năng mùa xuân có chủ ý. Vì vậy, câu hỏi của tôi là - Tôi có chính xác rằng mùa xuân có thể được dựa vào để đồng bộ hóa các giao dịch và luôn cam kết giao dịch jms sau giao dịch jdbc hay không phải cái gì mà tôi nên dựa vào, và bạn có thể chỉ cho tôi bất kỳ tài liệu chính thức nói rõ ràng? Và tôi đoán nói chung là một cách tiếp cận tốt để có hoặc chúng ta nên quản lý các giao dịch này theo một cách khác?
Xin chào, bạn có câu trả lời cho câu hỏi của mình ngay bây giờ không? – snowindy
Xin chào, không thực sự. Tôi vẫn chưa thấy bất kỳ tài liệu thực sự rõ ràng đó là những gì tôi muốn nhưng chúng tôi đang sử dụng nó trong sản xuất mà không có bất kỳ vấn đề. – laurie