Java, SOA, Architecture & Methodes agiles par Thomas Recloux

Quels services Google utilisez vous ?

Publié le 23 janvier 2008 par Thomas Recloux

Je suis hyper dépendant des services Google, voici ce que j’utilise :

  • Le moteur de recherche : combien d’articles ou de documents trouvés  ou encore de bugs résolus grâce à Google ?
  • Gmail : Courriel perso + mailing lists
  • Reader : Lecture des flux RSS/Atom
  • Browser Sync : Synchronisation des marque pages, cookies, pages en cours, …. entre les différentes installation de firefox que j’utilise (il y en a au moins 5)
  • Notebook : Prise de notes rapide, liens a lire.
  • Altertes : Me permet de recevoir un email quand mon nom est cité sur la toile
  • Analytics : Permet d’obtenir des statistiques sur la fréquentation de ce blog.
  • Documents : Bien pratique pour une utilisation privée, pour du travail collaboratif ou pour avoir toujours les docs sous la main.
  • Maps : Avec Google Earth, je l’utilise pour pré visualiser des parcours de VTT
  • Talk :En client léger dans GMail ou sous linux avec Pidgin
  • Code : Hébergement de projets OpenSource

A ces services s’ajoutent des produits comme GWT ou Android (bientôt), je suis donc bel et bien google dépendant. Google héberge bon nombre de mes données privées, les risques sont donc nombreux mais j’ai vraiment confiance dans cette boite. Ça n’est pas très rationnel certes. Et vous ?

Hibernate ou iBatis ?

Publié le 21 janvier 2008 par Thomas Recloux

Dans cet entretien vidéo, Mark Richards donne son point de vue sur le choix entre Hibernate et iBatis.

J’ai souvent rencontré des intégristes des deux solutions et je trouve que son point de vue est très bon :

  • Quand on peut construire le modèle de données et le modèle objet de concert, Hibernate est adapté
  • Si on en arrive à écrire du SQL, iBatis est adapté
  • Il ne faut pas hésiter à utiliser les deux outils dans le même système. Mark donne l’exemple d’un système dans lequel hibernate est utilisé pour les fonctionnalités de gestion traditionnelles alors que iBatis est utilisé pour le reporting.

Comme souvent il n’y a pas de mauvais produits, uniquement des mauvais choix :-)

Via application-servers

Betisier

Publié le 21 janvier 2008 par Thomas Recloux

Guillaume Bodet a publié un bêtisier rassemblant des exemples de code source original, voici un exemple de méthode récursive qui prend bien des détours pour accomplir sa mission.

public void completeParentsList (String id, List<MyBean> fathers) {
	for (BigDecimal key : idsList) {
		MyBean bean = beansById.get(key.toString());
 		if (bean.getId().equals(id)) {
 			fathers.add(bean);
 			completeParentsList(bean.getParentId(), fathers);
 		}
	}
}

Switcher vers Leopard

Publié le 21 janvier 2008 par Thomas Recloux

Comme beaucoup de monde, j’ai utilisé et j’utilise beaucoup les OS de Microsoft.

Sur les postes de travail rencontrés en clientèle, XP est omniprésent

Sur mes portables professionnels et perso XP et Ubuntu cohabitent. A la maison XP n’est utilisé que pour les logiciels de cartographie Garmin et pour utiliser la webcam avec Skype. Mon épouse utilise également exclusivement Ubuntu et pourtant c’est loin d’être une geekette .

Sur le portable pro, j’alterne les deux. XP a l’avantage pour l’utilisation d’exchange et le travail sur les documents office.

Depuis peu, je m’intéresse fort aux macs, je pense que c’est la prise en main de l’Iphone d’un ami qui a attirée ma curiosité, l’ergonomie semble guider la conception des produits et même pour un techos comme moi c’est important. Le fait que la base soit un dérivé d’unix et que certains développeurs confirment que le « switch » est facile n’arrangent rien à cet envie galopante. Je pense également que le design l’originalité des produits participent à l’attractivité des macs.

Reste quand même quelques freins : le prix reste tout de même élevé, il faut compter 1300 euros pour un macbook 13 pouces et 1900 pour un 15 pouces, c’est très cher d’autant plus que notre portable perso n’a qu’un an. En passant au mac j’ai aussi un peu peur de devenir dépendant de formats propriétaires dont les éditeurs raffolent en général

En passant je vous conseille cette vidéo qui détaille les nouvelles fonctionnalités de Léopard, la dernière version de MacOS X.

Les continuations Jetty

Publié le 15 janvier 2008 par Thomas Recloux

Il y a 4 ans, j’avais été chargé d’une étude sur le « push » en client léger, le but était de pouvoir notifier les utilisateurs d’évènements importants.

Comme le protocole HTTP est basé sur un système de requêtes / réponses, qui s’apparente à du « pull », le serveur ne peut pas déclencher d’évènements en direction du client. L’idée est donc de faire en sorte que le client vérifie régulièrement si le serveur veut lui présenter un évènement.

J’avais implémenté un système de « pooling » HTTP avec une servlet qui se mettait en attente sur un conteneur de messages pour une durée de plusieurs dizaines de secondes avant de retourner une réponse au navigateur qui s’empressait de déclencher une nouvelle requête. Bien sur, l’inconvénient majeur de cette architecture est que chaque utilisateur bloque un Thread coté serveur, ce qui est gourmand en ressources.

