
Le 21 mars, le Mongo User Group à la gentillesse d’accueillir les développeurs de Jongo.
Si Mongo est plein de qualités, les exploiter à l’aide de son driver Java peut être délicat. Des sucres syntaxiques en simplifient d’ailleurs l’usage, Morphia – le plus populaire – permet d’écrire des requêtes à l’aide de builders et d’exploiter les résultats unmarshallé en objets Java. Dans leur lignée, Jongo propose une nouvelle approche : écrire directement les requêtes en chaînes de caractères (et récupérer les résultats unmarshallés).
En un clin d’oeil :
// Mongo shell
db.peoples.find({age: {$gt: 18}})
// Jongo
Iterable<People> adults = peoples.find("{age: {$gt: 18}}").as(People.class);
// Java driver
Iterable<BSONObject> adults = peoples.find(new BasicDBObject("age", new BasicDBObject("$gt", 18)));
// Morphia
Iterable<People> adults = ds.createQuery(People.class).field("age").greaterThan(18);
Les retours sont bienvenus sur l’api à l’étude et les sources GitHub.
Voilà 11 ans que Roy Fielding a introduit REST, le style d’architecture original du web appliqué aux échanges inter-applications. Reposant sur HTTP, il promet économie, simplicité et profit des structures réseau en place. Voyons comment l’implémenter via un client JavaScript — présenté ici — communiquant avec un serveur Java — présenté dans un article connexe –. Le code clé-en-main est disponible sur GitHub.





Le client JavaScript que nous allons déployer repose sur jQuery — un framework de haute productivité —, nous lui adjoindrons BackboneJS, un framework MVC REST, et RequireJS, un chargeur de modules à la demande.
Lire la suite de cet article »
Voilà 11 ans que Roy Fielding a introduit REST, le style d’architecture original du web appliqué aux échanges inter-applications. Reposant sur HTTP, il promet économie, simplicité et profit des structures réseau en place. Voyons comment l’implémenter via un client JavaScript — présenté dans un article connexe — communiquant avec un serveur Java — présenté ici –. Le code clé-en-main est disponible sur GitHub.
JAX-RS — Java API for RESTful Web Services — standardise l’implémentation de REST en Java (une API + une servlet). Nous retiendrons son implémentation de référence, Jersey, et la déploierons sur un serveur Jetty-Embedded (le code clé-en-main dispose d’un main effectuant le déploiement ; pas besoin d’installer de serveur).
Les web services REST sont des ressources. Une ressource est identifiée par un nom du domaine, produit, commande, etc. HTTP définit 7 verbes pour manipuler les ressources :
- GET pour la lecture,
- PUT pour la modification,
- DELETE pour la suppression,
- POST pour la création et autre,
- OPTIONS (verbes disponibles), HEAD (prise de pouls) et TRACE (écho des headers de l’appelant) non abordés
Une fois déployée, la servlet Jersey mappe l’url /resource/* ; la partie cliente est disponible sur /index.html. Le web.xml définit deux filtres Jersey afin de loguer les trames HTTP des échanges client-serveur.
Lire la suite de cet article »
Authentifier les utilisateurs d’une application est une étape cruciale pour tout système d’information. Restreindre l’accès à ses ressources selon certains critères l’est également. Côté web, Spring Security tient le haut du pavé en la matière. Pourtant son adhérence à Spring et sa volumétrie — plus de 10 JAR de dépendances — peuvent représenter un frein à son adoption. En outre, son absence d’intégration à Guice ou la récurrence du déploiement d’une application App Engine peuvent le rendre impraticable. Voici une bonne occasion pour se tourner vers Apache Shiro.
Lire la suite de cet article »
Format privilégié pour les échanges inter-applications, XML est l’objet de nombreuses bibliothèques Java. Cependant, ces bibliothèques masquent toutes le data binding qu’elles effectuent ; la transformation d’un document XML en grappe d’objets. Nous voilà bien démunis dès lors qu’une application produit du XML comme une simple chaîne de caractères. L’utilisation d’API bas niveau (DOM, XPath) — attachées à la structure du document — se révélant fastidieuse, la majorité des implémentations JAX-RS (Jersey, CXF) ont retenu la même API de haut niveau — concentrée sur les données — : JAXB. Faisons de même.
Lire la suite de cet article »
Le temps de [ ] est révolu ; celui de <> est venu. La liste a remplacé le tableau et type ses éléments — comme son prédécesseur — depuis java 1.5. Mais est-elle efficace ? À quel prix s’entoure-t-on d’un de ses cadets, LinkedList, HashSet, TreeMap ? La JavaDoc détaille leurs complexités, pourtant aucun site ni ouvrage semblent n’en faire l’écho. Quelques indices glanés dans « Java in a Nutshell » quelques autres dans « Java Generics and Collections » pas beaucoup plus sur la toile à ma connaissance. Les Collections, utilisées si généreusement, seraient méconnues ? Petite revue des troupes.
Lire la suite de cet article »
Parmi les piliers de l’OOP, 3 sont majoritairement implémentés par nos langages, l’héritage, le polymorphisme et l’encapsulation. Et, bien qu’à l’intérêt reconnu, la délégation ne l’est que trop rarement. Elle remplace pourtant souvent avantageusement l’héritage en réduisant couplage et graphe d’objets. Voyons comment faire de cette petite sœur injustement négligée une alliée de choix.
Lire la suite de cet article »