簡體   English   中英

GemFire的全球交易

[英]Global Transaction in GemFire

我將GemFire用於內存中,而將Cassandra用作事實的來源,並發現在以下情況下難以實現全局事務管理器。

使用CacheWriter插入/更新Cassandra和GemFire存儲庫中的數據,以便在GemFire中插入/更新記錄。 萬一GemFire或Cassandra出現任何故障,我都需要回滾數據。

這似乎是我之前(最近也)回答過的問題。 無論如何,我找不到它。

我已經建立了一個使用Pivotal GemFire結合使用SD JPA的HSQLDB DataSourceGlobal Transaction示例

注意:此示例是我的Contacts Application Reference實現 (RI)的一部分,該應用程序同時針對Spring Data Geode (對於Apache Geode )和Spring Data GemFire (對於Pivotal GemFire )展示了Pivotal GemFire / Apache GeodeSpring Data GemFire / GeodeSpring一般。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM