Pergunta

Então, estou trabalhando em um projeto paralelo usando MySQL / MyBatis3 / Tomcat.Atualmente, estou trabalhando para ativar o cache no MyBatis.Quando tentei ativar o cache pela primeira vez, obtive exceções devido ao fato de que meu objeto não implementou Serializable.Assim, após implementar Serializable com o objeto que estava tentando armazenar em cache;parecia armazenar em cache corretamente.

Mas;quando eu acerto meu servlet pela segunda vez com a mesma situação, e o mapeador de objetos tenta desserializar meu objeto do cache, obtenho o seguinte rastreamento de pilha:

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

Outra coisa que não entendo é:

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 que ele está tentando carregar a classe para começar?Ele só precisa ser convertido para Serializable.É importante notar que quando não tenho o cache ativado;tudo funciona conforme o esperado.

Foi útil?

Solução

Basicamente, isso aconteceu porque eu tinha meu projeto no Eclipse configurado incorretamente e isso resultou na indisponibilidade de algumas classes quando meu servidor foi iniciado.Basicamente, tudo o que fiz foi mudar meu diretório de saída de construção de "workspace / project / build" para "workspace / project / WebContent / WEB-INF / build".Vou ler mais sobre a implantação adequada de servlet agora ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top