<?xml version="1.0" encoding="ISO-8859-1" ?>
<feed xmlns="http://purl.org/atom/ns#" version="0.3"
	  xmlns:dc="http://purl.org/dc/elements/1.1/"
	  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xml:lang="fr">

  <title>Neoxia Blog</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/"/>
  <tagline type="text/plain" mode="escaped"></tagline>
  
  <modified>2008-04-29T18:20:55+02:00</modified>
  <generator version="1.2.3" url="http://www.dotclear.net/">DotClear</generator>
  
  <sy:updatePeriod>daily</sy:updatePeriod>
  <sy:updateFrequency>1</sy:updateFrequency>
  <sy:updateBase>2008-04-29T18:20:55+02:00</sy:updateBase>
  
<entry xml:lang="fr">
  <title>La virtualisation selon Microsoft</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2008/04/29/26-virtualisation-selon-microsoft" />
  <issued>2008-04-29T18:20:55+02:00</issued>
  <modified>2008-04-29T18:20:55+02:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2008/04/29/26-virtualisation-selon-microsoft</id>
  <author><name>A. M.</name></author>
  <dc:subject>.NET</dc:subject>
  <summary>Hyper-V (anciennement Viridian) est le nouvel outil de virtualisation de Microsoft.
Sa date de sortie est prévue pour le mois d’août 2008, mais une version est actuellement disponible en Release Candidate.


Ce produit marque véritablement l’entrée du géant logiciel dans « la...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;strong&gt;Hyper-V&lt;/strong&gt; (anciennement Viridian) est le nouvel outil de virtualisation de Microsoft.
Sa date de sortie est prévue pour le mois d&amp;#8217;août 2008, mais une version est actuellement disponible en Release Candidate.&lt;/p&gt;


&lt;p&gt;Ce produit marque véritablement l&amp;#8217;entrée du géant logiciel dans «&amp;nbsp;la bataille de la virtualisation&amp;nbsp;».
Il vient remplacer un &lt;strong&gt;Virtual Server 2005&lt;/strong&gt; aux performances en deçà des concurrents que sont VMware et Xen.
Son approche est d&amp;#8217;ailleurs très similaire à ce dernier, car il n'assure que la gestion des ressources processeurs et mémoire, au contraire d&amp;#8217;ESX de VMWare, qui prend en plus la gestion des pilotes.&lt;/p&gt;


&lt;p&gt;Cette ressemblance s&amp;#8217;explique par la collaboration de Microsoft avec XenSource, société dédiée au développement de l&amp;#8217;hyperviseur libre, récemment racheté par Citrix.
De cette coopération est née une interopérabilité avec les systèmes Linux équipés de Xen, grâce au format Virtual Hard Disk (VHD), qui définit un standard pour les disques durs des machines virtuelles.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Caractéristiques&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Hyper-V se présente sous la forme d&amp;#8217;un hyperviseur intégré dans les éditions Standard, Enterprise et Datacenter de Windows Serveur 2008.
Il nécessite un processeur 64bits avec prise en charge matérielle de la virtualisation (Intel VT ou AMD-V).
Chaque machine virtuelle peut supporter jusqu&amp;#8217;à 4 processeurs et 64 GO de mémoire.&lt;/p&gt;


&lt;p&gt;Les systèmes d&amp;#8217;exploitation actuellement testés et supportés par Microsoft sont les suivants:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows Serveur 2008&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Windows Serveur 2003 SP2&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Windows Vista SP1&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Windows XP SP3&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;SUSE Enterprise Linux Server 10 SP1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;D&amp;#8217;autres systèmes peuvent fonctionner, comme les versions de Linux intégrant Xen, mais ils ne disposent pas (pour l&amp;#8217;instant) du support de l&amp;#8217;éditeur.&lt;/p&gt;


&lt;p&gt;Les fonctionnalités clés du produit sont&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Quick migration&lt;/strong&gt;&lt;/em&gt; permet de migrer les machines virtuelles d&amp;#8217;une machine hôte vers une autre. C&amp;#8217;est la solution équivalente aux VMotion et XenMotion de ses concurrents, mais techniquement moins poussée, car elle ne permet pas de migration à chaud et nécessite donc l&amp;#8217;arrêt de la machine virtuelle.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;High Availability&lt;/strong&gt;&lt;/em&gt; (Haute disponibilité)&amp;nbsp;; cette fonctionnalité est en fait le Host Clustering de Windows Serveur 2008.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Live Backups&lt;/strong&gt;&lt;/em&gt; permet des sauvegardes des machines virtuelles sous forme de cliché (&lt;em&gt;snapshot&lt;/em&gt;) à travers le service &lt;em&gt;Volume Shadow Copy&lt;/em&gt; (VSS), présent depuis Windows serveur 2003.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion et perspectives&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Avec Hyper-V, Microsoft se pare d&amp;#8217;une réelle solution de virtualisation, dont l&amp;#8217;hyperviseur affiche une relative stabilité et de bonnes performances, en dépit de sa version non finalisée. Gageons que la jeunesse du produit, ainsi que ses fonctionnalités légèrement en retrait par rapport à ses concurrents, risquent d&amp;#8217;être un frein dans son déploiement, surtout au niveau de la production. Mais il reste une véritable alternative dans le domaine du développement et du test.&lt;/p&gt;


