为什么Play with ReactiveMongo报告由于java.io.NotSerializableException引起的磁盘写入失败:reactivemongo.bson.BSONObjectID

时间:2014-10-03 22:59:03

标签: scala playframework reactivemongo play-reactivemongo

我正在尝试将SecureSocial与reactivemongo结合使用。但是,在缓存用户时遇到问题。在开发期间,每次Play决定重新编译文件时,用户都会注销。我认为这是由于以下错误:

[error] n.s.e.s.d.DiskStorageFactory - Disk Write of f097d7b2db41b48eb28d73fffe4a0b7af0d5723fd5ea27c3f14c21d559c4f5b7448730955aaa95700df906ac38a4b6833de0dae859d957a368d3e5028208c5ba522ffd779ac8d9e439f2c7ec516dd4ddb0005fda0a4f5cd035c3eedec717807518b4dec5f1e6781ee55125a6ae33db50cba107bb73311078d50ee947bcd92033 failed:
java.io.NotSerializableException: reactivemongo.bson.BSONObjectID
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180) ~[na:1.7.0_21]
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) ~[na:1.7.0_21]
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) ~[na:1.7.0_21]
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) ~[na:1.7.0_21]
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) ~[na:1.7.0_21]

我不知道如何解决这个问题。我希望BSONObjectId默认是可序列化的,因为它是一个案例类。任何提示?

1 个答案:

答案 0 :(得分:2)

如果检查BSONObjectID的来源,事实证明它实际上不是案例类,并且在sgodbillon更改为修复bug #144之前,直到10月2日才可序列化 (the source

在发布之前,我会说你有三种选择:

  1. 使用reactive mongo的快照运行
  2. 使用修补的自定义构建(您自己制作)
  3. 运行
  4. 以某种方式更改您的序列化(例如使用json格式或类似的东西),这样您就不会真正序列化BSONObjectID的实例
相关问题