[jboss-user] [JBossCache] - Exception thrown when calling remove during after-completion
rworsnop
do-not-reply at jboss.com
Tue Mar 13 16:49:01 EDT 2007
JBoss Cache version: 1.4.1.SP2
I have been having some problems using Hibernate with JBoss Cache in optimistic locking mode. During the after-completion phase of the transaction, Hibernate will, in certain circumstances, call TreeCache.remove.
This causes problems because JBoss Cache sees that the transaction is committing. A CacheException is thrown, with a "Must be in a valid transaction" message.
The code below replicates what Hibernate does:
public static void main(String[] args) throws Exception {
| TreeCache tree = new TreeCache();
| tree.setTransactionManagerLookup(new DummyTransactionManagerLookup());
| tree.setCacheMode(TreeCache.LOCAL);
| tree.setNodeLockingScheme("optimistic");
| tree.startService(); // kick start tree cache
| TransactionManager txManager = DummyTransactionManager.getInstance();
|
| try {
| txManager.begin();
| txManager.getTransaction().registerSynchronization(remover(tree));
| tree.put(fqn("custard"), "item", 45);
| txManager.commit();
| }
| catch(Throwable ex) {
| ex.printStackTrace();
| try { txManager.rollback(); } catch(Throwable t) {}
| } finally{
| tree.stopService();
| }
| }
|
| private static Synchronization remover(final TreeCache tree) {
| return new Synchronization(){
|
| public void afterCompletion(int status) {
| try {
| tree.remove(fqn("custard"), option(false));
| } catch (CacheException e) {
| System.err.println("Bad things happened when I tried to remove custard");
| e.printStackTrace();
| }
| }
| public void beforeCompletion() {
| }
|
| };
| }
|
| private static Fqn fqn(String s){
| return Fqn.fromString(s);
| }
|
| private static Option option(boolean failSilently){
| Option option = new Option();
| option.setFailSilently( failSilently );
| option.setDataVersion(new DataVersion(){
|
| public boolean newerThan(DataVersion arg0) {
| return false;
| }} );
| return option;
| }
It causes this exception:
Bad things happened when I tried to remove custard
| org.jboss.cache.CacheException: Must be in a valid transaction _remove; id:5(null, /custard, true)
| at org.jboss.cache.interceptors.OptimisticNodeInterceptor.invoke(OptimisticNodeInterceptor.java:66)
| at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
| at org.jboss.cache.interceptors.OptimisticCreateIfNotExistsInterceptor.invoke(OptimisticCreateIfNotExistsInterceptor.java:69)
| at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
| at org.jboss.cache.interceptors.OptimisticValidatorInterceptor.invoke(OptimisticValidatorInterceptor.java:84)
| at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
| at org.jboss.cache.interceptors.OptimisticLockingInterceptor.invoke(OptimisticLockingInterceptor.java:126)
| at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
| at org.jboss.cache.interceptors.TxInterceptor.handleNonTxMethod(TxInterceptor.java:365)
| at org.jboss.cache.interceptors.TxInterceptor.invoke(TxInterceptor.java:160)
| at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
| at org.jboss.cache.interceptors.CacheMgmtInterceptor.invoke(CacheMgmtInterceptor.java:183)
| at org.jboss.cache.TreeCache.invokeMethod(TreeCache.java:5776)
| at org.jboss.cache.TreeCache.remove(TreeCache.java:3855)
| at org.jboss.cache.TreeCache.remove(TreeCache.java:3438)
| at com.medq.test.TestTreeCacheNotInTransaction$1.afterCompletion(TestTreeCacheNotInTransaction.java:47)
| at org.jboss.cache.transaction.DummyTransaction.notifyAfterCompletion(DummyTransaction.java:270)
| at org.jboss.cache.transaction.DummyTransaction.commit(DummyTransaction.java:64)
| at org.jboss.cache.transaction.DummyBaseTransactionManager.commit(DummyBaseTransactionManager.java:61)
| at com.medq.test.TestTreeCacheNotInTransaction.main(TestTreeCacheNotInTransaction.java:32)
|
Is this expected behaviour for JBoss Cache? If so I will raise the issue on the Hibernate forum.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4027691#4027691
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4027691
More information about the jboss-user
mailing list