Question

Je travaille donc sur un projet secondaire en utilisant MySQL / MyBatis3 / Tomcat. Je travaille actuellement à activer la mise en cache dans Mybatis. Lorsque j'ai essayé d'abord d'allumer la mise en cache, j'ai obtenu des exceptions en raison du fait que mon objet n'a pas implémenté sérialisable. Ainsi, après avoir implémenté la série avec l'objet, j'essayais de mettre en cache; Il semblait bien caché.

Mais; Lorsque je frappe mon servlet une deuxième fois avec la même situation, et que le mappeur d'objet tente de désérialiser mon objet à partir du cache, j'obtiens la trace de pile suivante:

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

L'autre chose que je ne comprends pas est la suivante:

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;

Pourquoi essaie-t-il même de charger la classe pour commencer? Il a juste besoin de lancer en sérialisable. Il vaut la peine de noter que lorsque je n'ai pas de mise en cache allumé; Tout fonctionne comme prévu.

Était-ce utile?

La solution

Fondamentalement, la raison que cela s'est produite était parce que mon projet dans Eclipse est incorrectement configuré, ce qui a entraîné que certaines classes ne sont pas disponibles lorsque mon serveur a commencé. Fondamentalement, tout ce que j'ai fait a été de modifier mon répertoire de sortie de build de "Workspace / project / build" en "Workspace / project / webContent / web-inf / build". Je vais en savoir plus sur le déploiement du servlet approprié maintenant ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top