Pregunta

En primer lugar, estoy usando Oracle y JBoss 4.0.4 y soy un novato en JBoss Matters.

Nuestra aplicación distribuida utiliza frijoles CMP con una política de bloqueo de SimpleReAdWrite ... etc, que me dijeron que parecía la mejor opción en ese momento. (Los desarrolladores originales ya no trabajan con nosotros y no puedo recibir comentarios fácilmente de ellos, sin mencionar la total falta de documentación).

La configuración relevante es la siguiente:

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

La aplicación se usa todos los días, incluidos los fines de semana, desde temprano en la mañana hasta las 9-10 p.m. A veces (por ejemplo, una vez dos al mes) obtenemos este tipo de error:

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

Una transacción se desprende y posteriormente bloquea cualquier otra transacción, de cualquier otro usuario, en las tablas bloqueadas. Cada vez que esto sucede, tenemos que restablecer los servicios o matar la sesión de DB bloqueada ... o esperar que el problema se resuelva (a veces el bloqueo se levanta en cuestión de segundos).

¿Qué podría estar mal? Una pregunta más específica es, ¿por qué la transacción de tiempo sin tiempo termina bloqueando el recurso en lugar de ser retrocedido en silencio? Se agradece cualquier ayuda.

¿Fue útil?

Solución

Esto parece ser un error en JBoss 4.0.

Otros consejos

Olvidé incluir las piezas relevantes de la configuración original:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top