&lt;p&gt;Les outils de virtualisation ont aujourd&amp;#8217;hui tendance à se rapprocher, tant au niveau des performances, qu&amp;#8217;au niveau de l&amp;#8217;ensemble de l&amp;#8217;offre. La prochaine grande bataille se situe au niveau de l&amp;#8217;administration de l&amp;#8217;ensemble de ces environnements virtualisés, qui, à n&amp;#8217;en pas douter, vont devenir de plus en plus hétérogènes.
Le géant de Richmond l&amp;#8217;a bien compris et sa future version de System Center Virtual Machine Manager (nom de code «&amp;nbsp;Carmine&amp;nbsp;») gérera l&amp;#8217;administration, la configuration et l&amp;#8217;optimisation de système virtuels fonctionnant avec Hyper-V, bien sûr, mais également avec Xen ou encore ESX de VMware.&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>ADO.NET Data Services (Astoria)</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2008/04/25/24-adonet-data-services" />
  <issued>2008-04-25T15:06:02+02:00</issued>
  <modified>2008-04-25T15:06:02+02:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2008/04/25/24-adonet-data-services</id>
  <author><name>N. D.</name></author>
  <dc:subject>General</dc:subject>
  <summary>ADO.NET Data Services (nom de code Astoria) est un framework permettant l’exposition de services d’accès au données accessibles à distance.


Ce type de service permet notamment aux applications riches internet (Silverlight, ASP.NET AJAX Framework) et desktop (Windows Forms)...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;img src=&quot;/blog/images/donet.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;ADO.NET Data Services&lt;/strong&gt; (nom de code Astoria) est un &lt;em&gt;framework&lt;/em&gt; permettant l&amp;#8217;exposition de services d&amp;#8217;accès au données accessibles à distance.&lt;/p&gt;


&lt;p&gt;Ce type de service permet notamment aux applications riches internet (Silverlight, ASP.NET AJAX Framework) et &lt;em&gt;desktop&lt;/em&gt; (Windows Forms) d&amp;#8217;accéder à des données sans s&amp;#8217;adresser directement à la base de données, ce qui est souvent impossible dans de tels scénarios.&lt;/p&gt;


&lt;p&gt;La sortie d&amp;#8217;ADO.NET Data Services est prévue pour juin ou juillet 2008.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Principes généraux&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;ADO.NET Data Services fournit un service générique permettant d&amp;#8217;exposer des données issues d&amp;#8217;ADO.NET Entity Framework, et éventuellement d&amp;#8217;autres sources de données.
La description des données exposées sont également décrites par des métadonnées publiées par le service.
Le service générique est implémenté en s&amp;#8217;appuyant sur WCF (Windows Communication Fondation) qui permet le support de &lt;strong&gt;JSON&lt;/strong&gt; et d&amp;#8217;&lt;strong&gt;Atom&lt;/strong&gt; dans .NET 3.5.&lt;/p&gt;


