2015-07-16 1 views
2

J'ai une interface avec une seule méthode qui retourne l'objet "config". Je veux utiliser cette interface dans les environnements Android et Vertx3.Vertx3 - Renvoie une valeur d'une connexion JDBC? (sq db).

Config retrieveConfig(String authCreds); 

Je suis en train de mettre en œuvre ce dans un programme de VertX, en utilisant le client JDBC à partir, mais je suis en cours d'exécution sur les questions.

jdbcClient.getConnection(sqlConnResult -> 
//checks for success 
sqlConnResult.result().query(selectStatement, rows -> { 
    //get result here, want to return it as answer to interface. 
    //seems this is a "void" method in this scope. 
}); 

Cette interface est-elle même possible avec le code asynchrone Vertx?

Répondre

2

En Async programming vous ne pouvez pas vraiment renvoyer votre valeur à l'appelant, parce que ce serait alors un appel de blocage - l'une des principales choses que async programming cherche à supprimer. C'est pourquoi dans Vertx beaucoup de méthodes retournent this ou void.

divers paradigmes existent comme des alternatives:

  • Vert.x utilise largement l'interface Handler<T> où la méthode handler(T result) sera exécutée avec le résultat.

  • Vert.x 3 prend également en charge le Rx Observable. Cela vous permettra de retourner un Observable<T> qui émettra le résultat à subscribers une fois le async task terminé.

  • De plus, il existe toujours une option pour retourner Future<T> qui, une fois la tâche asynchrone terminée, contiendra le résultat. Bien que Vert.x ne l'utilise pas vraiment beaucoup.

Vous allez probablement trouver difficile d'avoir une common interface comme celui-ci pour blocking et non-blocking api. Vertx offre des moyens agréables et faciles à run blocking code mais je ne pense pas que ce soit une bonne solution dans votre cas.

Personnellement, je voudrais regarder RxJava. Il est supporté par Rx on Android, et a été bien adopté en Vertx 3 - avec presque tous les appels d'API ayant un Rx equivalent.

Passer de:

Config retrieveConfig(String authCreds); 

à

Observable<Config> retrieveConfig(String authCreds); 

vous donnera la possibilité d'avoir une interface commune et pour que cela fonctionne sur les deux Android & Vert.x. Cela donnerait également l'avantage de ne pas avoir à se perdre dans l'appel de l'enfer que Rx cherche à éviter.

Espérons que cela aide,

+0

est-il possible d'implémenter l'implémentation RxJava/réactive sans changer le système sous-jacent? peux-tu mélanger? – Zerkz

+0

@Zerkz Je ne comprends pas très bien.Vous pourriez peut-être mettre à jour votre question avec des exemples, ou commencer une nouvelle question et poster le lien ici. – Will

+0

nm, je pense que j'étais capable d'y répondre. Merci pour votre aide Will! – Zerkz