Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.RemoteCounterManagerFactory;
import org.infinispan.client.hotrod.configuration.ClientIntelligence;
import org.infinispan.client.hotrod.configuration.ClusterConfigurationBuilder;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.client.hotrod.impl.ConfigurationProperties;
Expand Down Expand Up @@ -360,6 +359,9 @@ private ConfigurationBuilder builderFromProperties(String infinispanClientName,
if (runtimeCacheConfig.nearCacheUseBloomFilter().isPresent()) {
builder.remoteCache(cacheName).nearCacheUseBloomFilter(runtimeCacheConfig.nearCacheUseBloomFilter().get());
}
if (runtimeCacheConfig.transactionMode().isPresent()) {
builder.remoteCache(cacheName).transactionMode(runtimeCacheConfig.transactionMode().get());
}
}

for (Map.Entry<String, InfinispanClientRuntimeConfig.BackupClusterConfig> backupCluster : infinispanClientRuntimeConfig
Expand All @@ -369,8 +371,7 @@ private ConfigurationBuilder builderFromProperties(String infinispanClientName,
ClusterConfigurationBuilder clusterConfigurationBuilder = builder.addCluster(backupCluster.getKey());
clusterConfigurationBuilder.addClusterNodes(backupClusterConfig.hosts());
if (backupClusterConfig.clientIntelligence().isPresent()) {
clusterConfigurationBuilder.clusterClientIntelligence(
ClientIntelligence.valueOf(backupClusterConfig.clientIntelligence().get()));
clusterConfigurationBuilder.clusterClientIntelligence(backupClusterConfig.clientIntelligence().get());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@

import javax.net.ssl.SSLContext;

import org.infinispan.client.hotrod.configuration.ClientIntelligence;
import org.infinispan.client.hotrod.configuration.NearCacheMode;
import org.infinispan.client.hotrod.configuration.TransactionMode;

import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
Expand Down Expand Up @@ -264,6 +266,13 @@ public interface RemoteCacheConfig {
*/
// @formatter:on
Optional<Boolean> nearCacheUseBloomFilter();

// @formatter:off
/**
* Enables transaction mode in the client side, for transactional caches.
*/
// @formatter:on
Optional<TransactionMode> transactionMode();
}

@ConfigGroup
Expand All @@ -289,7 +298,7 @@ public interface BackupClusterConfig {
*/
// @formatter:on
@WithDefault("HASH_DISTRIBUTION_AWARE")
Optional<String> clientIntelligence();
Optional<ClientIntelligence> clientIntelligence();

// @formatter:off
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;
import jakarta.transaction.TransactionManager;

import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
Expand Down Expand Up @@ -41,6 +42,7 @@ public class CacheSetup {
public static final String MAGAZINE_CACHE = "magazine";
public static final String BOOKS_CACHE = "books";
public static final String AUTHORS_CACHE = "authors";
public static final String BOOKS_TX_CACHE = "bookstx";

@Inject
RemoteCacheManager cacheManager;
Expand All @@ -65,6 +67,7 @@ void onStart(@Observes StartupEvent ev) {
RemoteCache<String, Magazine> magazineCache = cacheManager.getCache(MAGAZINE_CACHE);
RemoteCache<String, Book> booksCache = cacheManager.getCache(BOOKS_CACHE);
RemoteCache<String, Book> anotherBooksCache = anotherCacheManager.getCache(BOOKS_CACHE);
RemoteCache<String, Book> txBooksCache = cacheManager.getCache(BOOKS_TX_CACHE);

defaultCache.addClientListener(new EventPrintListener());

Expand Down Expand Up @@ -134,6 +137,36 @@ public void resultUpdated(String key, Book value) {
booksCache.put("hp-3", hp3Book);

anotherBooksCache.put("hp-1", hp1Book);

TransactionManager transactionManager = txBooksCache.getTransactionManager();
if (transactionManager == null) {
throw new IllegalStateException("TransactionManager should not be null");
}
try {
transactionManager.begin();
txBooksCache.put("hp-1", hp1Book);
txBooksCache.put("hp-2", hp2Book);
txBooksCache.put("hp-3", hp3Book);
transactionManager.commit();
} catch (Exception e) {
log.error("Error committing transaction", e);
throw new RuntimeException(e);
}

try {
transactionManager.begin();
txBooksCache.put("got-1", got1Book);
txBooksCache.put("got-2", got2Book);
transactionManager.rollback();
} catch (Exception e) {
log.error("Error rollback transaction", e);
throw new RuntimeException(e);
}

// tx book cache size is 3
if (txBooksCache.size() > 3) {
throw new RuntimeException("Transactions did not work.");
}
}

public Map<String, Book> getMatches() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
quarkus.infinispan-client.cache.default.configuration-resource=cacheConfig.xml
quarkus.infinispan-client.cache.books.configuration-resource=booksIndexedConfig.json
quarkus.infinispan-client.cache.bookstx.configuration-resource=txCache.xml
quarkus.infinispan-client.cache.bookstx.transaction-mode=NON_XA
quarkus.infinispan-client.cache.magazine.configuration=<distributed-cache><encoding media-type="application/x-protostream"/></distributed-cache>
quarkus.infinispan-client.cache.default.near-cache-mode=INVALIDATED
quarkus.infinispan-client.cache.default.near-cache-max-entries=2
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<distributed-cache>
<encoding media-type="application/x-protostream"/>
<locking isolation="REPEATABLE_READ"/>
<transaction locking="PESSIMISTIC" mode="NON_XA" />
</distributed-cache>
Loading