Frage

Ich arbeite also an einem Nebenprojekt mit MySQL / MyBatis3 / Tomcat.Ich arbeite derzeit daran, das Caching in MyBatis zu aktivieren.Als ich zum ersten Mal versuchte, das Caching zu aktivieren, gab es Ausnahmen, da mein Objekt Serializable nicht implementiert hat.Nachdem ich Serializable mit dem Objekt implementiert hatte, versuchte ich zwischenzuspeichern.es schien gut zwischenzuspeichern.

Aber;Wenn ich mein Servlet ein zweites Mal in derselben Situation aufrufe und der Objekt-Mapper versucht, mein Objekt aus dem Cache zu deserialisieren, wird die folgende Stapelverfolgung angezeigt:

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

Das andere, was ich nicht verstehe, ist Folgendes:

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;

Warum wird überhaupt versucht, die Klasse zu laden?Es muss nur auf Serializable übertragen werden.Es ist erwähnenswert, dass, wenn ich kein Caching aktiviert habe;alles funktioniert wie erwartet.

War es hilfreich?

Lösung

Grundsätzlich geschah dies, weil ich mein Projekt in Eclipse falsch eingerichtet hatte und dies dazu führte, dass einige Klassen beim Start meines Servers nicht verfügbar waren.Grundsätzlich habe ich nur mein Build-Ausgabeverzeichnis von "workspace / project / build" in "workspace / project / WebContent / WEB-INF / build" geändert.Ich werde jetzt mehr über die ordnungsgemäße Bereitstellung von Servlets lesen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top