Narayana (e.g. JBoss) JTA with Geode/GemFire
Use Narayana JTA provider as global transaction manager to coordinate Geode/GemFire cache transactions along with JPA/JDBC and/or JMS resources.
Narayana is light-weight (e.g. out-of-container), embeddable global transaction manager. Narayana is JTA compliant and can be integrated with Geode/GemFire to perform XA transaction across Geode, JPA/JDBC and JMS operations.
Also Narayana supports Last Resource Commit Optiomization allowing with Geode/GemFire transactions to be run as last resources.
The narayana-geode
extends the existing Geode JTA support by integrating a standalone (open-source) JTA provider and enabling LRCO for transaction-atomicity and data-consistency. The utility includes two sub-projects:
The Apache Geode(GemFire) + Narayana JTA = Global Transactions with Last-Resource Optimization explains the problem, the implemented solution and provides some how-use tips.
Narayana Geode/Gemfire Core
The narayana-geode-core library uses minimal external dependencies. Only Narayana and the Apache Geode/Gemfire APIs are needed (e.g. no dependencies on Spring or Spring Data Gemfire and so.) The narayana-geode-core README explains how to use the core utility.
Narayana Geode/Gemfire SpringBoot
The narayana-geode-springboot library extends narayana-geode-core
to provide seamless integration with Spring Boot
and Spring Data Gemfire
(SDG).
The narayana-geode-springboot README explains how to use the core utility.
Quick Start
Show how to bootstrap a Spring Boot application that uses Narayana
to manage global transactions between JPA
and Gemfire (8.2.x)
.
-
Use the start.spring.io link to generate new
Spring Boot
application, pre-configured withNarayana
,JPA
,H2
andGemfire 8.2.x
starters. -
Add
narayana-gemfire82-springboot
to the POM to enable the Narayana/Gemfire 8.2.x integration. The dependency are resolved from Maven Central
<dependency>
<groupId>io.datalake.geode.jta</groupId>
<artifactId>narayana-gemfire82-springboot</artifactId>
<version>0.1.11</version>
</dependency>
- Enable the Transaction Management and Geode Narayana JTA.
@SpringBootApplication
@EnableGeodeNarayanaJta
@EnableTransactionManagement(order = 1)
public class SampleNarayanaApplication implements CommandLineRunner { ... }
- Use the
Spring Data
idioms to create and configureJPA
andGeode
repositories.
public interface MyJpaRepository extends CrudRepository<JpaCustomer, Long> {...}
public interface MyGeodeRepository extends CrudRepository<GeodeCustomer, Long> {...}
@SpringBootApplication
@EnableJpaRepositories(basePackageClasses = JpaCustomer.class)
@EnableGemfireRepositories(basePackageClasses = GeodeCustomer.class)
...
- Use the @Transactional Spring idioms to participate in a distributed transactions
@Transactional
public void addNewCustomer(String firstName, String lastName) {
jpaRepository.save(new JpaCustomer(firstName, lastName));
geodeRepository.save(new GeodeCustomer(666L, firstName, lastName));
}
POM dependencies
All narayana-geode
dependencies can be resolved from Maven Central: io.datalake.geode.jta
Currently narayana-geode
support Gemfire 8.2.x
, Gemfire 9.0.x
and Geode 1.1.x
. See matrix for details:
POM Group | POM Artifact | POM Version | Compatible Apache Geode/Gemfire Versions |
---|---|---|---|
io.datalake.geode.jta | narayana-geode-core | 0.1.11+ | Apache Geode 1.1.x or newer, Gemfire 9.0.4 or newer |
io.datalake.geode.jta | narayana-geode-springboot | 0.1.11+ | Apache Geode 1.1.x or newer, Gemfire 9.0.4 or newer, SpringBoot 1.5.4 or newer. No SDG GA for this Geode/Gemfire version yet. |
io.datalake.geode.jta | narayana-gemfire82-core | 0.1.11+ | Gemfire 8.2.x |
io.datalake.geode.jta | narayana-gemfire82-springboot | 0.1.11+ | Gemfire 8.2.x, SpringBoot 1.5.4 or newer, Spring Data Gemfire 1.9.4 |
Build
To build the projects run
./mvn clean install