Avec les applications AJAX, les besoins de ce type se multiplient. Heureusement les nouvelles implémentations d’I/O Java permettent de ne pas monopoliser un thread par socket. Il est donc possible d’affecter le thread à une autre tache pendant l’attente d’un évènement.

La version 6 du conteneur de servlet Jetty propose une implémentation de cette solution via les Continuations. Cette API permet de suspendre une requête et de libérer le thread. En général, intégrer des spécificités dans un conteneur web est délicat car il y a un risque : on grève la portabilité vers un autre conteneur. Cependant dans ce cas, l’API est utilisable dans un autre conteneur en basculant dans un classique wait/notify qui bloque le thread. De plus, les continuations vont être proposées au groupe de travail sur les Servlet 3.0 .

Une bonne nouvelle pour les applications de type CTI qui pourront se passer d’Applet et autres ActiveX.

Via ongwt.

Websphere MQ en JMS / JNDI

Publié le 14 janvier 2008 par Thomas Recloux

Petit problème technique rencontré la semaine dernière : Configurer un logiciel pour utiliser Websphere MQ comme provider JMS via JNDI. En effet, le logiciel (propriétaire) ne propose pas d’instancier directement la ConnectionFactory mais demande une factory JNDI, une URL et un nom JNDI.

Après quelques recherches, j’ai trouvé un article chez IBM qui explique qu’il faut télécharger des support pacs (MS0B & ME01)

La factory à utiliser est « com.ibm.mq.jms.context.WMQInitialContextFactory »

L’url est de la forme « hostWebsphereMq:portManager/channel ». Par exemple : « 192.168.0.25:1414/SYSTEM.DEF.SVRCONN »

Le nom de la connectionFactory est le nom du manager MQ

Voici un exemple de code qui envoie un message texte dans Websphere MQ en JMS via JNDI.

	    /* Environement JNDI */
	    Properties env = new Properties();
	    /* Factory fournie par les support pacs */
	    env.put(Context.INITIAL_CONTEXT_FACTORY,  
               "com.ibm.mq.jms.context.WMQInitialContextFactory");
	    /* serveur:port/channel */
	    env.put(Context.PROVIDER_URL, "mymanager:1414/SYSTEM.DEF.SVRCONN");
	    /* Connexion JNDI */
	    Context context = new InitialContext(env);  

	    /* Recherche de la connection factory (nom du manager) */
	    QueueConnectionFactory queueFactory = (QueueConnectionFactory) context.lookup("MYTSTA"); 

	    /* API JMS classique */
	    QueueConnection queueConnection = queueFactory.createQueueConnection();
	    QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
	    Queue queue = queueSession.createQueue("TEST.QUEUE");
	    QueueSender queueSender = queueSession.createSender(queue);
	    TextMessage message = queueSession.createTextMessage();
	    message.setText("Hello World !");
	    queueSender.send(message);
	    queueSession.close();

Methodes agiles : ma vision en ce début d’année

Publié le 13 janvier 2008 par Thomas Recloux

Depuis déjà quelques années et sous l’impulsion d’Arnaud j’ai fait en sorte que les projets auxquels je participe intègrent certains grands principes connus :

  • Tests : La mise en place réelle de ces tests est directement soumise à la conviction de l’encadrement du projet. Dans tous les cas, je propose l’outillage qui permet de mettre en place les tests unitaires et fonctionnels. La testabilité doit faire partie des critères de définition de l’architecture, par exemple l’injection de dépendance favorise la mise en place des tests. La testabilité peut aussi être un critère de choix de technologie, notamment pour l’IHM.
  • Intégration continue : De plus en plus facile à mettre en œuvre grâce à des outils comme subversion, maven ou continuum, je constate une demande forte des chefs de projet. Tout le monde a déjà vécu les intégrations laborieuses, notamment en off-shore. Cela donne une visibilité commune sur le travail en cours et responsabilise l’équipe.

J’ai maintenant envie de passer la vitesse supérieure et d’embrasser complètement les principes des méthodes agiles. Dans ce cadre, je me suis documenté sur eXtreme Programming (XP) que je connaissais de nom et sur Scrum que j’ai découvert. XP traite plus des méthodes d’ingénierie logicielle alors que Scrum propose une organisation projet. Guillaume Bodet a publié un article très pédagogique sur ce sujet.

J’ai organisé une session de formation aux méthodes agiles l’été dernier, c’est Claude Aubry qui assuré la formation les participants étaient très satisfaits. En fin d’année, j’ai participé aux rencontres agiles qui m’ont permis d’avoir un peu plus de retours d’expérience.

Je pense que la plus grosse marche à franchir consiste à casser la barrière MOA/MOE et cette habitude de tout vouloir planifier / analyser / concevoir à l’avance.

En 2008, il faut maintenant passer à l’action. Comment faire ?

  • Convaincre nos commerciaux de proposer des offres alternatives en réponse aux appels d’offre de projets au forfait ?
  • Suivre une formation certifiante Scrum pour approfondir le sujet et rassurer les clients ?
  • Profiter d’un projet au forfait pour mettre en place ces méthodes au sein du forfait en essayant de convaincre le client sur les points clefs : pas de planification à l’avance, rôle de directeur de produit, itérations courtes …

Ouverture du blog

Publié le 13 janvier 2008 par Thomas Recloux

Ca y est, je me lance j’ouvre ce blog dans le but de parler d’informatique en général et d’architecture et de méthodes agiles en particulier. Je vais aussi parler des mes loisirs, le VTT et la photo notamment.

Bonne lecture.