[英]Global Transaction in GemFire
我將GemFire用於內存中,而將Cassandra用作事實的來源,並發現在以下情況下難以實現全局事務管理器。
使用CacheWriter
插入/更新Cassandra和GemFire存儲庫中的數據,以便在GemFire中插入/更新記錄。 萬一GemFire或Cassandra出現任何故障,我都需要回滾數據。
這似乎是我之前(最近也)回答過的問題。 無論如何,我找不到它。
我已經建立了一個使用Pivotal GemFire結合使用SD JPA的HSQLDB DataSource
的Global Transaction示例 。
注意:此示例是我的Contacts Application Reference實現 (RI)的一部分,該應用程序同時針對Spring Data Geode (對於Apache Geode )和Spring Data GemFire (對於Pivotal GemFire )展示了Pivotal GemFire / Apache Geode , Spring Data GemFire / Geode和Spring一般。 該
repository-example
着重於使用Spring Data Commons的Repository Infrastructure和擴展,以在Spring上下文中將SD Commons的Repository Data Access模式應用於Pivotal GemFire / Apache Geode 。 此示例顯示的很多事情(例如CRUD,查詢,自定義存儲庫方法等)中,基於本地(緩存)和全局(JTA)的事務都是repository-example
。 不幸的是,文檔在很大程度上仍然是WIP。 但是我確實打算保持此RI和示例為最新,因為我還將代碼用作會議演講的基礎。 無論如何...
雖然此示例將Pivotal GemFire與RDBMS(即HSQLDB)結合在一起,但可以換掉HSQLDB,例如Apache Cassandra。 所需要做的就是使數據源/存儲符合JTA。
這個示例/測試的配置在這里 ,並且相當廣泛地依賴於Spring Boot的 “ 自動配置 ”支持。 也就是說,當Atomikos(開源JTA事務管理器)位於CLASSPATH
(或Spring Boot支持的任何JTA事務管理器)上時, Spring Boot將自動配置基於JTA的事務。 當然,您可以使用不支持的其他JTA事務管理器提供程序,但是您可以自己手動配置它們。 如果願意,您甚至可以手動配置Atomikos,但是非常推薦使用Spring Boot的 自動配置支持。
唯一需要做的另一件事就是使每個數據源都知道JTA事務。
對於Pivotal GemFire ,這需要設置一個命名上下文(即javax.naming.InitialContext
), GemFire本身將使用該命名上下文來“查找”(按名稱)並找到現有的JTA事務。 本質上,此bean定義將JTA“ TransactionManager
”與GemFire在其查找過程中期望的正確“名稱”相關聯。
注意:如果您處於托管環境中,例如應用程序服務器,甚至是Tomcat,則不需要人工命名上下文,因為它為您的應用程序提供了命名上下文服務。 當然,那么您將需要在該環境中注冊JTA事務。 但是,由於這是一個不在應用程序容器中的獨立( Spring Boot )應用程序,因此我在
NamingContextBuilderFactoryBean
類中使用了Spring的模擬/測試Naming上下文支持 。
剩下的就是讓您查看Apache Cassandra / DataStax的文檔,以使Apache Cassandra參與JTA事務。 然后,您不需要任何Pivotal GemFire特定類(例如CacheWriter
)即可從GemFire更新Cassandra。 使用JTA,所有兼容JTA的數據存儲都可以正確保存,也可以不保存。
在樞紐的GemFire的全局JTA事務支持的更多信息,可以發現在這里 ,具體而言,相關材料在這里 。
從此處可以找到有關Cassandra交易的更多信息 。 希望這可以幫助。
干杯,約翰
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.