Hi,
I am having some problems with deadlocks in my application. It works
fine with a single client and I have functional tests which exercise
this part of the application, but once I start cranking up the number of
clients, I rapidly see lots of these:
Caused by: org.exolab.castor.jdo.TransactionAbortedException: Nested
error: org.exolab.castor.jdo.LockNotGrantedException: Deadlock has been
detected while attempting to acquire a lock: Deadlock has been detected
while attempting to acquire a lock
at
org.exolab.castor.persist.TransactionContext.prepare(TransactionContext.java:1654)
at
org.exolab.castor.jdo.engine.DatabaseImpl.commit(DatabaseImpl.java:545)
vola ... 34 more
Caused by: org.exolab.castor.jdo.LockNotGrantedException: Deadlock has
been detected while attempting to acquire a lock
at
org.exolab.castor.persist.ObjectLock.detectDeadlock(ObjectLock.java:983)
at
org.exolab.castor.persist.ObjectLock.upgrade(ObjectLock.java:770)
at
org.exolab.castor.persist.LockEngine$TypeInfo.upgrade(LockEngine.java:1324)
at
org.exolab.castor.persist.LockEngine$TypeInfo.access$600(LockEngine.java:1055)
at
org.exolab.castor.persist.LockEngine.writeLock(LockEngine.java:801)
at
org.exolab.castor.persist.TransactionContext.writeLock(TransactionContext.java:1344)
at
org.exolab.castor.persist.ClassMolder.preStore(ClassMolder.java:1547)
at
org.exolab.castor.persist.LockEngine.preStore(LockEngine.java:718)
at
org.exolab.castor.persist.TransactionContext.prepare(TransactionContext.java:1521)
... 36 more
I am using Castor 0.9.6. I tried upgrading to 1.0.3 but got
NullPointerExceptions (I'll create a test case separately to see if it's
a bug, or more probably, a problem with my mapping file), so I'm
sticking with 0.9.6 currently and trying to understand how I'm misusing
Castor and what I should do to eliminate, or at least minimise these
deadlocks.
The only related thread that I have found so far on the mailing list
archive is this:
http://www.mail-archive.com/[email protected]/msg00205.html
There are a couple of the suggested issues present in the codebase that
I am currently working on fixing; notably a new JDO instance is being
created each request:
JDO newJdo = new JDO();
newJdo.setDatabaseName(databaseName);
// We resolve the full config URI
URL u = getClass().getResource(configurationURI);
if (u == null) {
throw new RepositoryException(
"Unable to locate config file " + configurationURI);
}
newJdo.setConfiguration(u.toString());
But I was wondering if people might be able to comment on any other
fruitful avenues to pursue?
Regards,
James
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email