mercredi 30 septembre 2009

Un simple serveur proxy en Java

Le rôle d'un serveur proxy est d'avoir un seul point d'entrée qui se chargera de relayer les demandes à d'autres serveurs. Il peut aussi se charger de centraliser l'accès à des ressources dont la localisation ne sera connu que par lui.
Il est possible de coder un tel serveur en Java, et ce de manière assez simple.
C'est ce que propose l'article suivant.

vendredi 18 septembre 2009

Passage par valeur ou par référence en Java

Parfois, on ne se pose même plus la question.
Mais parfois, c'est aussi bon de se rappeler les bases.
Alors en Java, passage par référence, passage par valeur, les deux ?

La réponse est ici, simple, claire, précise.

Oracle coherence

Hier soir, j'ai assisté à la présentation d'Oracle Coherence lors de la réunion de mon JUG préféré ;)
Oracle Coherence est un cache distribué en mémoire. On peut y placer des données issues de sources diverses (fichiers, webservices, base) et permettre ainsi un accès à ces données dans des temps réduits.

Via une API propriétaire, l'accès à la base n'est plus direct. Le chargement des données se fait par l'intermédiaire d'une grille de noeuds qui contient un ensemble de données issu de la base. C'est cette grille qui se charge de la synchronisation avec la base.
La création et la suppression de noeuds peut être dynamique et paramétrable.
C'est un peu comme un système de cache très évolué.

Après la présentation, j'ai eu quelques questions, du type :
Est ce que mon application devient dépendante de ce framework ?
Peut-on se détacher de Coherence à tout moment ?
Comment intégrer Coherence à mon existant ?

