Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7948279
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 4, 20262026-06-04T01:40:47+00:00 2026-06-04T01:40:47+00:00

Infinispan documentation says a lot of stuff about its locking scheme, optimistic and pessimistic,

  • 0

Infinispan documentation says a lot of stuff about its locking scheme, optimistic and pessimistic, but fails to detail how to use the transactions. Probably it is assumed to be know, because it uses Java’s default API, but if it is so, I also failed to find about JTA usage patterns.

I assume, when using optimistic transactions, that it will be either committed or rolled back, depending on the concurrent access to the data, and if it is rolled back, I will be able to replay the transaction, hoping that now it will get done before other concurrent access and will succeed. I have the begin(), commit() and rollback() methods on the TransactionManager, and badly documented exceptions that I am not sure when they will be thrown. With this information, I had made up this code:

public void transactionSum(Key key, Long delta) {
    boolean redo;
    do{
        redo = false;
        try {
            tm.begin();
            try {
                Long value = cache.get(key);
                // Some processing:
                value += delta;
                cache.put(key, value);
                tm.commit();
            } catch(CacheException e) {
                tm.rollback();
                throw new RollbackException();
            }
        } catch (RollbackException e) {
            redo = true;
            logger.debug("Cache transaction collision, replaying it.");
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    } while(redo);
}

Is this code correct? It seems overly complicated for performing an operation that is supposedly common, thus I suspect I’ve done something wrong… Will some CacheException be thrown if cache.put() fails? If so, should I explicitly call tm.rollback()? What if I called tm.commit() inside a finally clause? When would it throw a RollbackException?

More importantly, is there some idiom/default way to perform transaction replays?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-04T01:40:49+00:00Added an answer on June 4, 2026 at 1:40 am

    The correct pattern is:

    Transaction tx = tm.begin();
    try
    {
    // DO SOMETHING
    }
    catch (Exception e)
    {
       tx.setRollbackOnly(); // Force a rollback for this error
       throw e;
    }
    finally
    {
       if (tx.getStatus() == Status.STATUS_ACTIVE)
          tx.commit();
       else
          tx.rollback();
    }
    

    Without a functional language, the easiest way to consume this is via callables or similar patterns, i.e. https://github.com/galderz/infinispan/blob/master/core/src/test/java/org/infinispan/test/TestingUtil.java#L1307

    Update: there’s no functionality to retry transactions in Infinispan

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

We want to use Infinispan as a compute grid. We found the documentation on
I want to use Infinispan with hibernate second level cache. My application is running
I would like to use Infinispan following a tree like structure for the cache.
I've been using Tomcat for years, but I have been put on a new
I'm working with a 10-node Infinispan cluster used as a Hibernate Search backend. Our
We can speed up a hibernate app easyly with 2nd level cache using infinispan
it says this in the failed war {JBAS014653: Composite operation failed and was rolled
Below is my configuration file: <?xml version=1.0 encoding=UTF-8?> <infinispan xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=urn:infinispan:config:4.2 http://www.infinispan.org/schemas/infinispan-config-4.2.xsd xmlns=urn:infinispan:config:4.2> <global>
If I understand correctly, Infinispan/JBoss Cache uses Java's own serialization mechanism, which can be
I tried to setup infinispan as 2nd level cache for hibernate in spring+tomcat based

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.