Integrating a RubyOnRails app with Java-based services

9 01 2008

One of our customers, HandiSup, needed a way to manage more efficiently the allocation of their resources ; as they supply services to handicapped individuals they have to assign students to specific requests (go to the university’s restaurant, pick up student at home, etc.). So far everything was done by hand: collecting requests, managing customers and suppliers, etc.

We designed Kalendari, our resource management web application, to solve this problem: using a web interface HandiSup’s users are able to easily manage their customers and their requests.

Automatically creating a planning (where suppliers and requests are matched) was the most interesting bit.  We initially started with a home-grown algorithm before switching over to an open-source solver.  Gecode/R, a set of Ruby bindings for Gecode, seemed promising, though at the time at an early development stage — the API was therefore unfinished and overall stability might have been a concern.

We finally implemented something like this:

  •  The core of the Rails app provides CRUD front-end for users, suppliers, requests and schedule visualisation
  • Automatic schedule generation is delegated to Choco, an open-source constraint solver developped by the CS department at Ecole des Mines de Nantes
  • ActiveMessaging and a StompServer instance handle the communication between the above two components.

The schedule generator is a pluggable component: the Rails app is only aware of the API needed to be called to get the problem solved; the scheduler is hidden behind a Proxy.  Depending on the system’s configuration we can either use our home-grown solver or the one based on Choco.



Intégration de Ruby On Rails et des services Java

9 01 2008

Un de nos clients, HandiSup, recherchait un moyen de gérer plus efficacement l’affectation de leurs intervenants ; fournissant des services à la personne ils doivent affecter des personnes (les accompagnateurs) à des besoins donnés (les accompagnés). Jusqu’à présent tout était construit à la main : les listes d’accompagnateurs, d’accompagnés, de demandes, les plannings…

Notre applicatif Kalendari a été conçu pour répondre à leur problématique de gestion de ressources : Kalendari leur permet de gérer les accompagnateurs, les accompagnés et les demandes de manière simple via une interface web.

Restait à résoudre la facette la plus intéressante du problème : la génération automatique de plannings. Lancés initialement sur une solution faite maison nous nous sommes ensuite orientés vers l’utilisation d’un solveur libre. Gecode/R,des bindings Ruby pour Gecode, était une solution intéressante, mais à l’époque en phase initiale de développement — donc potentiellement peu stable et dont l’API était sujette à de grands changements.

Nous nous sommes finalement fixés sur l’architecture suivante :

  • la gestion CRUD des données se fait à partir de l’application Rails (gestion des accompagnateurs, accompagnés, demandes, etc.)
  • l’affectation automatique des accompagnateurs est effectuée grâce à un solveur de contraintes : Choco, un solveur libre développé en Java par l’équipe Contraintes de l’Ecole des Mines de Nantes
  • l’interconnexion entre les deux composants du système se faisant grâce à Active Messaging et un serveur Stomp.