playMorphia with mongoLAB IllegalStateException:无法在同一个DBObject上调用两次authenticate

时间:2012-02-07 00:44:04

标签: playframework morphia mlab

我的游戏!应用程序有一个模块,morphia。我的数据库是mongolab(在AWS上)。它第一次编译和运行。然后将抛出此DB身份验证异常以及所有后续请求。有没有人知道playmorphia是否试图在每个请求上重新进行身份验证?任何帮助非常感谢。感谢。

Caused by: java.lang.IllegalStateException: can't call authenticate twice on the same DBObject
    at com.mongodb.DB.authenticate(DB.java:437)
    at play.modules.morphia.MorphiaPlugin.initMorphia_(MorphiaPlugin.java:368)
    at play.modules.morphia.MorphiaPlugin.onApplicationStart(MorphiaPlugin.java:444)
    at play.plugins.PluginCollection.onApplicationStart(PluginCollection.java:480)
    at play.Play.start(Play.java:515)

2 个答案:

答案 0 :(得分:0)

好吧,在播放开始时调用db身份验证。问题是当您在开发模式下运行时,可能会在java源代码和查看源代码中的每次代码更改时重新启动。

我之前从未遇到过这个问题因为我总是在trusted environment中使用mongodb。但是应该避免这种问题,可能只是尝试/捕捉和忽略。您能否向https://github.com/greenlaw110/play-morphia/issues/new提交问题?

答案 1 :(得分:-1)

这个“auth两次例外”被抛出

{@link com.mongo.DB#authenticate(String username, char[] passwd )}

在DatastoreImpl类的构造函数中使用user& pass调用它。 所以,如果您在同一个数据库中新建两次DatastoreImpl(),则会出现此异常。

你可以尝试下面的代码,希望它有所帮助:

DatastoreImpl ds = !this.mongo.getDB(dbName).isAuthenticated()? new DatastoreImpl(morphia, mongo, dbName, userName,asswd.toCharArray()) : new DatastoreImpl(morphia, mongo, dbName);