2017-09-04 9 views
0

私はmongo DBで新しいJava Playプロジェクトを開始しています。私はPlayを見ました!ドキュメンテーションですが、mongoのJava非同期ドライバはありません。 Scalaリアクティブドライバのみが記述されています。 SOには数多くの類似の質問がありますが、すべて古くなっています。Javaでの非同期mongoドライバの使用

非同期の方法でmongo DBを処理する最も良い方法は何ですか?

私が注文したドキュメントコレクションが1つだけで、mongoからすべての注文を返すOrderControllerを追加する必要があるとします。

答えて

0

最後に私はそれをやりました。他のプログラマーのためのコードの投稿。このコードは、非同期ドライバを使用してMongoに行き、データベース名とともにjsonを返します。

public class MyController extends Controller { 

    public CompletionStage<Result> getDBNames() throws InterruptedException { 
     CompletionStage<List<String>> mongoDBNames = new MongoServiceWithPromises().getMongoDBNames(); 
     return mongoDBNames.thenApply(stringListToJson); 
    } 

    Function<List<String>, Result> stringListToJson = obj -> { 
     JsonNode jsonNode = Json.toJson(obj); 
     return ok(jsonNode); 
    }; 
} 

public class MongoServiceWithPromises { 
    // Open the client 
    private MongoClient mongoClient = MongoClients.create(new ConnectionString("mongodb://localhost:27017")); 


    public CompletionStage<List<String>> getMongoDBNames() { 
     final CompletableFuture<List<String>> future = new CompletableFuture<>(); 

     final SingleResultCallback<List<String>> callback = (dbNames, cb) -> { 
      if (cb == null) { 
       future.complete(dbNames); 
      } else { 
       future.completeExceptionally(cb); 
      } 
     }; 
     mongoClient.listDatabaseNames().into(new ArrayList<>(), callback); 
     return future; 
    } 
} 
関連する問題