Pregunta

Entonces estoy trabajando en un proyecto paralelo usando MySQL / MyBatis3 / Tomcat.Actualmente estoy trabajando para activar el almacenamiento en caché en MyBatis.Cuando intenté por primera vez activar el almacenamiento en caché, obtuve excepciones debido al hecho de que mi objeto no implementó Serializable.Entonces, después de implementar Serializable con el objeto que estaba tratando de almacenar en caché;parecía almacenar en caché bien.

Pero;cuando golpeo mi servlet por segunda vez con la misma situación, y el mapeador de objetos intenta deserializar mi objeto de la caché, obtengo el siguiente seguimiento de pila:

### Error querying database.  Cause: org.apache.ibatis.cache.CacheException: Error deserializing object.  Cause: java.lang.ClassNotFoundException: my.package.MyClass
### Cause: org.apache.ibatis.cache.CacheException: Error deserializing object.  Cause: java.lang.ClassNotFoundException: my.package.MyClass
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:77)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:69)
at org.apache.ibatis.binding.MapperMethod.executeForList(MapperMethod.java:85)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:65)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38)
at $Proxy5.selectAllArgs(Unknown Source)

La otra cosa que no entiendo es esta:

Serializable result;
try {
  ByteArrayInputStream bis = new ByteArrayInputStream((byte[]) value);
  ObjectInputStream ois = new ObjectInputStream(bis);

  // LINE THROWING EXCEPTION IN org.apache.ibatis.cache.decorators.SerializedCache
  result = (Serializable) ois.readObject();
  // -- -----------------------------------

  ois.close();
} catch (Exception e) {
  throw new CacheException("Error deserializing object.  Cause: " + e, e);
}
return result;

¿Por qué intenta cargar la clase para empezar?Solo necesita transmitir a serializable.Vale la pena señalar que cuando no tengo el almacenamiento en caché activado;todo funciona como se esperaba.

¿Fue útil?

Solución

Básicamente, la razón por la que esto sucedió fue porque tenía mi proyecto en Eclipse configurado incorrectamente y esto resultó en que algunas clases no estuvieran disponibles cuando mi servidor se inició.Básicamente, todo lo que hice fue cambiar el directorio de salida de mi compilación de "espacio de trabajo / proyecto / compilación" a "espacio de trabajo / proyecto / WebContent / WEB-INF / compilación".Voy a leer más sobre la implementación adecuada de servlets ahora ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top