最後に私はそれをやりました。他のプログラマーのためのコードの投稿。このコードは、非同期ドライバを使用して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;
}
}