• Bug
  • Status: Closed
  • 2 Major
  • Resolution: Fixed
  • hhuynh
  • Reporter: teck
  • January 15, 2008
  • 0
  • Watchers: 0
  • January 30, 2008
  • January 18, 2008


source: http://forums.terracotta.org/forums/posts/list/723.page

If one takes a clustered ehcache CacheManager instance and try to register it with an MBeanServer, you’ll get an UnlockedSharedObjectException.

Making a call like this (passing a shared cacheManager) should produce the issue net.sf.ehcache.management.ManagementService.registerMBeans(cacheManager, ManagementFactory.getPlatformMBeanServer(), true, true, true, true);

It looks like an attempt was made to make this transient since “net.sf.ehcache.CacheManager.cacheManagerEventListener” is declared transient in terracotta.xml in both the 1.2.4 and 1.3.0 modules. Unfortunately that field does not exist. Correcting the field name will just lead to an NPE on other nodes.

This is the exception text: com.tc.object.tx.UnlockedSharedObjectException: ******************************************************************************* Attempt to access a shared object outside the scope of a shared lock.
All access to shared objects must be within the scope of one or more shared locks defined in your Terracotta configuration.
Please alter the locks section of your Terracotta configuration so that this access is auto-locked or protected by a named lock.

For more information on this issue, please visit our Troubleshooting Guide at: http://terracotta.org/kit/troubleshooting

  Caused by Thread: main  in  VM(0)
  Shared Object Type: java.util.HashSet   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

  at com.tc.object.tx.ClientTransactionManagerImpl.getTransaction(ClientTransactionManagerImpl.java:278)
  at com.tc.object.tx.ClientTransactionManagerImpl.checkWriteAccess(ClientTransactionManagerImpl.java:291)
  at com.tc.object.bytecode.ManagerImpl.checkWriteAccess(ManagerImpl.java:662)
  at com.tc.object.bytecode.ManagerUtil.checkWriteAccess(ManagerUtil.java:364)
  at java.util.HashSet.add(HashSet.java)
  at net.sf.ehcache.event.CacheManagerEventListenerRegistry.registerListener(CacheManagerEventListenerRegistry.java:65)
  at net.sf.ehcache.management.ManagementService.init(ManagementService.java:137)
  at net.sf.ehcache.management.ManagementService.registerMBeans(ManagementService.java:110)
  at Foo.main(Foo.java:11)


Fiona OShea 2008-01-16

If you can get this in 2.5.1 it would be great:) If not let us know