2012-02-07 3 views
0

My Play! 응용 프로그램에는 하나의 모듈, morphia가 있습니다. My DB는 mongolab (AWS)입니다. 처음 컴파일되고 실행됩니다. 그런 다음이 DB 인증 예외를 모든 후속 요청에 던집니다. 플레이 모피 아가 모든 요청에 ​​대해 재 인증을 시도하는지 아는 사람 있습니까? 어떤 도움을 많이 주셨습니다. 감사.mongoLAB을 사용하는 playMorphia IllegalStateException : 동일한 DBObject에서 인증을 두 번 호출 할 수 없습니다.

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

음, db 인증은 재생 시작시 호출됩니다. 문제는 개발자 모드에서 실행될 때 Java 소스 및보기 소스의 모든 코드 변경시 재생이 다시 시작될 수 있다는 것입니다.

내가 항상 trusted environment에서 mongodb를 사용하기 전에이 문제가 발생하지 않았습니다. 그러나 이러한 종류의 문제는 피해야하며 아마도 단순히 시도/포착하고 무시해야합니다. https://github.com/greenlaw110/play-morphia/issues/new에게 문제를 제출해주세요.

+0

당신이 코드 변경에 다시 시작 연결에 대한 옳다고 생각한다. 내가 너의 기둥에 올릴거야. 빠른 처리 시간을 가져 주셔서 감사합니다. – zenoexo

-1

이 "인증 두 번 예외가"이 사용자 & 패스와 클래스 DatastoreImpl의 생성자에서라고

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

에서 발생합니다. 그래서 새로운 DatastoreImpl()이 동일한 db에서 두 번 발생하면이 예외가 발생합니다. 아래 코드를 시도 할 수 있습니다

, 그것은 도움이되기를 바랍니다 :

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