2

Scala アプリケーションの mongoDB のメモリ内バージョンとしてscalatest-embedMongoを使用しています。現在、reactivemongo ドライバーをバージョン 0.10.x からバージョン 0.11.5 にアップグレードしました。scalatest-embedMongoは、以前のバージョンのリアクティブ mongo scala ドライバーでは正常に動作していましたが、リアクティブ mongo ドライバーのアップグレードされたバージョンでは、WriteResult Future は常に、reactiveMongo ドライバー API からソースされる ArrayIndexOutOfBounds を含む失敗を返します。私はこの新しい例外に困惑しています。

スタック トレース全体を次に示します。

java.lang.ArrayIndexOutOfBoundsException: 123
at org.jboss.netty.buffer.LittleEndianHeapChannelBuffer.getInt(LittleEndianHeapChannelBuffer.java:69)
at reactivemongo.api.SerializationPack$class.readAndDeserialize(serializationpack.scala:31)
at reactivemongo.api.BSONSerializationPack$.readAndDeserialize(serializationpack.scala:41)
at reactivemongo.api.collections.GenericCollection$$anonfun$update$1$$anonfun$apply$14.apply(genericcollection.scala:314)
at reactivemongo.api.collections.GenericCollection$$anonfun$update$1$$anonfun$apply$14.apply(genericcollection.scala:313)
at scala.util.Success$$anonfun$map$1.apply(Try.scala:206)
at scala.util.Try$.apply(Try.scala:161)
at scala.util.Success.map(Try.scala:206)
at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at scala.concurrent.impl.ExecutionContextImpl$$anon$3.exec(ExecutionContextImpl.scala:107)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

前もって感謝します!!

4

1 に答える 1

1

まず、Scalatest の埋め込み mongo は、本番環境に mongo を埋め込むようには設計されていません (実際にはそのためにテストされていません) が、それが機能する場合は問題ありません。

第二に、覚えていれば、使用されているmongo dbのバージョンは、 reactmongo version に関連して重要です。EmbedMongo インスタンスを起動するときに、MongoDb のどのバージョンを設定しますか? デフォルトでは 2.4.8 が設定されており (コードの更新に時間を費やしています)、ドライバーではサポートされていません。

于 2015-08-12T15:59:40.997 に答える