I am using JBoss Cache 3.1 integrated with Gridgain 2.1.
I built three jboss cache instances with Cache Mode as LOCAL.
For a particular operation, i need to delete data from two caches and merge it with some data in third cache.
Now i want to have these three opeations as atomic unit. for this i have followed the solution provide by "morpheus" in gridgain forum
"What you need is to launch 3 jobs and have them coordinate between each other. So, for example, the 3rd job would have to wait for first two jobs to do the delete operation prior to continuing... If at any point anything fails, you can issue rollback from all jobs.
Take a look at Distributed Task Session for information on how to use task session attributes to coordinate between task and jobs. Also, there are several session examples shipped with GridGain (e.g. +GridifyHelloWorldSessionExample+) "
link to the forum is thread is http://www.gridgainsystems.com/jiveforums/thread.jspa?threadID=862
Now i am trying to implement the same solution and for that i have written a sample program. i have placed the eclipse project at http://www.4shared.com/file/134482628/80d6c0fd/matcher.html.
I have configured the JBossTs as per the installation document and the installation was success.
but when i run the application i am getting the error
[java] java.lang.IllegalStateException: BaseTransaction.rollback - [com.arjuna.ats.internal.jta.transaction.arjunacore.notx] [com.arjuna.ats.internal.jta.transaction.arjunacore.notx] no transaction!
[java] at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.rollback(BaseTransaction.java:158)
[java] at com.cmc.messaging.HelloWorldJob.onMessage(Unknown Source)
[java] at org.gridgain.grid.kernal.managers.communication.GridCommunicationManager$4.body(GridCommunicationManager.java:589)
[java] at org.gridgain.grid.util.runnable.GridRunnable$1.run(GridRunnable.java:142)
[java] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
[java] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
[java] at java.util.concurrent.FutureTask.run(FutureTask.java:138)
[java] at org.gridgain.grid.util.runnable.GridRunnable.run(GridRunnable.java:194)
[java] at org.gridgain.grid.util.runnable.GridRunnablePool$1.run(GridRunnablePool.java:80)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[java] at java.lang.Thread.run(Thread.java:619)
can any body help me out what was the problem.
In the project enclosed there is an ant script.
first run the target gridNode1
then run the target gridNode2
the run the target hw.
Please help me.
Thanks in advance.
I don't see any correlation with JBoss Cache, as the calls stops within the transaction manager. However, it might be that you start a transaction within one thread and try to rollback it in another thread which is not associated with the transaction.
yes, what you said is right. i am starting a transaction in one thread but issuing a commit/rollback from a different thread on the same object instance.
But there is no other way round as i am using gridgain and there was no alternate design.
Can i use JTA in this case.
how can i use transaction manager in this case
try using TransactionManager.suspend/resume methods to manage tx association?
with this i managed not to get exception, but rollback doesn't have any effect. opeartion is not rolling back.
well that means that it might get committed in some other place. I'm afraid this topic is not related to JBossCache though