Et bien après les questions qui ont suivi je suis un peu dans le flou, ne prenez donc pas ce que j'écris comme une source sure.
Toutefois, ce que j'ai cru comprendre me permet de dire que :
- via l'AOP la dépendance à Cohérence peut être limitée,
- mais l'accès aux données doit forcément passé par cette API. Meme dans le cas ou la grille de noeuds n'est pas accessible, et que mon application accède directement à la base, elle passera forcément par le framework,
- Coherence pourra utiliser votre existant (via l'AOP) pour l'accès (en lecture et en écriture) à votre source de données.

La communication entre les noeuds est optimisée mais reste dépendante de la vitesse du réseau. La performance d'une technologie de ce type dépend la vitesse du réseau et la taille des objects que l'on pose dans le cache distribué. La grille Coherence est donc constituée d'un ensemble de noeuds (un noeud = une JVM) qui se voient sur un réseau de type LAN (>= 100 Mbs) et communiquent grâce à un protocole propriétaire appelé Tangosol Cluster Management Protocol (TCMP). Dans le cas ou un client de la grille (ex : un serveur JEE) ne peut communiquer avec celle-ci que sur un réseau de type WAN alors la communication entre le client et la grille ne se fera pas en TCMP mais sous TCP/IP, ceci avec une légère baisse de performance.


Après une bonne nuit de sommeil, j'aurais encore des questions.
La sécurité à rapidement été évoquée, et j'aimerais tout de même trouver la réponse à :
- il semblerait que la manière de communiquer entre les noeuds ne soient pas cryptée,
- est ce que la communication entre les noeuds et ma source de données est cryptable (pour les webservices ou une base) ?
- si le cryptage se fait avant l'envoi, à la grille, est ce qu'à un moment donné mes données sont décryptées par cohérence ?

Ainsi, l'intégration de Coherence ne se justifie pas tout le temps et doit être longuement étudiée. Il est possible que ca ne soit utile que sur certaines parties d'une application.
On remarquera donc que cette solution semble beaucoup plus évoluée que les solutions actuelles mais ne pourrait convenir qu'à de grosses applications dont le temps d'accès est une problématique.

Voici un lien vers la page officielle pour découvrir d'avantage cette offre d'Oracle.

mercredi 16 septembre 2009

Lombok et Naked Object

Il me semblait avoir déjà parlé du projet lombok. Il permet d'écrire encore moins de code grâce aux annotations. Par exemple, en y faisant référence, il n'y a plus besoin d'écrire les getters et setters d'une classe métier.
Bien sur, son utilisation ne va pas révolutionner votre manière de travailler, mais il pourra peut être vous faire gagner quelques minutes.
Si vous voulez plus de détails sur ces possibilités (encore limitées) rendez vous ici, ou encore ici.
Je ne connaissais pas non plus Naked Object qui est un pattern et un framework.
Je vous laisse le découvrir en détails sur infoQ, sur wikipedia, ainsi que sur le site officiel. En dernier lieu, vous pourrez découvrir son intégration avec Maven 2 ici.

Et quand on utilise Naked Objects, lombok peut, une fois de plus, simplifier le code des classes métier. C'est à découvrir ici.

Déclarer un virtual host avec Apache

Il est parfois profitable de pouvoir utiliser deux URLs différentes, pointant pourtant sur la même machine, comme sur un poste de développement par exemple.
Cet article décrit la manière de configurer apache pour y déclarer des virtual hosts. La méthode est décrite sous Windows mais est parfaitement applicable au monde Unix/Linux.
C'était la petite astuce du jour

Terracotta pour Hibernate

Avec la nouvelle version de Terracotta, il existe un plugin gérant le cache des transactions faites via Hibernate.
Très simple à mettre en place, seule une annotation semble suffir.
Je vous laisse découvrir le détail ici.

vendredi 4 septembre 2009

Test de charge

On en apprend tout les jours, et heureusement!
Je viens de découvrir le framework "The Grinder", permettant de faire des charges.

Certains se diront, mais il vient de se réveiller ou quoi ?
Pas forcément, c'est juste un outil que je n'avais jusqu'à présent pas eu besoin d'utiliser, je connaissais tout de même JMeter (de nom... hum hum touss touss).
Bref, le framework The Grinder semble avoir bonne réputation, on pourra lire sur sourceforce "mieux que JMeter, moins cher que LoadRunner".
Visiblement, les autres avis sont plus nuancés, même si The Grinder semble être un produit formidable, il aura des déficiences dans certains cas que n'auront pas ces concurrents. Mais l'inverse est également vrai.

Il ne reste plus qu'à étudier les propositions selon vos besoins, toujours est-il que le retour d'expérience sur ce framework semble bon.
Les liens :
- le télécharger sur sourceforge
- la page projet
- une comparaison avec LoadRunner et JMeter
- une comparaison avec JMeter seulement, mais beaucoup plus récente

Tout savoir sur la gestion de la mémoire en Java

Le garbage collector comment ca marche ?
Ca veut dire quoi si je rajout -Xms au lancement de ma JVM ?
C'est quoi le heap ?
Si vous vous posez ces questions, et bien les réponses sont .
Même si vous ne vous les posez pas, cet article est très intérressant, bien évidemment le titre est un peu pompeux, et vous n'apprendrez pas tout sur la gestion de la mémoire en Java.
Mais il y a certainement quelques informations que vous aviez oublié, ou des petits trucs qui seront nouveaux.

Création de composants évolutifs

A la création de gros systèmes, ou futur gros systèmes, on se dit que la structure originelle ne devrait pas bouger, que l'architecture est suffisamment bien définie pour pallier aux futures évolutions.
Il y a tout de même des règles et des outils qui permettent de vérifier que le développement de l'application va bien dans le même sens.
Vous trouverez un article qui détaille tout ca sur infoq.

mercredi 2 septembre 2009

La revue de code est une étape importante!

Vos développeurs confirmés ont produit une superbe doc de conception, tout y est claire précis, et les développeurs plus jeunes sont passé à l'étape de codage.
Malgré la meilleure volonté du monde, tout le monde fait des erreurs. De ma courte expérience, j'estime pouvoir dire que personne n'est à l'abri de la duplication de code, de boucle dont les conditions pourraient être optimisées, ou tout simplement de méthodes, fonctions, procédures selon vos termes, pas toujours codées dans les règles de l'art.

Le résultat ne va pas forcément se voir tout de suite, mais avec les mois les années, à force d'ajouter des verrues parce qu'on est pressé ou pour toutes les excuses du monde, il faut suivre la qualité du code produit.

Aujourd'hui grâce à des méthodes comme l'intégration continue, il est tout à fait possible d'obtenir un état des lieux à un instant donné.

Malgré les outils, il ne faut toutefois pas, négliger la revue de code "manuelle". Je vous laisse découvrir quelques informations de plus ici.

Comprendre le contenu d'un WSDL

Pour les néophytes en webservices, le wsdl généré peut être difficile à comprendre.
Avec des schémas à main levée et de bonnes explications, cet article vous permettra de comprendre ce fichier qui peut vite devenir inbuvable.

Solution aux attaques de sessions

L'article pointé ici présente certaines facons d'usuper une session.
Les exemples de solution sont basés sur PHP mais le reste est suffisamment théorique pour que les développeurs web utilisant d'autres langages puissent s'en inspirer.

Le billet pointe aussi vers des explications sur les attaques par injection SQL et les failles XSS.