Playframework playMorphia伴蒙古非法国家例外:can';t在同一DBObject上调用authenticate两次

Playframework playMorphia伴蒙古非法国家例外:can';t在同一DBObject上调用authenticate两次,playframework,morphia,mlab,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.authenti

我的剧本!应用程序有一个模块,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)

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

我以前从未遇到过这个问题,因为我总是在一个应用程序中使用mongodb。但这类问题应该避免,可能只是尝试/抓住并忽略。请将问题提交给?

此“身份验证两次异常”在

{@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);

我怀疑您关于代码更改时重新启动连接的说法是正确的。我会把它贴在你的github上。谢谢你的快速回复。