2

そのため、MySQL / MyBatis3/Tomcatを使用してサイドプロジェクトに取り組んでいます。私は現在、MyBatisでキャッシュをオンにする作業をしています。最初にキャッシュをオンにしようとしたとき、オブジェクトがSerializableを実装していなかったため、例外が発生しました。したがって、オブジェクトを使用してSerializableを実装した後、キャッシュしようとしていました。うまくキャッシュされているように見えました。

だが; 同じ状況でサーブレットを2回ヒットし、オブジェクトマッパーがオブジェクトをキャッシュから逆シリアル化しようとすると、次のスタックトレースが取得されます。

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

私が理解していない他のことはこれです:

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;

そもそもクラスをロードしようとしているのはなぜですか?Serializableにキャストする必要があります。キャッシュをオンにしていない場合は注意が必要です。すべてが期待どおりに機能します。

4

1 に答える 1

0

基本的に、これが発生した理由は、Eclipseのプロジェクトが正しく設定されておらず、サーバーの起動時に一部のクラスが使用できなくなったためです。基本的に、ビルド出力ディレクトリを「workspace / project/build」から「workspace/project / WebContent / WEB-INF/build」に変更するだけでした。これから、適切なサーブレットのデプロイメントについて詳しく説明します。

于 2011-02-06T18:40:55.900 に答える