2011-10-04 2 views
3

Je cherche à implémenter un service Web basé sur JSON-RPC dans Scala en utilisant finagle. J'essaie de trouver la meilleure façon de structurer le code d'invocation RPC (c'est-à-dire prendre la demande désérialisée et invoquer la méthode appropriée).Création d'acteurs auto-documentés dans Scala

Le service doit être en mesure de cracher une page d'aide sur toutes les demandes possibles acceptées et leurs paramètres. En Java, j'utiliserais simplement des annotations (à la fois pour exposer et documenter des fonctions) et ensuite faire refléter le service RPC sur les classes appropriées, détecter toutes les méthodes exposées et ensuite utiliser les MethodInfo reflétées pour invoquer les fonctions le cas échéant.

Quelle est la manière idiomatique de Scala de réaliser quelque chose de similaire? Dois-je utiliser une approche de passage de message (c'est-à-dire passer un objet de requête à un acteur, lui demander s'il peut l'invoquer, etc.)

+0

Si vous utilisez Akka (2.1 Milestone) au lieu de Finagle, vous pouvez utiliser scala 2.10 et sa nouvelle API de réflexion pour générer ce que vous voulez. – Jan

Répondre

0

Nous avons réussi à faire quelque chose de similaire à l'approche suggérée par @Jan ci-dessus . Plus spécifiquement, nous avons défini une classe parente pour tous les objets de requête qui prend le type de retour attendu en tant que paramètre de type. Pour aller encore plus loin, nous générons nos liaisons IDL et sérialisation de protocole en réfléchissant sur les objets API (un peu plus que des ensembles de requêtes). À l'avenir, la fonctionnalité expérimentale des canaux typés dans Akka pourrait aider certains mécaniciens.