質問

まず第一に、私はOracleとJboss 4.0.4を使用しています。私はJBossの問題の初心者です。

分散アプリケーションは、SimpleReadWrite ...などのロックポリシーを備えたCMP Beanを使用しています。 (元の開発者はもはや私たちと一緒に仕事をしていません。私は彼らからフィードバックを簡単に得ることができません。ドキュメントの完全な欠如は言及されていません)。

関連する構成は次のとおりです。

<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時まで、週末を含む毎日使用されています。時々(例:1か月に1回)、この種のエラーが発生します。

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...

トランザクションは、ロックアウトされたテーブルで、他のすべてのユーザーから他のすべてのトランザクションをロックします。これが起こるたびに、サービスをリセットしたり、ロックされたDBセッションを殺す必要があります...または、問題が解決することを願っています(時にはロックが数秒で持ち上げられます)。

何が間違っているのでしょうか?より具体的な質問は、タイムアウトトランザクションが静かにロールバックされるのではなく、リソースをロックすることになるのはなぜですか?どんな助けも感謝しています。

役に立ちましたか?

解決

これはそうです JBoss 4.0のバグ.

他のヒント

関連する部品を元の構成から含めることを忘れました。

<container-configuration>
  <container-name>Standard CMP 2.x EntityBean with cache invalidation</container-name>
  <call-logging>false</call-logging>
  <invoker-proxy-binding-name>entity-rmi-invoker</invoker-proxy-binding-name>
  <container-interceptors>
        ...      
  </container-interceptors>
  <instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
  <instance-cache>org.jboss.ejb.plugins.InvalidableEntityInstanceCache</instance-cache>
  <persistence-manager>org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager</persistence-manager>
  <locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
  <container-cache-conf>
        ...      
  </container-cache-conf>
  <container-pool-conf>
    <MaximumSize>100</MaximumSize>
  </container-pool-conf>
  <commit-option>A</commit-option>
</container-configuration>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top