首先,我使用的是Oracle和JBoss 4.0.4,我几乎是JBoss上的新手。使用SimpleReadWriteEJBLock锁定问题
我们的分布式应用程序使用CMP Bean和SimpleReadWrite ...等锁定策略,据我所知这是当时最好的选择。 (原始开发人员不再与我们合作,我不能轻易从他们那里获得反馈,并没有提到完全缺乏文档)。
相关配置如下:
<container-configuration extends="Standard CMP 2.x EntityBean with cache invalidation">
<container-name>Standard CMP 2.x EntityBean</container-name>
<locking-policy>org.jboss.ejb.plugins.lock.SimpleReadWriteEJBLock</locking-policy>
<container-cache-conf>
<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
<cache-policy-conf>
<min-capacity>150</min-capacity>
<max-capacity>1000000</max-capacity>
<overager-period>600</overager-period>
<max-bean-age>1800</max-bean-age>
<resizer-period>400</resizer-period>
<max-cache-miss-period>60</max-cache-miss-period>
<min-cache-miss-period>1</min-cache-miss-period>
<cache-load-factor>0.75</cache-load-factor>
</cache-policy-conf>
</container-cache-conf>
<container-pool-conf>
<MaximumSize>1000</MaximumSize>
</container-pool-conf>
<cache-invalidation>true</cache-invalidation>
</container-configuration>
该应用程序每天都会用到,包括周末,从清晨到晚上9-10。有时(例如一次,每月两次),我们得到这样的错误:
2010-01-25 13:41:10,567 WARN [org.jboss.tm.TransactionImpl] Transaction TransactionImpl:XidImpl[FormatId=257, GlobalId=anemosa1/3531484, BranchQual=, localId=3531484] timed out. status=STATUS_ACTIVE
2010-01-25 13:41:14,225 ERROR [org.jboss.ejb.plugins.LogInterceptor] TransactionRolledbackLocalException in method: public abstract java.lang.Long org.anemos.ejb.dictionary.LongId.getId(), causedBy:
javax.ejb.EJBException: Transaction marked for rollback - probably a timeout.
at org.jboss.ejb.plugins.lock.SimpleReadWriteEJBLock.checkTransaction(SimpleReadWriteEJBLock.java:340)
at org.jboss.ejb.plugins.lock.SimpleReadWriteEJBLock.waitAWhile(SimpleReadWriteEJBLock.java:219)
at org.jboss.ejb.plugins.lock.SimpleReadWriteEJBLock.getReadLock(SimpleReadWriteEJBLock.java:153)
...many more lines...
事务超时,并随后锁定所有其他交易,从每一个其他用户,在锁定表。每次发生这种情况时,我们都必须重置服务或终止锁定的数据库会话......或者希望问题能够自行解决(有时会在几秒钟内解除锁定)。
什么可能是错的?更具体的问题是,为什么超时事务最终会锁定资源而不是被安静地回滚?任何帮助表示赞赏。