PSUG #92 - La Query monade et DB monade avec Spring et Hibernate
Bonjour à tou•te•s,
Pour ce meetup d’octobre, Mobiskill nous accueille pour parler d’abstraction pure de DB avec une Query Monade avec Stéphane Tankoua, puis de DB Monade dans du legacy Spring et Hibernate avec Loïc Girault.
Query monad: a specialized Reader for pure Database Programming – Stéphane Tankoua
At Fabernovel Technologies (formerly Zengularity), many of our applications use relational databases and our favorite tool for this is the Play! Anorm library. We decided to express and interpret database operations, which by their very nature are side effects, with a specialised Reader monad: Query. This Query monad allow us to be compliant with functional principles such as: lazy evaluation, referential transparency.
During this talk I will give the rationale of our approach, and using functional programming principles listed before, I will derive the implementation of this monad.
Les slides sont ici.
Hibernate : du printemps à l’été avec la DB monad – Loïc Girault
Chez mediarithmics la base de code legacy d’un service utilise Hibernate et gère les transactions avec Spring. Spring présente un certain nombre de casseroles :
- imposer le paradigme de J2EE qu’une requête http sera traité par un thread ce qui s’apparie assez mal avec la facilité d’écrire du code asynchrone en scala
- l’utilisation d’aspectj qui ne s’intègre pas de manière optimale avec sbt (pas compilation incrémentale, aspect non tissé après trois tests)
Pour ces raisons et d’autres, nous avons cherché une alternative. La solution est venue de l’univers fonctionnel : en utilisant cat-effect et notamment la type class Bracket nous avons pu implémenter une monade permettant de remplacer avantageusement spring-transaction.