&lt;p&gt;On communique avec ce service générique en adressant des requêtes qui permettent de&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consulter les entités (filtres, tris &amp;#8230;)&lt;/li&gt;
&lt;li&gt;Créer des entités&lt;/li&gt;
&lt;li&gt;Mettre à jour des entités&lt;/li&gt;
&lt;li&gt;Supprimer des entités&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce service générique est fondé sur une &lt;strong&gt;architecture REST&lt;/strong&gt;&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilisation de HTTP et des verbes standards (POST, GET, PUT, DELETE)&lt;/li&gt;
&lt;li&gt;Utilisation de l&amp;#8217;URL et de divers paramètres pour exprimer les requêtes de consultation des entités&lt;/li&gt;
&lt;li&gt;Utilisation des attributs du POST pour les requêtes de création, mise à jour, et suppression d&amp;#8217;entités&lt;/li&gt;
&lt;li&gt;Utilisation de JSON (JavaScript  Object Notation) ou d&amp;#8217;Atom pour la réponse.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le client du service utilise une API différente selon sa nature&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pour les clients Windows Forms et Silverlight 2.0, on peut accéder aux données en utilisant LINQ avec le provider &lt;strong&gt;LINQ for HTTP&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pour les clients Web ou Silverlight 1.0, il existe également un API client JavaScript qui permet d&amp;#8217;accéder aux services ADO.NET Data Services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sécurité des données&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Il est possible de restreindre l&amp;#8217;accès aux entités, selon l&amp;#8217;utilisateur, et de gérer les droits en consultation, modification, création et suppression.
Il est également possible de filtrer les données, selon l&amp;#8217;utilisateur, via un système à base d&amp;#8217;intercepteur, très similaire à ce celui de Spring Security (ex Spring Acegi) dans le monde Java.&lt;/p&gt;


&lt;p&gt;Le filtrage des données est formulé grâce à LINQ avec une rare élégance. C&amp;#8217;est bluffant&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;En guise de conclusion&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;ADO.NET Data Services est une technologie très prometteuse, à surveiller de prêt&amp;nbsp;!
Rendez-vous en juin ou juillet, si tout va bien.&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>ADO.NET Entity Framework</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2008/04/24/25-adonet-entity-framework" />
  <issued>2008-04-24T17:29:55+02:00</issued>
  <modified>2008-04-24T17:29:55+02:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2008/04/24/25-adonet-entity-framework</id>
  <author><name>N. D.</name></author>
  <dc:subject>General</dc:subject>
  <summary>ADO.NET est un framework de mapping objet / relationnel similaire à Hibernate ou TopLink, même si Microsoft s’en défend quelque peu.
Sa sortie est prévue pour juin ou juillet 2008.


Modélisation


Dans ADO.NET Entity Framework, l’objectif est de modéliser et manipuler les données non...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;img src=&quot;/blog/images/donet.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;ADO.NET est un &lt;em&gt;framework&lt;/em&gt; de mapping objet / relationnel similaire à Hibernate ou TopLink, même si Microsoft s&amp;#8217;en défend quelque peu.
Sa sortie est prévue pour juin ou juillet 2008.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Modélisation&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Dans ADO.NET Entity Framework, l&amp;#8217;objectif est de modéliser et manipuler les données non plus sous forme de tables, mais sous forme d&amp;#8217;entités.&lt;/p&gt;


&lt;p&gt;La modélisation est effectuée selon 3 points de vue distincts&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;le &lt;em&gt;&lt;strong&gt;Conceptual model&lt;/strong&gt;&lt;/em&gt; (modèle conceptuel), appelé aussi EDM (&lt;em&gt;Entity Data Model&lt;/em&gt;), qui décrit les entités (attributs, et opérations) et les associations,&lt;/li&gt;
&lt;li&gt;le &lt;em&gt;&lt;strong&gt;Storage model&lt;/strong&gt;&lt;/em&gt; (modèle physique), qui décrit les tables (colonnes, références) et les procédures stockées,&lt;/li&gt;
&lt;li&gt;le &lt;em&gt;&lt;strong&gt;Mapping&lt;/strong&gt;&lt;/em&gt; entre &lt;em&gt;conceptual model&lt;/em&gt; et le &lt;em&gt;storage model&lt;/em&gt;, qui décrit la correspondance (&lt;em&gt;mapping&lt;/em&gt;) entre les tables et les entités.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chacun de ces 3 points de vue est décrit sous forme d&amp;#8217;un document XML (ou d&amp;#8217;un fragment XML).&lt;/p&gt;


&lt;p&gt;À mon sens, l&amp;#8217;existence d&amp;#8217;un EDM indépendant du code est un atout du &lt;em&gt;framework&lt;/em&gt;.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Génération de code&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;À partir de l&amp;#8217;EDM, il est possible de générer des classes représentant les entités sous forme d&amp;#8217;objets.
Cette génération produit également une classe qui représente le modèle dans son ensemble, et fournit des ensembles permettant d&amp;#8217;interroger les différents types d&amp;#8217;entité (&lt;em&gt;entity set&lt;/em&gt;).
Ces classes sont des classes partielles.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Langages de requêtes&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;L&amp;#8217;EDM peut être interrogé en formulant des requêtes&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;en &lt;strong&gt;Entity SQL (eSQL)&lt;/strong&gt;, langage de requête textuel de type SQL&lt;/li&gt;
&lt;li&gt;en &lt;strong&gt;LINQ&lt;/strong&gt;, langage de requête fortement typé (donc vérifié à la compilation) et intégré directement au langage de programmation (C#, VB.NET &amp;#8230;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fonctionnalités de &lt;em&gt;mapping&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Les fonctionnalités de &lt;em&gt;mapping&lt;/em&gt; sont riches et assez classiques&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mapping des champs ,&lt;/li&gt;
&lt;li&gt;mapping des associations,&lt;/li&gt;
&lt;li&gt;mapping de l&amp;#8217;héritage,&lt;/li&gt;
&lt;li&gt;mapping des types complexes,&lt;/li&gt;
&lt;li&gt;mapping des opérations sur des procédures stockées.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Suivi des modifications&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Les changements effectués sur le modèle doivent être déclarés auprès du cache de &lt;em&gt;tracking&lt;/em&gt; associé au modèle.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les entités nouvellement créé doivent être déclarées auprès du cache.&lt;/li&gt;
&lt;li&gt;Les entités modifiées doivent, semble-t-il, être déclarées auprès du cache, également.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Une méthode du modèle permet de jouer sur la base de données tous les changements déclarés auprès du cache de &lt;em&gt;tracking&lt;/em&gt;.&lt;/p&gt;


&lt;p&gt;À mon sens, cette séparation claire du suivi des changements semble être un atout de &lt;em&gt;framework&lt;/em&gt;.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Optimisation du chargement des données&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Dans une requête, il est possible de déclarer les données à charger en même temps que les entités requêtées.
Il s&amp;#8217;agit en fait d&amp;#8217;entités connectées aux entités requêtées via des associations.
Par exemple, si l&amp;#8217;on requête des clients, il est possible de dire, par la même occasion, que l'on souhaite ramener les commandes de ces clients.&lt;/p&gt;


&lt;p&gt;Pour les connaisseurs, à ce jour, il n&amp;#8217;y a pas de 'lazy loading''.
À la traversée d&amp;#8217;une association, les entités ne sont pas chargées automatiquement à la demande.
Lorsqu&amp;#8217;on accède à la propriété correspondant à un sens de circulation de l&amp;#8217;association, tout se passe comme s&amp;#8217;il n&amp;#8217;y avait pas d&amp;#8217;entités associées. Il n&amp;#8217;y a aucune erreur.
Pour charger les entités associées, il faut le faire explicitement en appelant une méthode sur la propriété.
Il y a également une propriété permettant de savoir si l&amp;#8217;association a déjà été chargée.&lt;/p&gt;


&lt;p&gt;À surveiller de prêt&amp;nbsp;!&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Les nouveautés de C# 3.0</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2008/04/22/23-les-nouveautes-de-c-30" />
  <issued>2008-04-22T17:26:03+02:00</issued>
  <modified>2008-04-22T17:26:03+02:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2008/04/22/23-les-nouveautes-de-c-30</id>
  <author><name>J. A.</name></author>
  <dc:subject>.NET</dc:subject>
  <summary>Avec l’arrivée de C# 3.0, les équipes de développement Microsoft nous propose un panel généreux de nouveautés. Toutes ces nouveautés sont dans la lignée de celles proposées dans la version 2.0 (types génériques, itérateurs, méthodes anonymes ou encore Nullable), qui, soyons en certains,...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;img src=&quot;/blog/images/donet.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Avec l&amp;#8217;arrivée de &lt;strong&gt;C# 3.0&lt;/strong&gt;, les équipes de développement Microsoft nous propose un panel généreux de nouveautés. Toutes ces nouveautés sont dans la lignée de celles proposées dans la version 2.0 (types génériques, itérateurs, méthodes anonymes ou encore &lt;code&gt;Nullable&lt;/code&gt;), qui, soyons en certains, n&amp;#8217;était qu&amp;#8217;une étape. Cette version dévoile enfin les intentions de Microsoft, et tous ces nouveaux concepts ont bien une finalité. Mais ne soyons pas trop empressés, et ne dévoilons pas d&amp;#8217;ores et déjà la fin.&lt;/p&gt;


&lt;p&gt;Pour mémoire, rappelons que C# a été conçu pour révéler au maximum les problèmes à la compilation, ce qui en fait un langage strict mais sûr.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Propriétés simplifiées&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Une première nouveauté permet de déclarer une propriété plus simplement. Ainsi, il n&amp;#8217;est plus nécessaire de créer le champ privé, puisqu&amp;#8217;il est automatiquement généré par le compilateur. Le fait de définir l&amp;#8217;une des méthodes get ou set en privée rend respectivement la propriété writeonly ou readonly.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Initialiseurs d&amp;#8217;objets&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;L&amp;#8217;initialiseur d&amp;#8217;objets est une forme syntaxique permettant de d&amp;#8217;initialiser les propriétés d&amp;#8217;un objet en passant par le constructeur par défaut. Elle remplace l&amp;#8217;appel à un constructeur surchargé que l&amp;#8217;on aurait créé. Ainsi, le compilateur va créer de manière sûre l&amp;#8217;objet instancié&amp;nbsp;: la référence vers l&amp;#8217;objet ne sera attribuée qu&amp;#8217;une fois toutes les propriétés initialisées. Pour cela, le compilateur va créer une variable temporaire, dont le développeur ne connait pas l&amp;#8217;existence, et va ensuite assigner la référence vers l&amp;#8217;objet créé à la variable définitive, déclarée par le développeur. Cette nouveauté permet notamment de simplifier la construction de collections, dont les éléments sont connus.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Inférence de type&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Il est très commun d&amp;#8217;associer la déclaration d&amp;#8217;une variable à son initialisation. Cette dernière étape permet à elle seule et sans ambigüité de déterminer le type de l&amp;#8217;instance ainsi créée. Dans C# 3.0, il n&amp;#8217;est donc plus nécessaire de préciser le type d&amp;#8217;une variable lors de son initialisation. On emploiera alors le mot clé var, lors de la déclaration, indiquant ainsi au compilateur de déterminer lui-même le type. L&amp;#8217;IntelliSense est également capable de faire ce travail, et de proposer naturellement toutes les propriétés et méthodes de l&amp;#8217;objet créé. Attention, l&amp;#8217;inférence de type ne fonctionne que pour les variables locales, puisqu&amp;#8217;il est nécessaire de les instancier à la déclaration.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Types anonymes&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Il est courant de devoir consolider des données provenant de plusieurs objets pour permettre un traitement. Au-delà de 4 ou 5 paramètres, les normes imposent de passer par une structure (classe ou struct). Cela oblige donc le développeur à créer des structures complémentaires, sans réel intérêt dans le modèle objet. Pour palier à ce problème, il est désormais possible de créer dynamiquement un type anonyme. Par définition, il ne possède pas de nom et n&amp;#8217;a donc pas vocation à être réutilisé. L&amp;#8217;inférence de type permet de récupérer une instance de ce type anonyme et le manipuler comme n&amp;#8217;importe quelle autre instance de classe. Le compilateur crée  automatiquement la classe manquante, simplifiant ainsi le travail du développeur, tandis que l&amp;#8217;IntelliSense permet sans difficulté d&amp;#8217;accéder aux propriétés de l&amp;#8217;objet. En effet, il n&amp;#8217;est pas prévu d&amp;#8217;associer des méthodes à ce nouveau type.  Associé à l&amp;#8217;inférence de types et à l&amp;#8217;initialiseur d&amp;#8217;objet, l&amp;#8217;utilisation d&amp;#8217;un type anonyme permet d&amp;#8217;écrire&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;code&gt;var employee = new {Nom=&quot;Guacamole&quot;, Prenom=&quot;Mathilde&quot;};&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Méthodes d&amp;#8217;extensions&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Comme leur nom l&amp;#8217;indique, les méthodes d&amp;#8217;extensions permettent d&amp;#8217;étendre les fonctionnalités d&amp;#8217;une classe. L&amp;#8217;héritage n&amp;#8217;est, en effet, pas toujours très adapté pour une telle utilisation et est d&amp;#8217;avantage conçu pour la spécialisation. Étendre une classe est donc désormais possible en passant par une classe statique, dans laquelle on déclare comme statiques un certain nombre de méthodes d&amp;#8217;extensions. Le rapport entre une méthode d&amp;#8217;extension et la classe qu&amp;#8217;elle étend se situe au niveau du premier paramètre de la méthode. Le paramètre est ainsi précédé du mot clé this et son type correspond à la classe étendue. Il est alors possible d&amp;#8217;appeler la méthode d&amp;#8217;extension directement sur une instance de la classe étendue, en utilisant le point. L&amp;#8217;IntelliSense est également capable de proposer les méthodes d&amp;#8217;extension. Notons que les méthodes d&amp;#8217;extension peuvent également s&amp;#8217;appliquer aux interfaces, et pas seulement aux classes.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Lambdas expressions&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;En C# 2.0, on connaissait les méthodes anonymes. À peine le temps de les apprivoiser, et voici les lambdas expressions&amp;nbsp;: une simplification syntaxique des méthodes anonymes. Les lambdas expressions vont cependant bien au-delà, puisqu&amp;#8217;elles permettent de définir de véritables expressions, comportant des paramètres, et évaluables de manière différée. Les lambda expressions peuvent être compilées directement en IL, ou bien encore faire l&amp;#8217;objet d&amp;#8217;une transformation, par exemple en SQL.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Plus loin ...&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;En introduction, nous soulignions à la fois la complémentarité entre les nouveautés du langage de C# 2.0 et de C# 3.0, et le fait qu&amp;#8217;elles aient toutes une même finalité cachée. Et après toutes les avoir parcourues, nous pouvons enfin révéler ce secret de polichinelle&amp;nbsp;: il ne s&amp;#8217;agit ni plus ni moins que de LINQ&amp;nbsp;! Ce qu&amp;#8217;il faut réellement comprendre, donc, c&amp;#8217;est que LINQ est l&amp;#8217;aboutissement de toutes ces nouveautés. Sans elles, &lt;strong&gt;LINQ&lt;/strong&gt; n&amp;#8217;aurait pas été possible. Au risque de perturber, voire de larguer, une majorité des développeurs, Microsoft et ses équipes de développement ont donc investi énormément sur cette nouvelle fonctionnalité du &lt;em&gt;framework&lt;/em&gt;. Voici donc la réponse à ceux qui accusaient Microsoft de tout recopier sur Java&amp;nbsp;! Microsoft a compris qu&amp;#8217;il fallait s&amp;#8217;inspirer de ce qui se fait de mieux dans les différents langages pour construire sa plateforme. Enfin, gageons que cet investissement important porte ses fruits, en facilitant l&amp;#8217;adoption de la plateforme .NET, et en permettant à cette technologie de séduire de nouveaux clients.&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Drools : vers une démocratisation des moteurs de règles ?</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2007/09/12/19-drools-introduction" />
  <issued>2007-09-12T20:28:11+02:00</issued>
  <modified>2007-09-12T20:28:11+02:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2007/09/12/19-drools-introduction</id>
  <author><name>N. D.</name></author>
  <dc:subject>Architecture</dc:subject>
  <summary>Les moteurs de règles ont traditionnellement un positionnement haut de gamme. De fait, ils sont doublement intimidants : d’abord ils sont plutôt chers, ensuite, pour justifier leur prix, ils sont présentés comme une solution à des besoins complexes, finalement pas si répandus que cela....</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;img src=&quot;/blog/images/drools-webdesign.PNG&quot; alt=&quot;test&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Les &lt;strong&gt;moteurs de règles&lt;/strong&gt; ont traditionnellement un positionnement haut de gamme. De fait, ils sont doublement intimidants&amp;nbsp;: d&amp;#8217;abord ils sont plutôt chers, ensuite, pour justifier leur prix, ils sont présentés comme une solution à des besoins complexes, finalement pas si répandus que cela.&lt;/p&gt;


&lt;p&gt;D&amp;#8217;un point de vue académique, celui de l&amp;#8217;intelligence artificielle, le principe des moteurs de règles est simple. On décrit d&amp;#8217;une part un ensemble de &lt;strong&gt;règles&lt;/strong&gt;, et d&amp;#8217;autre part, un ensemble de &lt;strong&gt;faits&lt;/strong&gt;. En appliquant ces règles sur ces faits, on déduit (&amp;#8216;on infère&amp;#8217; dans le jargon de l&amp;#8217;IA) de nouveau faits, et ainsi de suite. L&amp;#8217;inférence des faits est assurée par un algorithme classique baptisé &lt;strong&gt;Rete&lt;/strong&gt; ou par l&amp;#8217;une de ses nombreuses variantes, plus ou moins brevetées.&lt;/p&gt;


&lt;p&gt;Bon, tout cela ne nous dit pas trop ce que nous pouvons en faire pour les applications d&amp;#8217;entreprise et le système d&amp;#8217;informations. Pour cela, essayons de ne pas mettre la charrue avant les b&amp;#339;ufs et revenons aux &amp;#8230; besoins.&lt;/p&gt;


&lt;p&gt;Classiquement, dans une architecture fonctionnelle, on identifie un certains nombres de règles fonctionnelles durables et relativement faciles à formaliser. Il existe aussi souvent un certains nombre de micro règles, que l&amp;#8217;on peine à décrire exhaustivement, et qui ne cessent de changer dans le temps. Ces micro règles correspondent en fait fréquemment à des besoins en flexibilité qui découle de la nature même du métier&amp;nbsp;: adaptation fine des politiques tarifaires, traitement particuliers de certaines catégories de clients, individualisation du service à la clientèle &amp;#8230;&lt;/p&gt;


&lt;p&gt;Deux dangers nous guettent alors. Le premier danger consiste à exclure les cas particuliers et donc à refuser la flexibilité au métier. Le second consiste à construire une architecture fonctionnelle centrée sur les cas particuliers, rapidement minée par la complexité, et finalement peu flexible.&lt;/p&gt;


&lt;p&gt;Il existe diverses approches pour maîtriser le foisonnement des variantes de comportement, dont les moteurs de règles. Malheureusement, leur coût les confine aux cas complexes, alors qu&amp;#8217;ils sont déjà intéressant pour les cas plus simples.&lt;/p&gt;


&lt;p&gt;Le moteur de règles open source &lt;strong&gt;Drools&lt;/strong&gt; (ou &lt;strong&gt;JBoss Rules&lt;/strong&gt;) se présente dans ces conditions comme une possibilité intéressante. Tout d&amp;#8217;abord, il a tous les atours des moteurs de règles établis. Ensuite, il offre deux possibilités dignes d&amp;#8217;intérêt. Drools propose ainsi une &lt;strong&gt;interface web&lt;/strong&gt; relativement simple pour décrire des règles. D&amp;#8217;autre part, il est possible de définir des règles sous une forme beaucoup plus proche du &lt;strong&gt;langage naturel&lt;/strong&gt;. Dans les deux cas, bien sûr, les règles finissent exprimées dans le langage de définition de règle de Drools. En évitant les discours lénifiants, on peut dire que Drools rapproche ainsi le technique du fonctionnel.&lt;/p&gt;


&lt;p&gt;Les moteurs de règles offrent un choix supplémentaire dans la palette de l&amp;#8217;architecte. Alors, pourquoi ne pas en profiter&amp;nbsp;?&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Seam : un framework nouvelle génération</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2007/09/10/18-seam-introduction" />
  <issued>2007-09-10T17:49:12+02:00</issued>
  <modified>2007-09-10T17:49:12+02:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2007/09/10/18-seam-introduction</id>
  <author><name>N. D.</name></author>
  <dc:subject>Architecture</dc:subject>
  <summary>Il existe une pléthore de framework web, c'est un fait.


Mais, il faut bien avouer que, pour la plupart, ces frameworks sont finalement très proches, et se contentent de "refaire en mieux", sans véritablement innover, ni offrir d'avancées décisives pour les applications d'entreprise.


JBoss Seam...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;Il existe une pléthore de &lt;em&gt;framework&lt;/em&gt; web, c'est un fait.&lt;/p&gt;


&lt;p&gt;Mais, il faut bien avouer que, pour la plupart, ces &lt;em&gt;frameworks&lt;/em&gt; sont finalement très proches, et se contentent de &quot;refaire en mieux&quot;, sans véritablement innover, ni offrir d'avancées décisives pour les applications d'entreprise.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;JBoss Seam&lt;/strong&gt; choisit lui une approche innovante avec une forte valeur ajoutée pour les applications d'entreprise&amp;nbsp;; le tout &lt;strong&gt;entièrement en &lt;em&gt;open source&lt;/em&gt;&lt;/strong&gt;. D&amp;#8217;un point de vue conceptuel, Seam est l&amp;#8217;un des premiers framework à supporter non seulement les &lt;strong&gt;architectures sans état&lt;/strong&gt;, mais aussi les &lt;strong&gt;architectures avec état&lt;/strong&gt;, grâce à la notion de conversation. Cette approche permet la mise en &amp;#339;uvre d&amp;#8217;applications web présentant des navigations complexes, et assure une forte séparation des couches quelque soit le niveau de complexité de cette navigation.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Seam intègre de multiples technologies&lt;/strong&gt;, mais contrairement à d&amp;#8217;autre frameworks, il ne cherche pas à encapsuler (donc à brider) ces technologies. Au contraire, il se concentre sur une intégration cohérente et unifiée entre les technologies, ainsi que sur les fonctionnalités supplémentaires à valeur ajoutée. En cela, Seam partage philosophiquement certains points communs avec Spring.&lt;/p&gt;


&lt;p&gt;Les technologies intégrées par Seam sont principalement les suivantes&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;le standard &lt;strong&gt;JavaServer Faces&lt;/strong&gt; pour la présentation, et son approche composant,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JBoss RichFaces&lt;/strong&gt; avec un ensemble de composants graphiques JSF (supportant AJAX),&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JBoss Ajax4JSF&lt;/strong&gt; avec un ensemble de composants JSF facilitant le support d&amp;#8217;AJAX,&lt;/li&gt;
&lt;li&gt;une extension de JSF pour la description de navigation avec état,&lt;/li&gt;
&lt;li&gt;le standard &lt;strong&gt;EJB session stateless&lt;/strong&gt; d&amp;#8217;EJB 3 pour les composants non conversationnels (sans état),&lt;/li&gt;
&lt;li&gt;le standard &lt;strong&gt;EJB session stateful&lt;/strong&gt; d&amp;#8217;EJB 3 pour les composants conversationnels (avec état),&lt;/li&gt;
&lt;li&gt;le standard &lt;strong&gt;Java Persistence API&lt;/strong&gt; et les &lt;strong&gt;entités&lt;/strong&gt; d'EJB 3 pour la persistance,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JBoss Drools&lt;/strong&gt; pour la sécurité déclarative par règles, et plus généralement les règles fonctionnelles,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JBoss jBPM&lt;/strong&gt; pour les processus fonctionnels (&lt;em&gt;business process&lt;/em&gt;) et les &lt;em&gt;workflows&lt;/em&gt;, mais également pour les navigations complexes dans le site web.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Seam s'appuie majoritairement sur des standards&lt;/strong&gt;, avec notablement &lt;strong&gt;Java EE 5&lt;/strong&gt; ou bien encore l&amp;#8217;approche &lt;strong&gt;POJO&lt;/strong&gt; (Plain Old Java Objects). Il utilise notamment les mécanismes standard d&amp;#8217;extensibilité de Java EE 5 pour intégrer diverses extensions d&amp;#8217;origine JBoss. En pratique, cela signifie que Seam n&amp;#8217;est pas particulièrement lié à JBoss Application Server et peut fonctionner dans la plupart des serveurs d&amp;#8217;application.&lt;/p&gt;


&lt;p&gt;En guise de conclusion, remarquons que Seam intègre des technologies JBoss, tels que JBoss Drools et JBoss jBPM, particulièrement bien placées sur leur marché respectif.&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>log4J, un extrait de support de TechCoaching™</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2007/03/26/16-log4j-techcoaching" />
  <issued>2007-03-26T14:16:22+02:00</issued>
  <modified>2007-03-26T14:16:22+02:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2007/03/26/16-log4j-techcoaching</id>
  <author><name>N. D.</name></author>
  <dc:subject>Java/J2EE</dc:subject>
  <summary>log4J est une API de log open source bien connue, d'origine Apache. Son usage est quasi systématique dans les projets : le log est une bonne pratique. Puissante et efficace, cette API n'est pas toujours très facile d'abord. Cet extrait d'un support de TechCoaching™ fait le point sur...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;img src=&quot;/blog/images/log4j.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://logging.apache.org/log4j/docs/&quot; hreflang=&quot;eng&quot;&gt;log4J&lt;/a&gt;&lt;/strong&gt; est une &lt;strong&gt;API de &lt;em&gt;log&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;open source&lt;/em&gt; bien connue, d'origine Apache. Son usage est quasi systématique dans les projets&amp;nbsp;: le &lt;em&gt;log&lt;/em&gt; est une bonne pratique. Puissante et efficace, cette API n'est pas toujours très facile d'abord. Cet &lt;a href=&quot;http://www.neoxia.com/viewid.php?id=60&quot; hreflang=&quot;fr&quot;&gt;extrait d'un support de TechCoaching&amp;#8482;&lt;/a&gt; fait le point sur les concepts de base de log4J.&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Google Guice, un nouveau framework d'injection de dépendance</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2007/03/21/15-google-guice" />
  <issued>2007-03-21T15:58:02+01:00</issued>
  <modified>2007-03-21T15:58:02+01:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2007/03/21/15-google-guice</id>
  <author><name>N. D.</name></author>
  <dc:subject>General</dc:subject>
  <summary>Google propose un nouveau framework d'injection, baptisé Guice (à prononcer juice), et fondé sur des annotations.
Un débat très intéressant, initié suite à un blog de Craig Walls, a lieu entre la communauté Spring (le framework d'injection standard de fait) et les créateurs de Guice....</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;img src=&quot;/blog/images/guice.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Google propose un nouveau &lt;em&gt;framework&lt;/em&gt; d'injection, baptisé &lt;strong&gt;&lt;a href=&quot;http://code.google.com/p/google-guice/&quot; hreflang=&quot;eng&quot;&gt;Guice&lt;/a&gt;&lt;/strong&gt; (à prononcer &lt;em&gt;juice&lt;/em&gt;), et fondé sur des annotations.
Un &lt;a href=&quot;http://www.jroller.com/page/habuma?entry=guice_vs_spring_javaconfig_a&quot; hreflang=&quot;eng&quot;&gt;débat très intéressant&lt;/a&gt;, initié suite à un &lt;em&gt;blog&lt;/em&gt; de Craig Walls, a lieu entre la communauté &lt;strong&gt;&lt;a href=&quot;http://www.springframework.org/&quot; hreflang=&quot;fr&quot;&gt;Spring&lt;/a&gt;&lt;/strong&gt; (le &lt;em&gt;framework&lt;/em&gt; d'injection standard de fait) et les créateurs de Guice.&lt;/p&gt;


&lt;p&gt;L'argumentaire de Craig Walls en faveur de Spring est, à mon avis, particulièrement convaincant, et l'essentiel des remarques est tout à fait justifié&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring est bien moins intrusif. Guice oblige a annoter les classes, Spring non.&lt;/li&gt;
&lt;li&gt;L&amp;#8217;injection de valeurs simples en Spring est beaucoup plus simple qu&amp;#8217;avec Guice.&lt;/li&gt;
&lt;li&gt;Spring peut injecter dans des classes quelconques, pas seulement dans des classes annotées comme Guice. Il est vrai que Guice offre la notion d&amp;#8217;adaptateur, mais cela nécessite d&amp;#8217;écrire du code.&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>JSR308, les annotations vont encore plus loin</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2007/03/20/14-jsr308-annotations-on-java-types" />
  <issued>2007-03-20T14:48:16+01:00</issued>
  <modified>2007-03-20T14:48:16+01:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2007/03/20/14-jsr308-annotations-on-java-types</id>
  <author><name>N. D.</name></author>
  <dc:subject>Java/J2EE</dc:subject>
  <summary>La JSR 308 : Annotations on Java Types a pour objectif d'étendre le système d'annotation de Java SE 6 pour permettre l'annotation des types en général, et plus seulement des méthodes, champs, et des classes. La spécification en version de travail est déjà dans un état relativement avancé....</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;img src=&quot;/blog/images/jsr.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;La &lt;a href=&quot;http://pag.csail.mit.edu/jsr308/&quot; hreflang=&quot;eng&quot;&gt;JSR 308&amp;nbsp;: Annotations on Java Types&lt;/a&gt; a pour objectif d'étendre le système d'annotation de Java SE 6 pour permettre l'annotation des types en général, et plus seulement des méthodes, champs, et des classes. La &lt;a href=&quot;http://pag.csail.mit.edu/jsr308/java-annotation-design.pdf&quot; hreflang=&quot;eng&quot;&gt;spécification en version de travail&lt;/a&gt; est déjà dans un état relativement avancé. L'ensemble est cohérent et bien construit. Cependant, on est en droit de se demander si la concurrence accrue entre Java et le futur C# 3.0 n'est pas en train d'engendrer des langages chimériques. C++ ne serait-il pas en train de repasser par la porte de derrière.&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>iBATIS, au delà de JDBC</title>
  <link rel="alternate" type="text/html" href="http://www.neoxia.com/blog/index.php/2007/03/20/13-ibatis" />
  <issued>2007-03-20T12:34:57+01:00</issued>
  <modified>2007-03-20T12:34:57+01:00</modified>
  <id>http://www.neoxia.com/blog/index.php/2007/03/20/13-ibatis</id>
  <author><name>N. D.</name></author>
  <dc:subject>Java/J2EE</dc:subject>
  <summary>JDBC est une API pour le moins rudimentaire. À tel point, qu'il ne serait pas très sage de s'aventurer à développer une application sans avoir quelque peu encapsulé les fonctionnalités de JDBC. Il ne faudrait pas cependant oublier le premier commandement des frameworks : "De framework, tu...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;img src=&quot;/blog/images/ibatis1.jpg&quot; alt=&quot;&quot; /&gt; &lt;img src=&quot;/blog/images/ibatis2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;JDBC&lt;/strong&gt; est une API pour le moins &lt;strong&gt;rudimentaire&lt;/strong&gt;. À tel point, qu'il ne serait pas très sage de s'aventurer à développer une application sans avoir quelque peu encapsulé les fonctionnalités de JDBC. Il ne faudrait pas cependant oublier le premier commandement des &lt;em&gt;frameworks&lt;/em&gt;&amp;nbsp;: &quot;De framework, tu n'écriras point. Les dieux de l&lt;em&gt;'open source&lt;/em&gt; pourvoiront à tes besoins&quot;.&lt;/p&gt;


&lt;p&gt;Plus sérieusement, &lt;strong&gt;&lt;a href=&quot;http://ibatis.apache.org/&quot; hreflang=&quot;eng&quot;&gt;iBATIS&lt;/a&gt;&lt;/strong&gt; est un &lt;strong&gt;&lt;em&gt;framework&lt;/em&gt; JDBC&lt;/strong&gt; &lt;em&gt;open source&lt;/em&gt; d'origine &lt;strong&gt;Apache&lt;/strong&gt;, et qui précisément encapsule JDBC. Alors, sachons profiter de la manne divine, et aussi de cet extrait d'un support de &lt;strong&gt;TechCoaching&amp;#8482; Neoxia&lt;/strong&gt; portant sur le dit iBATIS.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Références&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.neoxia.com/viewid.php?id=60&quot; hreflang=&quot;fr&quot;&gt;iBATIS (extrait de support de TechCoaching&amp;#8482;)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
</entry>
</feed>