我的游戏!应用程序有一个模块,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)
答案 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);