Domanda

Quindi sto lavorando a un progetto secondario utilizzando MySQL / MyBatis3 / Tomcat.Attualmente sto lavorando per attivare la memorizzazione nella cache in MyBatis.Quando ho provato per la prima volta ad attivare il caching, ho ricevuto delle eccezioni a causa del fatto che il mio oggetto non implementava Serializable.Quindi, dopo aver implementato Serializable con l'oggetto che stavo cercando di memorizzare nella cache;sembrava memorizzare correttamente nella cache.

Ma;quando colpisco il mio servlet una seconda volta con la stessa situazione e il mappatore di oggetti tenta di deserializzare il mio oggetto dalla cache, ottengo la seguente traccia dello stack:

### 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'altra cosa che non capisco è questa:

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;

Perché sta anche tentando di caricare la classe per cominciare?Deve solo trasmettere a Serializable.Vale la pena notare che quando non ho la cache attivata;tutto funziona come previsto.

È stato utile?

Soluzione

Fondamentalmente, il motivo per cui ciò è accaduto era perché avevo il mio progetto in Eclipse impostato in modo errato e ciò ha comportato la mancata disponibilità di alcune classi all'avvio del mio server.Fondamentalmente, tutto ciò che ho fatto è stato cambiare la mia directory di output di build da "workspace / project / build" a "workspace / project / WebContent / WEB-INF / build".Leggerò di più sulla corretta distribuzione dei servlet ora ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top