Probelmas con session WEB - org.jboss.cache.invocation.CacheNotReadyException: Cache not in a valid STARTED state! Cache state is FAILED

Vaya problema y la web no ayuda mucho en este caso en particular con JBoss EAP 5.x y lo peor han modificado la respuesta de REDHAT que te conducía a una posible solución en los casos de las sesiones fallidas de sesión WEB.

¿A que se refieren con sesión web?


Para los que no saben que es esto de las sesiones web de cache de jboss se trata de la bien conocida cookie, la cual es creada en cada petición por JBoss ( o por así decirlo por los avances realizados por tomcat) la cual crea JSESIONID. Es fácil de identificar en nuestros navegadores usando la opciones de desarrolladores web "inspeccionar" te vas a la pestaña donde puedes ver las descarga que realiza cada pagina; tiene diferente nombre dependiendo de tu navegador; si le das clic a la pagina principal ejemplo: inici.html. Apareceré una sección donde podras ver  los headers y response que el sitio web realiza de ahí solo hay que identificar la sección de cookie.

Cada vez que consultemos una pagina con jboss muy independiente creará la sesión  ejemplo: JSESSIONID=e7kKLeyV4fMh0XZu2XM0Xg_ despues del = esta siempre sera diferente. Cada vez que se cierre la sesión o limpiemos las cookies.

¿Por que se pierde la sesión?


Viendo los foros de los desarrolladores jboss indican que la sesión esta siendo invalidada por otro servidor  o esta ya fue invalidada debido a que no lleva un estado en concreto del lado del programador, por lo tanto jboss es incapaz de leer el estado actual y siente que la sesión es fallida. 

Aunque puede ser que no sea el único problema, también se le atribuye problemas como la falta de serialización (implements java.io.Serializable ), problemas de memoria o problemas de redes, una conexión inestable a nuestros servidores.

Soluciones:


Hay dos posibles soluciones, una consiste en incrementar el tiempo en el que jboss invalida una sesión al inicio y la otra es iniciar el cache manager de manera manual para la sesión de jboss.

  • Para incrementar el tiempo hay que ir a deploy/cluster/jboss-cache-manager.sar/META-INF/jb oss-cache-manager-jboss-beans.xml y modificar session standar si usas una costum seria su equivalente.

<!-- Standard cache used for web sessions -->
   <entry><key>standard-session-cache</key>
  • A partir de este tag buscamos lo siguiente

<!-- The max amount of time (in milliseconds) we wait until the
          state (ie. the contents of the cache) are retrieved from
          existing members at startup. -->
         <property name="stateRetrievalTimeout">60000</property>

  • Modificamos el tiempo por ejemplo a 75000 o el necesario para que funcione.

Si ya lo aumentamos y no deseamos reiniciar, lo mejor es iniciar el cluster de forma manual.

  • Ir a la consola de jmx-console de nuestro servicio JBoss. Escribir los respectivas credenciales etc.
  • Una vez dentro, tenemos un frame del lado izquierdo en este buscamos la palabra jboss.cache
  • Muestra una serie de opciones en la sección central referente a nuestro cache. Elegimos el que tenga la palabra session standard.

  • Una vez dentro; de lo que denominaremos bean; tenemos información y configuración referente a la sesión estándar. La sección que nos interesa esta hasta abajo, la sección de métodos.
  • El metodo que requerimos es el "start" damos click en "invoke" y listo veremos que en el log se inicio el cache y se unio al cluster.


Comentarios

Entradas populares