Couv 102 22/10/2007 15:40 Page 1

www.programmez.com

ProMensuel - Novembre 2007 - N°102 grammez! Programmez!LE MAGAZINE DU DÉVELOPPEMENT Rich Internet Application La révolution de l'interface web ! Les nouvelles plates-formes RIA / RDA Comprendre Silverlight, JavaFX et Flex. La sécurité est-elle assurée ? L’offensive Adobe Comment choisir ? Développer sur MacOS X ! Découvrir la programmation Mac À quoi sert Le code du JBoss Seam framework .Net dans l'univers ouvert aux développeurs Java EE ?

PHP Java E

Créer des applications Swing et graphiques dans les documents PDF 5,95 - SUISSE 12 FS - Canada 8,95 $ CAN € € avec Zend Framework Mettre en oeuvre Groovy • Développer avec 3.3 F: - TOM 940 XPF - MAROC 50 DH - € - 102

Services Web BELGIQUE 6,45 Printed in France - Imprimé en France - - Imprimé en France Printed in France

Utiliser les annuaires UDDI Développer avec Scriptaculous LUXEMBOURG 6,45 M 04319 DOM Surf 6,90 3:HIKONB=^UZ^Z]:?a@l@a@m@a; Couv 102 22/10/2007 15:56 Page 2 03_05 102 22/10/2007 17:18 Page 3

Programmez! LE MAGAZINE DU DÉVELOPPEMENT Supplément éditorial n°102 RIA Web

Adobe AIR bêta 2 Microsoft Créez des logiciels riches, connectés à Internet. Expression Web Runtime d’exécution complet. Outil professionnel de création de site web dynamiques. O SweetDev RIA 1.0.2 Allez au-delà d’Ajax sans vous soucier de Créez plus rapidement vos applications PHP grâce N 102 Javascript ! Créez rapidement vos applications à la simplicité du framework Zend, à l’intégration SOMMAIRE ou faites évoluer vos sites JSP / Struts. d’Ajax, au support de PHP 5. .Net MacOS X itées, selon les éditeurs et présentées en anglais ou en français. itées, selon les éditeurs et présentées en anglais ILOG m Diagrammer for .Net release 4 Concevoir et publier des Environnement complet de développement diagrammes et graphiques Générer un code .Net en langage basic. Multi plate forme sur son site web. de qualité. MacOS X, Windows et . ent • Les versions peuvent être li ent • Les versions peuvent être

>Actus Plongez au coeur de 4D v11 SQL m Un environnement ouvert et évolutif ...... grâce à l’adoption de nombreux standards L’actualité en bref 6 comme l’intégration native du SQL, le support de l’Unicode, la prise en charge du SVG, ainsi que le support étendu de ODBC, XML et des Web Agenda ...... 8 Services SOAP. 4D met ainsi à la disposition des développeurs tous les outils www.4d.fr nécessaires à la création de puissantes applications professionnelles. Echantillon gratuit • Ne peut être vendu séparé Echantillon gratuit • Ne peut être > Evénements CD-Rom 102 PROGRAMMEZ ! Adobe MAX 2007 : collaboratif, communication et développeurs ! ...... 10

PC Soft dévoile WinDev 12 ! ...... 14 RIA Sweetdev RIA Allez au-delà d’Ajax sans vous soucier de > SGBD Javascript ! La bibliothèque de tags Ajax permet 4D v11 SQL : utiliser le moteur SQL ...... 16 de créer rapidement vos applications ou de faire évoluer vos sites JSP / Struts. >GrosPlanMac Adobe AIR bêta 2 Découvrez la plate-forme Rich Desktop MacOS X et le développeur ...... 20 Application d’Adobe pour créer des logiciels Le développement Web sous Mac ...... 21 riches, connectés à Internet. Runtime d’exécu- MacOS X : l’OS des développeurs ? ...... 22 tion complet. Quartz : l’alternative ? ...... 24 Web Microsoft Expression Web Outil professionnel de création de sites web > Dossier Google : RIA dynamiques, basé sur les standards du web et La révolution de l’interface web ? ...... 28 les technologies Microsoft. Version complète, 60 jours Choisir une solution RIA...... 30 Les 7 technologies en présence ...... 34 IDE 1.0 Flash, Flex, AIR, dans l’univers des RIA ...... 40 Environnement de développement intégré (IDE), pour créer des sites web dynamiques. Java FX : une nouvelle manière de construire des applications Swing ...... 42

La RIA selon Microsoft : WPF – Silverlight – AJAX ...... 46 Zend Framework 1.0.2 Créez plus rapidement vos applications PHP Quelle sécurité pour les applications RIA ?...... 53 grâce à la simplicité du framework Zend, à l’inté- gration d’Ajax, au support de PHP 5. > Technique .Net Accéder au code du framework .Net avec Visual Studio 2008 ...... 55 ILOG diagrammer for .Net JBoss Seam… le fil à coudre extensible pour les architectures JEE ...... 57 Boîte à outils pour concevoir et publier des dia- grammes et graphiques de qualité sur son site web. Compatible avec ASP.Net Ajax. > Développement Web Version complète 15 jours Exploiter un site web 2.0 ...... 60 Codefluent Construire des applications MVC avec le Zend Framework ...... 63 Générer un code .Net de qualité grâce à la fabrique logicielle orientée modèle CodeFluent ! >Code Vous modélisez votre application puis la géné- rez… Version complète, 60 jours Utiliser UDDI intelligemment (1re partie)...... 67

Pourquoi faut-il s'intéresser à Groovy ? ...... 69 MacOS X Realbasic 2007 release 4 Scriptaculous : JavaScript au secours de l’ergonomie des applications web ...... 71 Environnement complet de développement en lan- Mettre en œuvre Eclipse 3.3...... 73 gage basic. Multi plate forme MacOS X, Windows Incorporez vos composants Swing et JFreeChart dans vos documents PDF...... 76 et Linux. Sur le cd-rom : version complète MacOS, durée : 15 jours, renouvelable. Liens pour téléchar- >Tempslibre gez les versions Windows et Linux Ludique ...... 80 4D v11 SQL permet de développer rapide- ment et facilement de puissantes applications Les livres du mois ...... 82 professionnelles monopostes, client/serveur et Internet riche (RIA) sur plates-formes Donnez votre avis sur ce numéro Windows et Mac. Configurations requise : Windows : Pentium III www.programmez.com/magazine_satisfaction.php Windows Vista, Windows XP. Mac OS : Mac Intel ® or PowerPC (G5 recommandé) Mac OS 10.4.5 ou +

Programmez! - N°102 3 NOVEMBRE 2007 03_05 102 22/10/2007 16:00 Page 4

Altova® XMLSpy ® 2008 – The industry standard XML development environment.

Plongez au cœur de l’intelligence XML

Avec XMLSpy®, approfondissez votre connaissance du développement XML. Nouveautés dans la version 2008: l Prise en charge des formats Microsoft® Word, Excel, et maintenant PowerPoint Open XML l Edition directe du contenu des bases de données via une fenêtre de requête pour bases de données l Evaluation XPath sur plusieurs fi chiers à la fois l Prise en charge de XInclude et XPointer

Altova® XMLSpy, l’environnement de développement XML de référence, est indispensable pour modéliser, éditer, transformer et déboguer des applications XML. Doté d’un designer graphique original de schémas, d’un générateur de code, de convertisseurs de fi chiers, de débogueurs, de profi leurs, d’une intégration totale des bases de données, d’une prise en charge XSLT, XQuery, WSDL, SOAP et d’une foule d’autres fantastiques aides et utilitaires XML, ce leader mondial dans le domaine des éditeurs XML vous permettra d’offrir une nouvelle dimension à vos projets. Vous aussi, devenez un génie de la programmation! Téléchargez XMLSpy® 2008 dès aujourd’hui: www.altova.com

XMLSpy est également disponible au sein de MissionKit™, l’offre groupée Altova déjà primée. p l

co

XMLSpy_Programmez.inddXMLSpy Programmez.indd 1 9/17/2007 3:35:26 PM 03_05 102 22/10/2007 18:33 Page 5

L’info permanente Édito EN BREF Le pouvoir de dire " ouvert " Certains sont toujours en verve pour critiquer Microsoft ou tout autre éditeur quand ils n’ou- vrent pas leurs codes. On n’entend guère de réaction quand Microsoft décide de montrer le code source de .Net aux développeurs ou quand l’OSI approuve deux licences de l’éditeur : la Public Licence et la Reciprocal Licence… Sans doute une angine blanche soudaine. Et les surprises ne s’arrêtent pas là. Depuis un peu plus de deux ans, l’éditeur tisse des accords avec JBoss, Zend, Novell, Sun, XenSource, et d’autres, pour mieux intégrer leurs tech- nologies et outils à Windows : optimisation, interopérabilité des formats, compatibilité systè- me pour la virtualisation, prise en compte des nouveaux systèmes, etc. Savez-vous qu’il existe un Monsieur " Stratégie Open Source " chez l’éditeur ? Si, si, je lui ai même serré la main ! Sam Ramji, c’est son nom, est également responsable de la stratégie plate-forme (Windows) ! La concurrence de l’open source parait être un débat aujourd’hui dépassé pour Microsoft, qui Programmez!grammez! en fait plutôt une opportunité de croissance pour son business ! J’imagine Sam Ramji dire : LE MAGAZINE DU DÉVELOPPEMENT " bon, les gars, vous avez un produit ouvert très utilisé sous Windows, comment on fait pour Rédaction : [email protected] améliorer le support de notre système dans vos outils ? " Et il pourrait ajouter " pour que les Directeur de la Rédaction : Jean Kaminsky clients continuent à utiliser Windows, et qu’on vende de nouvelles licences… ". Rédacteur en Chef : François Tonic Nous sommes là dans du pragmatisme économique ! Ont collaboré : F. Mazué, G.Delamarre, F. Remy, H. Darmet, S. Leroux, A. Vannieuwenhuyze, J. Saiz, E.Groise, F. Deshayes, Un écosystème open source autour de Windows. G. Renard, A. Crepet, F. Valenza, G. André, F. Dewasmes, Les grands projets et outils ouverts tournent sous Windows. Ce n’est pas un hasard si des J-F Lefevre, M. Vialette, W. Bories. éditeurs comme Zend ou Jboss collaborent avec Redmond pour optimiser le support, travailler Dessin : Jissey en amont sur les nouvelles versions : la base installée en Windows justifie cette approche Maquette : AJE Conseils main dans la main, qui satisfait finalement tout le monde. Publicité : Régie publicitaire, K-Now sarl Et Microsoft n’hésite pas à mobiliser des ingénieurs maison pour aider à la tâche ou tout Pour la publicité uniquement : Tél. : 01 41 77 16 03 [email protected] simplement développer des passerelles ou des pilotes d’intégration comme entre Zend Core Editeur : Go-02 sarl, 6 rue Bezout - 75014 Paris et Windows Server ou SQL Server ! Et des codeurs Firefox sont même allés à Redmond pour [email protected] - Dépôt légal : à paru- améliorer le support de Vista par le navigateur. tion - Commission paritaire : 0707K78366 - ISSN : L’écosystème open source passe aussi par les développeurs. La forge Codeplex offre déjà 1627-0908 - Imprimeur : ETC - 76198 Yvetot près de 2000 projets, des licences identiques à la GPL ou la BSD pour y mettre le code sour- Directeur de la publication : Jean-Claude Vaudecrane ce. Et cette tendance va s’accentuer. L’éditeur va ouvrir de nouveaux codes : le code frame- Ce numéro comporte un CD Rom. work .Net (même si cela reste limité à Visual Studio et en lecture seule), la future DLR de Silverlight 1.1. Abonnement : Programmez 22, rue René Boulanger, 75472 Et dès maintenant, la virtualisation mobilise de très importants efforts avec Novell et Sun. Les Paris Cedex 10 - [email protected] surprises risquent d’être nombreuses dans les prochains mois. Tél. : 01 55 56 70 55 - Fax : 01 55 56 70 20 - du lundi au jeudi Et si, finalement, Microsoft devenait un ami du monde ouvert ? Choquant, étonnant ? Oui sans de 9h30 à 12h30 et de 13h30 à 17h00, le vendredi de 9h00 doute un peu, mais Microsoft apprend vite. Et les éditeurs libres ont aussi compris que leurs à 12h00 et de 14h00 à 16h30. utilisateurs Windows ne désirent pas forcément changer de système. Business is business. Tarifs abonnement (magazine seul) : 1 an - 11 numéros France métropolitaine : 45 € - Etudiant : 39 € - CEE et J’ai demandé à Sam Ramji si Microsoft pourrait offrir demain un Windows commercial à côté Suisse : 51,83 € Algérie, Maroc, Tunisie : 55,95 € d’un " OpenWindows " gratuit … Après tout, Sun, Red Hat ou Novell ont ce type d’offre pour Canada : 64,33 € Tom : 79,61 € - Dom : 62,84 € Autres Linux/Solaris ! On m’a gentiment botté en touche sur cette hypothèse… pour le moment. pays : nous consulter. PDF : 30 € (Monde Entier) souscription en ligne. ■ François Tonic - [email protected]

Souriez PROCHAIN NUMERO avec Jissey www.programmez.com N°103 - Décembre - Parution : 30 novembre 2007 chaque semaine, un gif animé Développer Processeurs plus rapidement avec multicoeurs les composants Les derniers processeurs possèdent 2 ou 4 coeurs. Pourquoi et comment les Comment prendre en compte composants vous font-ils coder plus vite ? le multicoeur dans son code ?

XMLSpy_Programmez.indd 1 9/17/2007 3:35:26 PM 06-07 22/10/2007 17:23 Page 6

Actu EN BREF

MODÉLISATION masse, générer un projet, récupérer les métadonnées d'une base, etc.). L'utilisation de XUL/JavaScript à la place de SWT/JFace/Java ainsi que Together en édition 2007 les templates simplifie grandement le développement de générateurs de code et permet ainsi de créer rapidement des wizards adaptés aux besoins spécifiques d'une application. Parmi les fonctionnalités offertes par Akrogen, on retiendra : ensemble riche de composants XUL (tree, listbox, etc), data binding entre champs de composants et variables javascript, mise à jour de fichiers XML, properties et Java, etc. Disponible en licence GPL. Site : http://akrogen.sourceforge.net/fr/

ARCHITECTURE BEA veut révolutionner l’application L’éditeur Bea veut redonner la main aux utilisateurs. C’est dans cette optique que durant sa grand’ messe à Barcelone début octobre, l’édi- teur a dévoilé un ambitieux projet : Genesis, qui a pour but de changer la Borland a dévoilé courant octobre la nouvelle version de son outil de création d’applications. L’application est actuellement plutôt un choix modélisation, Together. Cette version prend en compte les langages de l’informatique et non du métier ou de l’utilisateur. Avec l’apparition spécifiques de domaines (ou DSL en Anglais) et tente de simplifier l’ap- de la SOA, on modifie la création d’applications. On compose des appli- proche MDD (model driven development). L’environnement supporte cations avec des services pour aboutir à une application cohérente désormais les DSL, UML, BPMN ou encore l’entity-relationship. Together mais pas forcément complète. Cette nouvelle génération d’applications 2007 inclut un DSL Toolkit pour aider les utilisateurs à créer une plate- sera composée par l’utilisateur selon ses envies, ses désirs, un peu forme neutre pour le design et capable d’adresser de multiples plates- comme aujourd’hui avec le mashup. Bea reprend à son compte le terme formes dans des domaines spécifiques. Il comprend des éditeurs " Dynamic Business Application ". On part du constat que le métier et graphiques, une transformation modèle – modèle, de la documentation les besoins métiers changent et donc qu’ il faut pouvoir adapter très ou encore des métamodèles. Cette version propose aussi : le support rapidement une application, d’où l’idée de proposer une composition .Net avec génération C# (en plus de java, C++), cela se fait à partir d’un d’applications même si le développeur reste central pour créer les nou- modèle UML, un brainstorming de notation visuel pour élaborer des veaux services. Pour que cela réussisse, il faut pouvoir disposer d’ou- idées et associer des notifications (basé sur le DSL Toolkit). Enfin, l’outil tils. Pour Bea, ces outils auront une logique SOA, car SOA est au cœur implémente le reporting BIRT. Together 2007 s’appuie sur Eclipse et se de Genesis, ainsi que les notions Web 2, sans oublier une couche de veut conforme aux spécifications MDA. BPM pour créer et gérer les processus métiers. Courant novembre, on devrait connaître le calendrier du projet Genesis. On s’attend à une GÉNÉRATION concrétisation d’ici 6 à 18 mois. La cible est uniquement l’entreprise. Car Genesis s’appuie sur l’infrastructure (que Bea fournira). Le point Une génération de code d’entrée de ces applications composées est le portail qui redevient un sous Eclipse avec Akrogen élément stratégique. C’est à partir de cette entrée que l’utilisateur verra et créera ses applications. C’est en quelque sorte du mashup évolué associé au concept de SaaS. Reste maintenant à voir concrètement le projet Genesis. Car si l’idée de remettre l’utilisateur au centre est belle, idée maintes fois reprise par les éditeurs, il faut passer du concept à la réalité et là, il y aura la maturité du marché à considérer. Il commence à peine à mettre réellement en œuvre SOA. Le mashup propose une approche similaire, fallait-il l’englober dans un nouveau concept, l’avenir nous le dira.

GÉNÉRATION Netfective passe à Eclipse ! L’éditeur Netfective Technology a dévoilé son plug-in de génération de code pour l’environnement Eclipse (3.x). Blu Age permet de générer du Akrogen est un plug-in Eclipse de génération de code orienté compo- code pour Java EE et .Net, tout en s’appuyant sur les spécifications sants. Il se base sur les wizards d'Eclipse. La présentation des pages MDA. De plus, L’outil G-Marker, permet la personnalisation du généra- des wizards est décrite en XML/XUL (au lieu de SWT/JFace) et leur teur pour des besoins spécifiques tout en garantissant une intégration logique en JavaScript (au lieu de Java). Une page d'un wizard peut être directe assurant la gestion des données de modélisation et de leur associée soit à un template (FreeMarker, Velocity, XSL) pour générer du cycle de vie. L’éditeur sera d’ailleurs partenaire de l’événement Eclipse- code, soit à un fichier ANT pour lancer une cible (générer du code en World (début novembre, Washington).

Programmez! - N°102 6 NOVEMBRE 2007 06-07 22/10/2007 16:10 Page 7 08-09 22/10/2007 17:29 Page 8

Actu EN BREF

DONNÉES STRATÉGIE Sur le CD ROM Rational fonce vers Jazz REAL SQL Serveur 2007 L’éditeur prépare activement l’arrivée de la technologie collabora- renforce les données tive Jazz. En juin dernier, Rational a dévoilé la première bêta de L’éditeur de REAL Basic, environnement de développement pour MacOS X Rational Team Concert, le premier outil maison utilisant Jazz. Il (inclus dans notre CD-Rom du mois), a dévoilé REAL SQL Server 2007. s’agit d’un portail collaboratif pour améliorer le travail en équipe, Il s’agit d’un serveur de base de données multi utilisateur / multi-plate- avec un fonctionnement temps réel pour les équipes de dévelop- pement. Il est conçu aussi pour les équipes agiles et s’intègre à forme destiné aux applications REALbasic. Cette version propose de des outils de type ClearCase ou ClearQuest. À terme, il s’agit de très nombreuses nouvelles fonctionnalités dont : livrer une gamme d’outils Concert. " La direction est d’intégrer Jazz - Encryption: REAL SQL Server supporte l'encryption AES256 des au cycle de vie " précise Danny Sabbah, directeur général. Jazz se fichiers de données. Ce niveau d'encryption est approuvé par la NSA veut ouvert, accessible en web services, avec un noyau sur lequel (U.S. National Security Agency) pour la protection des informations on basera les développeurs. L’objectif de Rational est de créer un classifiées. écosystème. Sur le serpent de mer RAD Community Edition (ver- - Nouveaux Clients: REAL SQL Server propose maintenant des accès sion gratuite de l’outil RAD), M. Sabbah a tranché la question : clients ODBC, PHP et C, rendant l'accès à REAL SQL Server simple à " pourquoi lancer quelque chose d’autre ? Le support d’Eclipse partir d'autres outils applicatifs, outils de reporting et interfaces web. suffit ". Bref, Rational ne devrait pas sortir d’outils gratuits ou très - Support Multi-core: REAL SQL Server tire avantage de tous les proces- peu chers. L’objectif de l’éditeur est de proposer des composants seurs disponibles, permettant une meilleure montée en puissance à valeur ajoutée pour pouvoir se différencier des autres éditeurs mais aussi de l’open source qui est un concurrent comme un pour les grosses bases de données. autre, surtout sur les outils dits de commodité, comme les IDE L’édition Développeur est gratuite et accessible directement via le site pour lesquels l’open source est fortement présent.Sur la future de l’éditeur. REAL Software dévoile une nouvelle tarification, dont des plate-forme 8 de Rational, la flexibilité sera un des mots d’ordre packs multi serveurs et une option de déploiement illimité. Tous les ser- notamment sur la configuration, mieux gérer le poste de dévelop- veurs commercialisés permettent un nombre de connexions illimitées. pement, avoir une intégration de la SOA, de la gouvernance, plus REAL SQL Server est disponible à l'unité au prix de 400 Euros H.T. Le transparente. La v8 devrait apparaître vers le milieu de 2008. pack de 5 serveurs est à 1 600 Euros H.T. et le pack de 10 serveurs à 2 400 Euros H.T.

AJAX Sur le SweetDev RIA : CD ROM Agenda NOVEMBRE 2 séminaires gratuits, organisés pour faciliter le développement Ajax CNIT Paris La Défense, du 13 au par Objet Direct 15 Novembre 2007 AJAX dans vos projets Web, ERP, Solutions E-ACHATS, Solu- aujourd’hui et demain : 16 tions MVI/CRM, Solutions BI, Ser- novembre à Paris, 20 novembre à veurs & Applications, Solutions Toulouse, 4 décembre à Grenoble, DEMAT’, Solutions FINANCES 13 décembre à Lyon www.infopromotion.fr Java EE 5 : évolution ou révolution de Java EE ? : 20 novembre à Toulouse Du 15 au 17 novembre www.objetdirect.com Paris web 2007 Conférences et débats pour les Objecteering 6.1 acteurs du web. Nouvelle Version www.paris-web.fr Séminaires gratuits - tour de France automne 2007 Tour de France Silverlight Microsoft Paris 15/11 – Rennes 20/11 – Lyon, jeudi 15 novembre, Marseille, Toulouse 13/11 - Lyon 22/11- mercredi 21 novembre, Paris, Sophia Antipolis 27/11 mercredi 28 novembre www.objecteering.com http://www.microsoft.com/fran- ce/events/event.aspx?Even- Le 30 Novembre 2007, Paris tID=1032350906 Hilton Tour Eiffel, Comment faciliter le développement des applications Ajax ? IDEO Tech- Journée " MD Day ", à l’initiative nologies apporte une réponse avec SweetDEV RIA, une bibliothèque de Paris la Défense, Du 21 novembre de Lyria, en partenariat AVEC Mia tags Java pour Ajax. Elle permet de rapidement créer des interfaces au 22 novembre 2007 software, Obeo, Objecteering, Objet Direct. Etat des lieux sur les riches que l’on peut rajouter à ses applications comme par exemple Forum intégration, infosecurity, stockage expo,RFID retours d'expérience de l'approche dans des pages JSP. On peut ainsi moderniser les applications Java http://www.infosecurity.com.fr/ Model-Driven - www.mdday.fr actuelles sans tout réécrire… Actuellement la version 2.2 est en cours www.integration.fr www.rfid-show.com Du 8 novembre au 4 décembre, de développement / finalisation. On bénéficie de nouveaux composants Tour de France PC Soft, comme l’accordéon, un nouveau menu, des modifications dans la docu- www.pcsoft.fr mentation, la fixation de bugs. Le projet est accessible sur sourceforge.

Donnez votreProgrammez! avis sur- N°102ce numéro8 NOVEMBRE www.programmez.com2007 08-09 22/10/2007 16:13 Page 9

Actu EN BREF Sur le CD ROM SOA COMPOSANT Parasoft équipe .Net pour la SOA Ilog sort Diagrammer pour .Net L’éditeur américain Parasoft a dévoilé son nouvel outil : SOAtest 5.5. L’éditeur français propose Diagrammer pour .Net. Il s’agit d’un outil de Cette solution vise à tester et à mieux qualifier les services pour les création de diagrammes simples et complexes que l’on intègre dans les architectures de services. Il s’intègre désormais à Visual Studio Team Win et Web Forms. On peut créer toute sorte de représentation. Il est System for Software Testers et prend en compte Windows Communica- compatible avec ASP.Net Ajax. Il dispose de trois outils d’éditions pour tion Foundation de .Net, brique de base pour la SOA chez Microsoft. construire des éditeurs de modélisation, de processus métiers et de SOAtest a pour objectif d’aider le développeur à fournir des services de diagrammes UML. Il dispose aussi qu’un SDK incluant des exemples et qualité et surtout à mieux contrôler la qualité de la SOA. On peut ainsi est accessible à tous les langages .Net. Site : www.ilog.fr vérifier les WSDL, tester l’annuaire UDDI (vérification des requêtes, test de montée en charge), utilisation de métrique pour la montée en charge. SGBD On peut même tester la sécurité contre les intrusions. Côté plate-forme, outre .Net, il supporte BEA, IBM et SoftwareAG. Pervasive renforce son SGBD embarqué L’éditeur a dévoilé la version 10 de PSQL Summit. Il s’agit d’un SGBD INTÉGRATION embarqué. Non disponible pour l’utilisateur final, cette solution vise les ISV, VAR et autres intégrateurs pour incorporer une base de données Talend lance officiellement la v2.2 embarquée de taille réduite. Cette version apporte plusieurs nouveau- L’éditeur open source d’intégration de données, Talend, vient de lancer la tés intéressantes : compatibilité avec Windows Vista (le support de Win- version 2.2 de son environnement Talend Open Studio, ainsi que d’Activi- dows Server 2008 est déjà en cours), support du 64-bit, support du ty Monitoring Consol/Personnal Edition. L’éditeur indique que 100 000 Xtreme I/O. Il s’agit d’un système d’entrée / sortie haute performance utilisateurs ont téléchargé l’outil d’intégration. La v.2 prend mieux en pour les gros débits. compte SOA, introduit de nouveaux connecteurs et assure la gestion de Sur SQL, on bénéficie d’une extension de syntaxe pour assurer une procédures stockées Oracle, SQL Server, Ingres, MySQL, DB 2. La partie meilleure compatibilité avec les applications SQL. La technologie d’Ins- monitoring. Il centralise le contrôle de l’exécution distribuée des jobs d’in- tallshield permet de migrer et déployer plus rapidement. Une version est tégration de données et permet de créer des rapports et alertes. disponible gratuitement sur le site de l’éditeur. 10-12 22/10/2007 16:15 Page 10

Événements EN BREF Adobe MAX 2007 : collaboratif, communication et développeurs ! Pour un premier essai en Europe, la conférence MAX d’Adobe a rempli ses objectifs : 4 journées intensives, mille personnes, 210 sessions et laboratoire, 2 keynotes, une dizaine d’exposants, une demi-douzaine d’annonces, des plannings produits, des surprises ! Heureusement, la ville de Barcelone assurait des soirées détente pour se reposer.

ès la première keynote, le simple RIA - RDA qui pointe son ton était donné : RIA, RDA nez. On en a déjà une première D (pour le desktop), person- preuve avec les extensions AIR nalisation du contenu au lieu dont bénéficient Dreamweaver d’un contenu et d’une interface et Flash. uniforme. Et surtout, rappeler que l’on doit placer le contenu Communication, au-dessus de tout (IL est roi) et collaboration, faire une application pour l’utili- intégrateur sateur et non pour le plaisir du Les grandes surprises eurent lieu développeur. La vidéo fut aussi dans la seconde keynote, avec la un axe central de la session démonstration de trois projets qui inaugurale. L’éditeur annonce promettent beaucoup pour 2008 : que 90 % des vidéos en ligne Pacifica, CoCoMo et Thermo. sont sous Flash ! Et pour renfor- Pacifica est l'environnement de cer, la vidéo Flash, l’éditeur voix sur IP (VoIP) de l'éditeur ! Il compte beaucoup sur le Flash permettra d'intégrer, de créer des Media Player (actuellement en applications communicantes pré-version). Il s'agit de fournir implémentant des possibilités de aux utilisateurs la possibilité de VoIP, de vidéo, etc. On bénéficie naviguer, de créer, de monter des de la haute qualité de la voix pour séquences avec une interface la le chat, on peut faire de la messa- plus intuitive possible. Le Media gerie instantanée, de la gestion Player promet beaucoup même si de présence. Le modèle de déve- maintenant il faut voir les amélio- loppement est Flex avec html, rations par rapport à Flash. Quoi flash, flex, javascript. Il fonctionne qu'il en soit, les démonstrations sous Internet Explorer et Firefox. méritent le détour. L’éditeur rap- Dans la roadmap, l'éditeur ambi- pelle qu'il supporte H264, le côté tionne de rajouter la vidéo pour le Keynote d’ouverture. video tire parti du matériel, et en chat, un véritable système P2P, le particulier du multicore ou encore d'un support multi-langue très du bonheur, la 3D sera supportée support complet de AIR ! Bref, le support du framework de puissant, des API Texte dispo- par défaut. La plate-forme AIR ne Adobe souhaite ne laisser aucun cache de Flex. nibles dans le player... Les nou- fut pas oubliée, bien au contraire. espace à Microsoft qui sort Sur la partie mobile, Flash Lite 3 veautés concerneront aussi Il s’agit pour Adobe d’étendre les actuellement sa stratégie "com- supporte la video. l'image manipulable en ActionS- applications Flex sur le desktop, munication unifiée". L'avantage cript. On disposera d'un langage tout en y apportant des fonction- d'Adobe est de s'appuyer sur des Astro est dans l’AIR pour créer des effets et des filtres nalités supplémentaires comme technologies existantes. Une bêta Concernant Flash, l’éditeur a que l'on pourra appliquer sur des le glisser-déposer, la gestion des privé devrait être déjà disponible. dévoilé le projet Astro, le Flash animations, vidéo. fichiers locaux, etc. Pour cela, le Aucune date de sortie officielle Player 10 ! La partie texte a été Il tirera parti des processeurs développeur dispose d’API. n'a été donnée (peut-être courant revue en profondeur avec l'ajout nouvelles générations, et comble A terme, c'est la fusion pure et 2008).

Programmez! - N°102 10 NOVEMBRE 2007

IN 10-12 22/10/200716:15Page11 N 12 rgamz2x8id 1 indd 21x28 Programmez 71022 IND et intégralementdesapplicationsJavaEE.NET. Avec lelogicielBLUAGE™,éditéparNETFECTIVETECHNOLOGY,lesentreprisesgénèrentautomatiquement du codesourcedesapplicationsmétierssansruntime. graphiques auformatXHTMLpourgénérerl’intégralité métiers auformatUML®/OCLetlesinterfaces BLU AGE™ interprètelesspécificationsdes processus modélisation. MDA® (ModelDrivenArchitecture)fondéesurla BLU AGE™ estuneimplémentationpragmatiquedu UML ANALYSE PACKAGEE APPLICATION XHTML MAQUETTE TECHNIQUES COMPOSANTS J2EE .NET APPLICATION GENERATOR blu

age ™ avec unemaîtrisedescoûtsaccruts.’ enjeux deladistribution.Faireplusvite,fairemieux, ‘Les directionsinformatiquesfaceauxnouveaux jeudi 15&22novembreà16:00h & GRANDEDISTRIBUTION WEBINAR MDD™ (deux webinarsparsemaine) BLU AGE™.Inscrivez-voussurwww.bluage.com Assistez gratuitementàunwebinardeprésentation www.bluage.com Toutes lesmarquescitéessontlapropriétédeleurspropriétaires respectifs BLU AGE™estunemarquedéposéeNETFECTIVETECHNOLOGY 21/0709:43:28 22/10/2007

© Eric AUDRAS - PhotoAlto 10-12 22/10/2007 16:16 Page 12

Événements EN BREF

Le second volet de la straté- finaliser le projet. Flash Next gie " communication " n’est pas réellement Flash passe par la collaboration. v11 mais plutôt un lot de fonc- Ce rôle est joué par le projet tions que l’on pourrait voir CoCoMo (pour Commun apparaître dans les futurs Collaboration Model). Il Flash. Par exemple, on peut s'appuie sur l'environne- modifier directement sur le ment Acrobat Connect tracé le déplacement des (anciennement Breeze). objets, le résultat est très L'objectif est de fournir une convaincant dans la souples- solution de collaboration se d’utilisation. D’autre part, temps réel, avec les fonc- et ce fut certainement un des tionnalités suivantes : des musts de la conférence, une messages et échanges de fonction cinématique. Par données en temps réel, une exemple, on dessine un objet communication audio vidéo en plusieurs parties. Grâce à par streaming, une gestion de mise à niveau. Autre petite surpri- Le SDK est divisé en modules et la cinématique, on peut animer en l'identité, des permissions, de la se, l'apparition du MXML Gra- chacun aura un ingénieur Adobe quelques secondes l’objet présence, la possibilité d'utiliser phics, qui peut être vu comme comme "propriétaire". Sur l'éven- comme un bras de lampe, etc. Et des documents, des media. On une réponse d'Adobe à XAML qui tualité d'avoir des sous-projets, la surtout, l’interactivité cinéma- verra les différents intervenants sert dans les outils Expression question n'est pas tranchée. Les tique reste active quand on génè- en vidéo, en audio, avec accès à Blend et Design pour créer les contributions extérieures seront re la vidéo ! Une autre de la messagerie instantanée, la interfaces. Quoi qu'il en soit, possibles mais le code devra être démonstration abordera l’utilisa- possibilité d'accéder à un tableau Adobe ne veut pas laisser de validé (ou rejeté) par le propriétai- tion de Coldfusion dans une appli- blanc collaboratif. CoCoMo s'utili- marge à Microsoft et cela le re du projet. En cas d'acceptation, cation AIR (avec présentation d’un sera dans les applications Flex via confirme. la contribution rejoindra le code nouveau tag ColdFusion dédié à un SDK. Pour le moment, aucun officiel. Enfin, Adobe restera seul AIR) et surtout, on peut gérer le agenda d'annoncé. Flex 3 en open source maître à bord pour les fonctionna- mode connecté / déconnecté. Ce On termine la partie projet avec Ce ne fut pas une réelle surprise, lités et la roadmap. Des "comit- qui peut donner une dimension une présentation de Thermo. Flex 3 est en open source. MAX a ters", comme dans les projets intéressante aux futures applica- Comme on l’a dit et redit, Thermo permis de préciser certains libres, existeront (et approuvés tions RIA / RDA. est l’outil de design RIA par excel- points. Tout d’abord, Flex 3 ne par le management d'Adobe SDK). lence ! Mais la question est de sera pas entièrement ouvert. Pour La disponibilité du code se fera Où va Adobe ? savoir si l’outil est fait pour le les sections ouvertes, on notera avec la sortie de Flex 3, c'est-à- Si 2007 fut l'année du designer, designer ou pour un rôle d’intégra- parmi les longues listes, les élé- dire début 2008. du web, de la vidéo, le coeur de teur (faisant le lien entre le code ments suivants : MXML, le compi- métier d'Adobe avec la sortie de et le graphisme) ? C'est un outil lateur ActionScript 3, les utilitaires Les possibles la Creative Suite 3, 2008, sera de création pour créer le design de visualisation de code, des futurs projets… marquée par le développement, le des applications Flex. On aboutit librairies Flex et AIR comme les Un classique de ce genre de collaboratif, et les nouvelles donc à l'offre suivante : Flex Buil- composants, les tags graphiques, conférence, montrer des projets, plates-formes et outils (Flex 3, pro- der pour le développeur, Thermo plusieurs SDK. Pour les éléments des idées de laboratoires. MAX a jets CoCoMo - Pacifica - Thermo, pour le designer. Cela ressemble fermés, on notera les binaires des dévoilé quelques travaux en cours AIR et Flash Player 10). Adobe vise quelque peu à la gamme Expres- SDK de distribution, le Core AIR qui pourront ou non voir le jour ! donc clairement aujourd’hui le sion de Microsoft, même si pour API Definition, le Core Player, Flex On débute par Flash Home for développeur pour continuer à Microsoft, on dispose de deux Builder, Flex Profiler (outil qui Mobile. Il permet de fournir un étendre la présence de Flex / outils : Blend et Design. Pour apparaît avec Flex 3)... Pour com- contenu dynamique et personnali- Flash sur le web et le desktop. À autant, Flex Builder n'est pas pliquer un peu plus les choses, sable au sein du Flash Lite. On terme, il s’agit de proposer une oublié. La prochaine version béné- ces codes ouverts et fermés peut, par exemple, personnaliser plate-forme intégrée, peut- être ficiera de nombreuses améliora- seront placés en licence Mozilla, les couleurs, les icônes, les ani- basé sur MXML. tions et nouveautés : support en licence commerciale mais il mations, implémenter une fonc- Quoi qu’il en soit les ambitions d'un runtime MXML, formatage du sera possible de mixer Mozilla tion de push (la démonstration a d’Adobe sont grandes, reste à code amélioré, un model driven UI Public Licence, LGPL et GPL. Cette montré que selon la localisation créer une communauté de dévelop- et un gros travail sur l'optimisa- partie demandera quelques préci- de l’appel, on peut afficher une peurs forte et dynamique, comme tion (notamment du compilateur). sions à la disponibilité effective image particulière…). La possibili- on peut en avoir du côté Microsoft. On utilisera un Flex UI Framework de l'ensemble. La gouvernance té semble plutôt intéressante, et le rich media bénéficiera d'une reste du seul ressort de l'éditeur. reste à voir comment Adobe va ■ François Tonic

Programmez! - N°102 12 NOVEMBRE 2007 10-12 22/10/2007 16:16 Page 13

MDD - Model Driven Development Objecteering 6 Le développement guidé par le modèle Objecteering 6 optimise MDA et UML2 pour générer un code d’un haut niveau d’expertise : il maximise la productivité et la qualité des développements en Java, C++ ou C#.

omment tirer parti au mieux de la modélisation UML à des fins de pro- C duction automatisée d’un code de qualité, maintenu en cohérence avec le modè- le ? Comment guider les développeurs dans leur modélisation et optimiser la production de code pour des architectures orientées ser- vices (SOA) s’appuyant sur des frameworks complexes ? L’approche MDA qui consiste à exploiter le modèle par des mécanismes de transformation répond précisément à ces pro- blématiques en assurant également la traça- bilité entre le code généré, le modèle dont il est issu et les exigences qui le justifient. Avec Objecteering 6, Objecteering Software met à disposition des développeurs une nouvelle génération d'outils de développement guidés par le modèle, en s'appuyant sur les dernières avancées de MDA et de UML2. Objecteering 6 Diagramme d’activité.

L’expression des besoins Objecteering la maîtrise d’œuvre fera appel aux Le maintien en cohérence des exigences, intégrée à la modélisation UML assistants UML pour le transcrire en un modèle du modèle, des diagrammes, du code Réussir l’expression des besoins de votre appli- riche des diagrammes du standard UML 2.1 pour et de la documentation cation est le point de départ fondamental pour le la précision des besoins de l’analyse. A ce stade La génération automatique de code pour les succès du développement. Objecteering 6 intègre des liens dits de traçabilité ont été automatique- cibles Java/J2EE, C# .Net, C++, Corba, la gestion des exigences avec la modélisation ment créés afin de vous assurer de la pertinence ou SQL, supportant des frameworks tels que UML. Vous démarrez dès la phase de définition de votre modélisation en regard des exigences. Spring, JSF, Struts et Hibernate ou des frame- des exigences, et poursuivez sans rupture jus- Inversement, tout enrichissement de votre works spécifiques comme les architectures qu’aux modèles d’analyse et conception. Vous modèle se traduit par un enrichissement du réfé- SOA apporte des gains substantiels en qualité pouvez ainsi obtenir un modèle des exigences rentiel que vous savez tracer vers une exigence et en productivité. La génération de documenta- complet qui vous permettra d’aborder les étapes donnée. Un document mis à jour peut alors être tion permet de fournir des documents, dédiés à d’élaboration de votre application sur des bases produit pour la maîtrise d’ouvrage. chaque type d’acteurs, pour les exigences, le solides et justifiées par les besoins. modèle et le code. Le référentiel unique est Une réelle assistance à la garant de la cohérence, de la traçabilité et de la Une meilleure communication entre la construction des modèles non redondance des informations. maîtrise d’ouvrage et la maîtrise d’œuvre Avec UML2.1 le standard de l’OMG est devenu un UML n’est pas le langage courant de la maîtrise langage riche et complet pour couvrir le besoin en d’ouvrage et le cahier des charges est le plus modélisation d’entreprise et de systèmes tech- souvent fourni sous forme d’un document tex- niques. Il est de ce fait aisé de commettre des Venez découvrir tuel. Objecteering 6 importera alors votre expres- erreurs de modélisation, et d’obtenir des Objecteering 6.1 sion de besoins et vos définitions directement modèles inconsistants. Objecteering 6 est doté Nouvelle Version ! depuis MS Word ou Open Office dans son réfé- d’un éditeur graphique UML sensitif qui assiste Tour de France en novembre rentiel d’exigences et son dictionnaire. Et si vous l’utilisateur à construire des modèles corrects Séminaires gratuits préférez la forme synthétique des tableaux et dès le début. L’audit de modèle qui vérifie en Inscrivez-vous sur matrices, Objecteering 6 vous fournit des édi- temps réel 282 règles sémantiques permet en www.objecteering.com teurs tabulaires dédiés exigences et dictionnaire outre d’assurer la cohérence du modèle dans sa ou contactez-nous au de vos termes métier. Dès l’instant où le recueil globalité, y compris dans le cadre d’un travail col- 01 30 12 16 60 des exigences est disponible dans le référentiel laboratif sur un modèle partagé.

Communiqué 14-15 22/10/2007 16:17 Page 14

Événements EN BREF PC Soft dévoile WinDev 12 ! Une des annonces majeures du mois concerne l’éditeur français PC Soft qui a dévoilé mi-octobre la version 12 de son atelier tout en un WinDev. Et WinDev 12 décide d’enfoncer le clou avec 500 améliorations et nouveautés ! Une version plus technique.

out d’abord, l’éditeur a Des données performantes beaucoup travaillé sur le La partie données subit elle aussi T compilateur just in time des améliorations. On notera un pour améliorer notablement ses assistant de réplication pour éviter performances (disponible unique- de la programmer. Et on peut main- ment sur Windows). Une simple tenant répliquer, même quand on recompilation permet de faire n’est pas connecté au serveur en fonctionner les applications v11 permanence. La base maison, sous la v12. Les divers éditeurs Hyper File autorise la sauvegarde à ont subi une refonte pour amélio- chaud sans déconnecter les utili- rer le confort de développement. sateurs… Astuce bien pratique, la On notera aussi que les icônes disponibilité de mettre en plus des fonctionnelles possèdent leurs triggers serveur. On dispose aussi raccourcis. Et pour améliorer de 14 nouveaux ordres SQL. Côté encore la productivité, WinDev html en texte en supprimant le for- un appel de BAPI (business API) Linux, un accès ODBC aux bases v12 intègre la commande vocale, matage propre à HTML (avec la qui permet l’interaction avec un de données comme DB2, Oracle, pratique pour les fonctions de prise en compte des caractères système SAP. Cela permet de gar- etc. a été implémenté. base et les manipulations dans spéciaux). HtmlVersRTF garde la der la sécurité de son environne- le projet. Le tableau de bord chef mise en forme du texte. XML n’est ment SAP et donne plus de Pour mieux tester de projets évolue en incluant une pas oublié avec XMLLit et XMLE- souplesse qu’une utilisation La qualité logicielle n’est pas vue globale et la visualisation de crit. Le premier lit une valeur dans ODBC. Cette intégration permet oubliée dans cette v12. Il est ainsi l’état d’avancement du projet le fichier XML en passant en para- aussi d’utiliser des interfaces possible de déboguer directement pour savoir précisément où l’on mètre le chemin de la valeur à créées sous WinDev à la place de le fichier exécutable .exe et plus en est. À noter que l’on dispose modifier. Le second fait la même SAP GUI. On remplace le frontal uniquement le code source ! d’un comptage précis du code chose en écriture. On peut aussi que l’utilisateur voit et utilise… D’autre part, on peut aussi débo- (nombre de lignes de code par maintenant affiner la gestion de la Du côté RAD, la refonte est enco- guer à distance une application développeur, par fonction, pour- résolution graphique en connais- re plus visible avec une modifica- fonctionnant sur un autre poste de centage de commentaires…). sant les cartes graphiques instal- tion complète du RAD et une travail (connectée par le réseau ou Le PDF continue à s’imposer dans lées sur le poste, les écrans personnalisation très poussée le web). Cela devrait faciliter la WinDev avec la possibilité d’utili- disponibles par carte graphique, la pour la génération des applica- maintenance et la traque de bugs ser un PDF comme fond de page, résolution des écrans. Ainsi, par tions. D’autre part, une applica- " vicieux ". On peut aussi enregis- pratique pour des formulaires pré- code, on peut modifier la résolu- tion générée n’a plus besoin trer un scénario de tests. Notons remplis. On peut aussi créer des tion d’un écran. Le développeur d’être régénérée quand on modi- aussi la compatibilité avec .Net 1.x, formulaires de saisie en PDF ou aura aussi le bonheur de pouvoir fie la base de données par 2, 3 et 3.5, un support amélioré de encore afficher un PDF dans un appeler directement dans son exemple. L’interface s’affine elle Java, l’ajout de fonctions Bluetooth champ image d’un état. À noter Wlangage des méthodes d’objets aussi un peu plus en proposant dans le Wlangage. WinDev Mobile que dans la prévisualisation des COM, des DLL exposant des inter- aux développeurs d’utiliser des évolue aussi notamment sur la per- états, on dispose maintenant faces C++. Le support de COM splitter, des zones répétées, des sonnalisation des écrans d’accueil d’un champ de recherche. Fonc- devrait étendre les possibilités carrousels. du mobile, la possibilité de piloter tion bienvenue, on peut aussi des applications WinDev sous Win- D’autre part, vous pouvez aussi un caméra de son mobile, de jouer créer des états ayant différentes dows. Côté image, outre la gestion choisir le type d’architecture sur des vidéos, etc. WebDev (pour le orientations dans le même état. de l’anti-aliasing, on peut générer laquelle s’appuie votre interface développement web) propose aussi du PNG (avec couche alpha pour la (par pattern). Et on peut aussi, si des nouveautés comme les menus Le langage évolue aussi transparence). cela est nécessaire, créer son Ajax. PHP est lui aussi mieux sup- WinDev utilise le langage maison : propre pattern. Plus non négli- porté avec l’ajout de nouvelles Wlangage. Comme à chaque ver- Du SAP en natif ! geable, la possibilité d’intégrer fonctions et un meilleur débogage. sion, il évolue. En v12, avec Html- Une des grosses nouveautés de l’encre numérique Ink des Que va nous réserver la v13 ? Verstexte, on récupère un contenu la v12 est l’accès natif à SAP via TabletPC… ■ F. Tonic

Recevez la NewsletterProgrammez! www.programmez.com/inscription.php- N°102 14 NOVEMBRE 2007

Pub_programmez_oct_2007_1.inddP 1 10/10/2007 13:58:18 14-15 22/10/2007 16:18 Page 15

Actu EN BREF

OUTILS Zend se met à Eclipse et travaille avec Microsoft Lors de la 3e conférence Zend, l’éditeur a prochaine version du langage. Une offre de dévoilé toute une série d’annonces impor- support allant du web jusqu’à un support télé- tantes pour la plate-forme PHP. Une des plus phonique 24 heures sur 24, 7 jours sur 7. Si le emblématique est le lancement de Zend Stu- Core est disponible gratuitement en téléchar- dio for Eclipse. Il s’agit d’un plug-in s’intégrant gement, les services optionnels sont payants dans l’IDE Eclipse pour pouvoir profiter de tous (à partir de 289 euros par an). les avantages d’Eclipse et du développement Plus que jamais, Zend renforce ses partena- PHP. Il s’appuie sur le projet Eclipse PDT riats avec IBM, Microsoft et Oracle pour amé- (orienté développement PHP). L’outil est liorer les performances PHP et son intégration. actuellement en pré-version (nom de code Côté Microsoft, on dispose désormais du Neon). Le développeur bénéficiera du support du framework Zend, des FastCGI for PHP. Il s’agit d’un add-on (en pré-version) destiné à IIS ser- outils de debug, des éditeurs HTML et wysiwig, d’un éditeur javascript, vant d’interface entre PHP et IIS. Cela doit améliorer les performances etc. La version finale est attendue pour début 2008. L’autre annonce de PHP sous le serveur Microsoft. D’autre part, Microsoft a dévoilé un concerne la sortie de Zend Core 2.5. Cette version apporte les fonc- pilote PHP pour SQL Server 2005 (en CTP). Cela permettra de faciliter tions suivantes : l’intégration de PHP et de son usage avec les bases SQL Server. On sait • Des extensions PHP 5.2.4 certifiées, des bibliothèques, des pilotes aussi que Zend Core supportera le futur Windows Server 2008, support de bases de données, le support des web services et tous les autres attendu courant 2008. Enfin, Zend et Microsoft ont dévoilé un autre pan composants nécessaires aux applications professionnelles. de leur collaboration : offrir une gestion d’identité optimale dans le Zend • Une installation simplifiée du stack complet pour applications PHP, Framework, en incluant le sign-on et CardSpace de .Net 3. comprenant le serveur web, les bases de données, les extensions et le Du côté Oracle, l’éditeur a annoncé un pilote PHP pour le SGBD Oracle, Zend Framework, avec désormais la possibilité d’un déploiement auto- OCI8, qui prend en compte Oracle 11g. Enfin, chez IBM, le développeur matique et l’intégration d’outils de gestion de système de référence. pourra mettre en œuvre IBM Mashup Starter Kit pour créer rapidement • PHP 5.2.4 sera supporté pendant 2 ans à partir de l’introduction de la des mashup. Ce kit utilise Zend Core et Zend Framework. Retrouvez nos nouveautés sur oreilly.fr !

Nouveau catalogue ! Recevez-le sur simple demande via notre site. Ouvrages en vente sur www.oreilly.fr et en librairie. L’informatique à la source www.oreilly.fr

Pub_programmez_oct_2007_1.inddPub programmez oct 2007 1 indd 1 10/10/2007 13:58:18 16-19 22/10/2007 16:18 Page 16

Sur le CD ROM SGBD EN BREF 4D v11 SQL : utiliser le moteur SQL Le cœur de la nouvelle version 4D v11 SQL est basé sur un nouveau moteur de base de données permettant aux développeurs de répondre aux besoins des entreprises les plus exigeantes. 4D fournit un environnement ouvert et évolutif grâce à l'adoption de nombreux standards comme le SQL, le SVG, l'Unicode, ainsi que l'ODBC, le XML et les Web Services.

’une des plus importantes nouveautés proposées par construire que les séquences de recherches en 4D traditionnel. Cela cette nouvelle version est la prise en charge du langage rend également la conception de recherches dynamiques plus simple. L SQL au cœur du moteur de la base de données. Ce Pour obtenir la liste des villes et le chiffre d'affaires par ville, pour les moteur SQL totalement intégré à 4D est globalement conforme clients dont le chiffre d'affaires est supérieur à la moyenne : à la norme SQL92 (ou SQL-2), avec toutefois certaines diffé- rences liées à des implémentations spécifiques. SELECT VILLE, SUM(CHIFFRE_AFFAIRE) FROM CLIENT WHERE CHIFFRE_AFFAIRE > (SELECT AVG(CHIFFRE_AFFAIRE) FROM CLIENT) Le langage SQL GROUP BY VILLE ; Le SQL (Structured Query Language) est un langage standard utilisé pour créer, supprimer, mettre à jour, trier et rechercher des informations stoc- Il est aussi possible de créer des requêtes paramétrées afin de rendre kées dans une base de données (Oracle, MySQL, sqllite, Ingres, les requêtes complètement dynamiques. Nous verrons d’ailleurs Postgres, Sybase ou même Access, FoxPro, Paradox... et aujourd’hui 4D). quelques exemples un peu plus tard. La cohabitation du langage 4D et Le SQL n’est pas en soi un système de gestion de données, c’est à la fois SQL permet de choisir au gré des besoins l'une, l'autre ou les deux une composante intégrée de ce système, un langage et une interface de méthodes de recherche dans la base de données. communication. Si le SQL n'est jamais parvenu à s'établir comme un lan- gage standard entièrement portable, il n'en est pas moins devenu un lan- gage raisonnablement universel. Le code SQL utilisé pour interroger une base Oracle peut ne pas être directement utilisable sur une base mySQL sans une adaptation préalable. En revanche les adaptations sont mineures et épargnent au développeur une réécriture complète. Un des atouts majeurs de SQL est donc d'être connu par un grand nombre de développeurs. Pour créer une table Client dans 4D, Oracle, mySQL … :

CREATE TABLE CLIENT Accès aux données et méthodes ( 4D à travers SQL CLIENT_ID INT32, Il est possible de faire référence NOM VARCHAR(30), PRENOM VARCHAR(30), à tout type d’expression 4D valide NATIONALITE VARCHAR(5), (variable, champ, tableau, expres- CONSTRAINT PK_CLIENT_ID PRIMARY KEY ( CLIENT_ID ) sion...) au sein des clauses ) WHERE et INTO des expressions Contrairement à d’autres moteurs de bases de don- SQL. nées, l’interprétation est complète. La table est dispo- Une option autorise l’exécution nible et éditable directement depuis l’interface de 4D. d’une méthode projet par le moteur SQL de 4D. Elle est désé- Atouts pour les développeurs lectionnée par défaut, ce qui professionnels signifie que, sauf autorisation L’apport du SQL pour le développeur va du très explicite, les méthodes projet de simple (la possibilité de construire facilement des 4D sont protégées et ne peuvent recherches complexes) au très puissant (la possibi- pas être appelées par le moteur lité de développer une application capable de fonc- SQL de 4D. Cette propriété s’ap- tionner indifféremment en monoposte, en plique à toutes les requêtes SQL multiposte et en client d'un serveur SQL tiers). internes et externes. Une méthode peut être appelée Les recherches de différentes manières : via le Les commandes SQL sont bâties en texte, ce qui permet une construc- code SQL, par des commandes ODBC, avec la commande CHERCHER tion "à la volée" grâce aux commandes de manipulation de chaînes de PAR SQL ou encore avec la commande SQL EXECUTE IMMEDIATE. caractère. Les recherches complexes sont beaucoup plus faciles à Voici la syntaxe à utiliser : {fn AS

Programmez! - N°102 16 NOVEMBRE 2007 16-19 22/10/2007 16:20 Page 17

SGBD EN BREF

tat_méthode_4D>}. Il est possible également de contrôler les requêtes Le moteur SQL de 4D externes adressées au serveur SQL en utilisant la gestion interne des L’architecture multi-base est implémentée au niveau du serveur SQL de utilisateurs et groupes de 4D. Ce contrôle est effectué au niveau du 4D. 4D v11 SQL propose son propre serveur SQL, ce qui signifie que les type d’action autorisé et de l’utilisateur ayant effectué la requête. requêtes SQL peuvent être aiguillées soit vers un serveur SQL externe soit vers le moteur SQL de 4D. Les liens entre les tables TOUT SELECTIONNER ([prefs]) La souplesse de SQL per- Si ([prefs]moteur="4DLocal") met d’étendre les possibi- UTILISER BASE INTERNE lités des liens Sinon automatiques de 4D et de UTILISER BASE EXTERNE ([prefs]moteur;[prefs]login;[prefs]password) gérer directement des cri- Fin de si tères de recherche com- plexes. Grâce également à l’implémentation des commandes DDL (Data Defini- SQL permet de faire direc- tion Language) dans le serveur SQL de 4D v11, vous pouvez directe- tement une jointure sur ment intervenir sur la structure de votre base et la manipuler. trois tables, même si la jointure comporte une L’interface 4D relation calculée : 4D v11 SQL permet de placer les résultats d'une requête directement dans une listbox. 4D créera automatiquement les colonnes et les lignes TABLEAU TEXTE ($client;0) TABLEAU TEXTE ($regions;0) nécessaires pour afficher les données reçues. Debut SQL SELECT CLIENT.NOM, REGION.NOM FROM CLIENT, DEPARTEMENT, REGION SELECT * FROM CLIENT WHERE ( DEPARTEMENT.CP=SUBSTRING (CLIENT.CP,1,2) INTO :maListBox; AND REGION.REGION_ID = DEPARTEMENT.REGION_ID ) INTO (:$clients, :$regions); Fin SQL

Les transactions imbriquées Les ordres COMMIT et ROLLBACK sont implémentés dans le SQL de 4D. Vous démarrez une transaction avec START TRANSACTION et la validez avec l’ordre COMMIT ou l’annulez avec l’ordre ROLLBACK. Les mécanismes des transactions 4D, intégrées au moteur de la base de données, sont également utilisables. Il est possible d’imbriquer des transac- tions jusqu’à 32767 niveaux ! La définition d'une listbox dans le formulaire facilite la mise en place d'une Ouverture sur 4D au travers de SQL interface claire. ODBC L'adoption du langage SQL permet de rendre 4D accessible à travers Debut SQL ODBC sans forcément passer par 4D serveur. En un seul clic, ou une SELECT CLIENT_ID, CONCAT(CONCAT(NOM, ' '), PRENOM), VILLE seule commande du langage, les données de votre application deviennent FROM CLIENT accessibles à une immense gamme de produits du marché. Il devient aisé INTO :maListBox; depuis Excel de lire des données dans votre système de facturation. Il est Fin SQL dorénavant facile de laisser vos clients créer un mailing à partir de Word. L'analyse de données graphiques avec Crystal Reports est maintenant à la portée de vos utilisateurs sans avoir à programmer des exports spéci- fiques pour chaque projet.

Ecrire du SQL dans 4D Dans son implémentation la plus directe, le langage SQL a été inclus au langage 4D. L’accès aux enregistrements s’effectue dans un bloc Début Mieux encore : maintenant 2 moteurs 4D peuvent communiquer via ODBC ! SQL … Fin SQL. Il est d’ailleurs possible de déboguer lors de son exécution

Programmez! - N°102 17 NOVEMBRE 2007 16-19 22/10/2007 16:20 Page 18

SGBD EN BREF

Les commandes ODBC intégrées peuvent également se connecter au le code SQL encapsulé dans ce bloc. Vous pouvez ainsi déboguer simulta- moteur SQL de 4D. nément votre code SQL et votre code 4D dans le même environnement.

TABLEAU TEXTE (atNoms;0) ODBC LOGIN ( SQL_Internal ) ODBC EXECUTER ( "SELECT NOM FROM CLIENT WHERE NOM LIKE 'A%' "; atNoms) ODBC CHARGER ENREGISTREMENT ( ODBC Tous les enregistrements ) ODBC LOGOUT

Conclusion L'arrivée de SQL est une nouvelle étape dans une longue succession d'enri- chissements techniques implémentés dans 4D v11 SQL pour accroître la productivité des développeurs. C’est pourquoi ce premier article est entière- ment consacré au tout nouveau moteur SQL de 4D. Cependant, la prise en charge du SQL dans 4D v11 est loin d’être la seule nouveauté proposée dans ce dernier opus. Pour essayer d’en faire le tour, nous aborderons dans un prochain article les technologies standard et modernes utilisables avec Par le langage SQL, il est possible de créer une nouvelle sélection en 4D v11 (Web 2.0, Flex, Ajax, Web Services, SOAP, etc.). Nous verrons aussi passant une requête directement à 4D. prochainement comment développer rapidement et efficacement vos appli- cations professionnelles. CHERCHER PAR SQL ( [CLIENT] ; " NOM LIKE 'A%' " ) ■ Jacques Lefevre 4D crée l’événement avec l’iPhone ! 4D v11 SQL veut encore aller plus loin en s’attaquant aux technologies portables comme l’iPhone ou le PDA. Rien n’arrête décidément l’éditeur français de logiciels de développement ! Surtout que l’iPhone à l’heure actuelle ne supporte ni Flash ni applications externes. 4D a développé une application en ligne Web Une démonstration iPhone en des données pouvaient être modifiés : 2.0 utilisable avec l’iPhone. Nous avons voulu direct sur l’Apple Expo - Les totaux exprimés en euros, dollars, Yen… comprendre et tester pour vous cette dernière Une des démonstrations à laquelle nous - Affichage du pourcentage de réalisation innovation. Pour relever ce défi 4D n’avait avons assisté permettait de construire et de des objectifs d’autres solutions que de s’appuyer sur les visualiser à la volée des reportings de vente. - Affichage du chiffre d'affaires des commer- possibilités offertes par l’iPhone et de fonc- Les commerciaux pouvaient consulter sur ciaux tionner en mode connecté. Le produit 4D Web leur appareil mobile (iPhone ou PDA) l'en- - Changement de couleur selon l'objectif réa- 2.0 Pack disponible depuis début 2007 rem- semble de leurs fiches clients (coordonnées, lisé par commercial plit élégamment ces fonctions. Dans ce pack, historique clients) ainsi que leur catalogue les développeurs disposent de 4D Ajax Fra- produits. mework, un moyen rapide et facile pour Le directeur commercial pouvait accéder aux construire des applications publiables direc- ventes régionales de ses commerciaux sur tement sur le Web. Conçu pour permettre son iPhone grâce au tableau de bord de 4D d'écrire du code simple et fiable, 4D Web 2.0 Ajax Framework. Les différents rapports de Pack augmente la productivité des développe- vente ont pu être créés par simples clics et ments grâce à son serveur Web intégré, ses toutes ces informations ont été instantané- outils d'administration et sa bibliothèque ment publiées sur l’iPhone ou le PDA. JavaScript. C’est là où 4D se démarque de ses concurrents car il permet de faire fonc- Dialogue d’authentification tionner ses applications aussi bien sur les Le dialogue des paramétrages d'authentifi- systèmes les plus ouverts que sur les sys- cation permet de définir les accès et autori- tèmes les plus propriétaires en s’exécutant sations aux données. dans le contexte du navigateur. Et surtout, 4D sait adapter son produit aux systèmes d’ex- L’affichage des informations Nous avons été impressionnés par la rapidi- ploitation embarqués en déployant des appli- est interactif té de mise en place de cette application et cations de reporting répondant notamment Les ventes ont été classées par région selon par son ergonomie dans la visualisation des aux besoins des personnes itinérantes. les critères choisis. L’affichage et le format données.

Programmez! - N°102 18 NOVEMBRE 2007

,QWH 16-19 22/10/2007 16:20 Page 19

3(16(= 3$5$//(/(

1RXYHOOHV(GLWLRQVGHV&RPSLODWHXUV,QWHOŠ&HW)RUWUDQ /DQRXYHOOHYHUVLRQRIIUHOHPHLOOHXUVXSSRUWSRXUFUpHUGHVDSSOLFDWLRQVPXOWL WKUHDGVXU:LQGRZV /LQX[ HW0$&26 ;6HXOHVOHVpGLWLRQVSURIHVVLRQQHOOHV GHVFRPSLODWHXUV,QWHOSURSRVHQWO·pWHQGXHG·RSWLPLVDWLRQVDYDQFpHVHWGH FDSDFLWpVPXOWLWKHDGLQJTXLLQFOXHQWODYHFWRULVDWLRQO·DXWRSDUDOpOOLVDWLRQ 2SHQ03 UpFXSHUDWLRQDQWLFLSpHVGHVGRQQpHVGpURXODJHVGHERXFOHVHWOHV ELEOLRWKqTXHVKDXWHPHQWRSWLPLVpHVGHFRQVWUXFWLRQGHEORFVGHWKUHDGLQJGH WUDLWHPHQWPDWKpPDWLTXHVHWGHPXOWLPpGLD /·(GLWLRQGX&RPSLODWHXU,QWHO3URIHVVLRQQHOOHHVWIRXUQLHDYHFGHV ELEOLRWKqTXHVTXLYRXVSHUPHWWHQWGHFRQFHYRLUGHVWKUHDGVGqVOHSUHPLHUMRXU /HV$3,VGHVELEOLRWKqTXHVWLHQQHQWFRPSWHFRQWLQXHOOHPHQWGHVpYROXWLRQVGHV ´'·LFLDQVXQ SURFHVVHXUVSDUGHVPLVHVjMRXU SURJUDPPHXUTXLQH /HVFRPSLODWHXUVHWELEOLRWKqTXHVVRQWIDLWVOHVXQVSRXUOHVDXWUHV SHQVHSDV¶SDUDOOqOH· /HV&RPSLODWHXUV,QWHOŠ&HW)RUWUDQSDUDOOpOLVHQWDXWRPDWLTXHPHQWYRWUHFRGHHW QHVHUDSOXVXQ O·RSWLPLVHQWHQSHUIRUPDQFHVSRXUSURÀWHUDXPLHXGHVDUFKLWHFWXUHVPXOWLFRHXU SURJUDPPHXUµ /·,QWHOŠ0DWK.HUQHO/LEUDU\PHWjYRWUHGLVSRVLWLRQGHVIRQFWLRQVPDWKpPDWLTXHVPXOWL WKUHDGpHVTXLVXUSDVVHQWOHVSHUIRUPDQFHVGHFRGHVFRPSLOpVLQGLYLGXHOOHPHQWDLQVLTXHFHOOHV -DPHV5HLQGHUV G·DXWUHVELEOLRWKqTXHV (YDQJpOLVWHHQ&KHIGHV /HV,QWHOŠ,QWHJUDWHG3HUIRUPDQFH3ULPLWLYHV &VHXOHPHQW LQFRUSRUHQWGHVIRQFWLRQV 2XWLOV/RJLFLHOV,QWHO KDXWHPHQWRSWLPLVpHVTXLDFFpOqUHQWOHGpYHORSSHPHQWGXWUDLWHPHQWGHPpGLDGHFU\SWRJUDSKLH HWGXVLJQDO /HV,QWHOŠ7KUHDGLQJ%XLOGLQJ%ORFNV &VHXOHPHQW UHJURXSHQWGHVURXWLQHVYpULÀpHV HWDIÀQpHVSRXUVLPSOLÀHUOHGpYHORSSHPHQWG·DSOLFDWLRQVPXOWLWKUHDGUREXVWHVHWFDSDEOHVGH PRQWHUHQFKDUJH

)$,7(6/(3$668,9$17 0LFUR6LJPD $//<6 7UDQVWHF6$5/ 7HO 7pO 7pO )D[ )D[ )D[ ZZZPLFURVLJPDIULQWHO ZZZDOO\VVRIWFRP ZZZWUDQVWHFFOXVWHUFRP LQWHO#PLFURVLJPDIU DOO\V#DOO\VVRIWFRP FFHQWHU#WUDQVWHFGH

5,70(,QIRUPDWLTXH 626'HYHORSHUV 7HO2 7HO )D[ )D[ ZZZULWPHFRP ZZZVRVGHYHORSHUVFRPLQWHOKWP LQIR#ULWPHFRP LQIRV#VRVGHYHORSHUVFRP

‹,QWHO&RUSRUDWLRQ,QWHOOHORJR,QWHOOHDSDKHDGHWOHORJR,QWHOOHDSDKHDGVRQWGHVPDUTXHVRXGHVPDUTXHVGpSRVpHVGH,QWHO &RUSRUDWLRQRXGHVHVÀOLDOHVDX[(WDWV8QLVG·$PpULTXHHWDXWUHVSD\V7RXVGURLWVUpVHUYpV

,QWHO3XE3URJLQGG   20-21 22/10/2007 16:21 Page 20

Gros Plan EN BREF MacOS X et le développeur

Le Mac est redevenu, grâce à MacOS X et dernièrement avec le passage aux processeurs Intel, une plate-forme attrayante. Même si le marché du développement Mac demeure restreint, notamment en entreprise, avec les bonnes ventes des Mac Intel, l’arrivée du iPhone et de MacOS X 10.5, la situation tendrait à s’améliorer. Encore faut-il convaincre les entreprises d’utiliser plus souvent du Mac… La plate-forme Mac intéresse de plus en plus de développeurs, y compris les développeurs Windows ou Linux.

our Zend, éditeur de solutions PHP, MacOS X représente 10 afin de préparer les applications % de son marché, pour 4D, éditeur du SGBD éponyme, cette à son arrivée. MacOS X 10.5 P part se situe à environ 25 % et presque la moitié pour son (alias Leopard) introduit, outre serveur. De nombreux outils de développement sont disponibles de nouvelles API, les nouveaux sous le système pommé : Eclipse, NetBeans, JBuilder, outils de développement, dont Dreamweaver, Mono. Et de plus en plus d’outils ouverts sont por- le très attendu Xcode 3.0, sans tés. Apple livre en standard plusieurs langages : Python, Ruby… oublier la mise à niveau du lan- Cependant, il y a un manque d’outils de qualité logicielle, de cycle gage Objective-C, le support de vie et peu de grands SGBD sont élargi du 64-bit, la possibilité disponibles. Bref, l’outillage est bon de créer des snapshots mais pourrait mieux faire ! rapidement.

Pourtant, le Mac devient réellement Dans ce dossier spécial un poste de développement comme Mac / MacOS X, nous un autre. Le passage aux proces- allons vous dévoiler le seurs Intel ouvre de nouvelles pers- monde des développeurs pectives. L’arrivée de la MacOS X, les outils, les technologies, et finalement, pourquoi le virtualisation, avec par exemple Mac Intel devient une plate-forme de développement intéressante ! VMware Fusion ou Parallels, transfor- ■ François Tonic me radicalement le visage du Mac et facilite le développement multi-plate- forme. BootCamp d’Apple a aussi DERNIÈRE MINUTE ouvert la voie au développement Win- dows ou Linux, en dur… D’ici à ce - MacOS X Programmation (Dunod) par que les développeurs .Net codent à Etienne Vautherin : découvrez le développe- partir d’un Mac Intel, il y a un pas ment MacOS X (et notamment Leopard) aisément franchissable ! avec les différentes librairies, les outils dis- Apple aide aussi les développeurs à ponibles. Un ouvrage qui deviendra vite une concevoir des applications MacOS X. Pour cela, le programme ADC référence ! (Apple Developer Connection) permet d’accéder à de nombreuses - MacOS X 10.5 : c’est officiel, MacOS X 10.5 alias Leopard est ressources : pré-versions des outils, documentations, disponibilité disponible depuis le 26 octobre… Préparez vos machines ! des systèmes, accès à des conférences et surtout accès aux API, librairies et outils. Un premier niveau est gratuit pour accéder aux - Programmer pour iPhone : Apple l’a confirmé. Un SDK sera dis- librairies et documentations (ainsi que le téléchargement des outils) ponible pour les développeurs en février 2008. Cette annonce mais pour l’accès aux outils et systèmes, il faut payer 499 ou 3 499 devrait créer une communauté active et nombreuse. Prends aussi dollars pour le programme Select ou Premier (pour les étudiants, 99 en compte le développement sur iPod Touch. dollars). Leopard était par exemple disponible depuis plusieurs mois

Programmez! - N°102 20 NOVEMBRE 2007 20-21 22/10/2007 16:22 Page 21

MAC

RETOUR D’EXPÉRIENCE Le développement Web sous Mac Le Mac en tant que plate-forme de développement Web ? C’est non seulement possible, mais c’est aussi très efficace grâce à ses origines Unix et à quelques excellents outils. Retour d’expérience sur le développement de plusieurs sites professionnels depuis Mac OS X.

oder, installer, adminis- gamme de développement web trer, réparer... il faut être Adobe (Dreamweaver, etc...). Du C un véritable homme- côté des client FTP, l’excellent orchestre lorsqu’il s’agit d’assu- Transmit domine, mais Captain rer une activité sur le web et FTP (gratuit) ou CyberDuck (gratuit) qu’on est une minuscule structu- sont aussi très populaires. Après re. C’est le cas de LesNouvelles avoir longtemps utilisé le couple .net, qui édite le site éponyme TextWrangler + Transmit pour nos ainsi que SecurityNewsletter.com développements web, nous avons et StorageNews letter.com. Le toutefois récemment migré sous point commun de ces sites : tous Coda, un outil de développement ont été entièrement créés sur un web commercial proposé par Panic Mac, ainsi que le CMS multi-site (éditeur de Transmit). Outre ses qui anime ces derniers. Quant à nombreuses fonctionnalités inté- ▲ leurs serveurs dédiés, ils sont Une vue de l'éditeur grées (éditeur de texte basé sur graphique de CSS aussi administrés quotidienne- (mais on peut tout SubEthaEdit, moteur FTP de Trans- ment depuis un Mac. aussi bien éditer le mit, éditeur visuel de CSS et Le Mac offre un cocktail idéal de CSS en mode texte) même des ouvrages de référence technologies et d’outils pour assu- HTML, PHP, Javascript et CSS), rer à la fois le développement c’est surtout la facilité d’organisa- web, le travail photographique La "page d'accueil" tion du travail qu’il permet qui

de▲ Coda, qui permet professionnel, la production de de sélectionner le pro- nous a fait adopter Coda. L’envi- contenu rédactionnel et une activi- jet sur lequel travailler. ronnement offre une vue “par pro- té bureautique quotidienne. C’est jet”, chaque site étant entièrement pour cela qu’il a été choisi comme cun étant contenu dans un réper- suite. Seule manque la base de intégré en une fenêtre. Outre les plate-forme unique pour LesNou- toire dédié. données MySQL (hormis dans la outils de développement, cette velles.net. Hormis l’hébergement Afin d’y accéder plus simplement, version server de MacOS). Mais dernière présente à tout moment des serveurs de production (sous il est également utile d’éditer le des binaires OSX et un installateur l'arborescence locale et distante Linux Debian), Mac OS X est en fichier /private/etc/hosts et d’as- dédié sont disponibles sur le site du site. Chaque fichier modifié en mesure d’assurer quasi-native- socier chaque site virtuel à un nom de l’éditeur et leur installation ne local est étiqueté comme tel par ment toutes les facettes de domaine local. Il suffit pour demande que quelques instants. Coda. Lorsque tout fonctionne cor- de l’activité. cela d’y ajouter une ligne sur le rectement en local, un simple bou- modèle “127.0.0.1 mon-site” (ou Une question d’outils ton permet d’uploader sur le Les briques essentielles “mon-site” est le ServerName Une fois la plate-forme opération- serveur de production l’ensemble d’une plate-forme web donné dans la configuration nelle, il reste à développer. Les des fichiers modifiés en une seule Grâce à ses origines unixiennes, d’Apache pour ce projet, et non le outils indispensables seront au opération, via SFTP. Enfin, Coda Mac OS X offre d’emblée les nom de son répertoire, qui est lui minimum un éditeur de texte et un mémorise tous les fichiers ouverts briques nécessaires au développe- défini par la directive Document client FTP afin de mettre à jour les d’une session à l’autre (et la liste ment web LAMP : le serveur Root). Chaque site sera désormais serveurs de production. Il s’agit des fichiers modifiés et pas enco- Apache y est intégré, ainsi que accessible en tapant son nom d’une question hautement subjec- re mis en ligne), permettant de PHP. Il suffit à cette étape de modi- dans la barre d’adresse du tive. Le Mac dispose de bons édi- retrouver immédiatement son envi- fier la configuration d’Apache (/pri- navigateur. teurs de textes (TextMate, la ronnement de travail. vate/etc/httpd/httpd.conf) afin Le Mac intègre également un outil référence, mais aussi SubEthaE- Ces seules fonctions nous ont fait d’activer le support des sites vir- CVS (sur le DVD XCode), le sup- dit, BBEdit, ou sa version gratuite gagner beaucoup de temps lors de tuels via la directive VirtualHost. port WebDAV dans Apache et bien TextWrangler, entre autres), d’un nos développements. Cela permet de travailler sur plu- entendu SSH, qui s’avérera essen- excellent éditeur CSS visuel ■ Jérôme Saiz sieurs projets simultanément, cha- tiel à notre plate-forme par la (CSSEdit) et bien entendu de la lesNouvelles.net

Programmez! - N°102 21 NOVEMBRE 2007 22-27 22/10/2007 16:23 Page 22

Gros Plan MAC MacOS X : l’OS des développeurs ? Les développeurs MacOS X existent. Nous avons posé quelques questions à l’un d’entre eux : Yann Bizeul. Il code intensivement avec les librairies Cocoa d’Apple. Que pense-t-il de MacOS X ?

Programmez ! : pensez-vous que qui remonte le temps, on sait tout le marché du développement de suite que l'on est dans le nou- sous MacOS X évolue dans le vel outil de sauvegarde, TimeMa- bon sens ? La demande de déve- chine, et on sait comment loppement est-elle bonne ? l'utiliser. Ce n'est pas du gadget : Yann Bizeul : Je ces API, bien utilisées améliorent crois que le vraiment l'ergonomie et le confort marché du de l'utilisateur. De plus, Apple développement fournit plein d'exemples de code, sur Mac suit accessibles à tous, la communau- une courbe té est très active, c'est difficile de parallèle à celle de la part de mar- se retrouver tout seul. En ce qui ché d’Apple. Et je crois aussi que concerne Xcode, ma foi on trouve- celle-ci ne peut aller qu'en s'amé- ra toujours des insatisfaits. liorant. Je constate autour de moi P ! : Considérez-vous MacOS X et ment voyez-vous les évolutions Certes Xcode n'est pas parfait, un nombre incroyable de per- le Mac en général comme un bon de Leopard, de XCode et du lan- peut-être n’a-t-il pas autant de sonnes rapidement séduites par poste de développement ? gage Objective C ? fonctionnalités qu’Eclipse ou notre plate-forme, et qui swit- Y.B. : J'avais essayé de dévelop- Y.B. : J'ai l'impression que sous d'autres IDE, mais il s'améliore, chent sans regret, d'autant plus per sous Mac OS 9 à l'époque, Tiger, Apple entretenait un décala- chaque version majeure apporte que le passage à Intel les rassure mais je n'avais jamais réussi à en ge entre sa manière de program- son lot de nouveautés et réduit un malgré tout sur la possibilité de comprendre la logique et j'avais mer une application, et les peu l'écart. Personnellement faire fonctionner leurs applica- finalement abandonné. Puis est possibilités offertes aux program- j'adore. Et le fait qu’Apple fournis- tions historiques qui ne seraient arrivé Mac OS X, structuré autour meurs. Il fallait souvent bidouiller se un IDE gratuitement, que cet pas portées sur Mac OS X. Le d'un langage de programmation pour obtenir un comportement IDE soit celui-là même avec lequel développement n'étant pas ma objet, je m’y suis tout de suite similaire à ce que proposait Apple les ingénieurs de la pomme tra- source de revenus principale, je retrouvé. Mon expérience de la à ses utilisateurs. J'ai aujourd'hui vaillent, c'est déjà énorme et un n'ai peut-être pas une vision réa- programmation avant, cela se le sentiment qu’Apple essaye de gage de qualité. En ce qui concer- liste de la situation, mais j'aime résumait au basic, et aussi à une réduire ce "gap" et ceci nous per- ne Objective-C, c'est un peu la croire que vu le peu de program- bonne maîtrise de langage de mettra de fournir des applications même chose, les choses évoluent meurs Mac en France et le poten- script type PHP, Bash, etc. Je n'ai cohérentes à l'utilisateur. Tout le lentement, mais elles évoluent, je tiel de la demande à venir, l'avenir pas vraiment eu de difficulté à monde a déjà parlé de CoreAnima- trouve que c'était déjà un excel- s'annonce plutôt bien. démarrer. Je crois qu'on retrouve tion, une des grandes nouveautés lent langage. J'attends de voir ce tout l'esprit Apple dans la pro- de Leopard, je crois qu’au delà de que le nouveau Garbage Collector P ! : Le passage PowerPC à Intel grammation Mac : intuitif, simple l'effet "waow" ce sont ce genre donnera : beaucoup de program- fut-il un souci pour vous et vos et rapide. D'autant plus qu’Apple d'outils qui font que le Mac est meurs sont inquiets à ce sujet, codes ? nous pré-mâche de plus en plus aujourd'hui ce qu'il est : une mais j'ai confiance, les Y.B. : Personnellement, ce fut un de travail avec des frameworks plate-forme enviée, ou l'aspect (nouvelles ?) applications Apple vrai bonheur, tout s'est passé toujours plus complets. graphique de l'OS non seulement elles-mêmes devraient en bénéfi- comme dans les démos ! Une ne gâche rien à l'ergonomie, mais cier, c'est aussi une sécurité. case à cocher, on compile, et P ! : Apple prépare Leopard et sert au contraire à améliorer ce "Voilà !". Occasionnellement j'ai une sérieuse évolution de ses que certains appellent "l'expé- Pour en savoir plus : dû me frotter à des soucis de byte outils de développements. Apple rience utilisateur" (User experien- http://projects.tynsoe.org/ ordering, mais tout cela est très propose-t-il suffisamment au ce) : ces petits rien qui font que bien documenté et se manifeste développeur (documentations, lorsque qu'on se retrouve dans Propos recueillis par dans des cas spécifiques. outils, exemples, etc.) ? Com- l'espace avec la fenêtre courante ■ François Tonic L’informationreste sadre 180 mm large x permanente12 mm de haut • L’actu quotidienne • La newsletter hebdo wwwProgrammez!.programmez.com- N°102 22 NOVEMBRE 2007 22-27 22/10/2007 16:25 Page 23 22-27 22/10/2007 16:26 Page 24

Gros Plan Quartz, l’alternative ? Pendant que tous les regards convergent vers cette nouvelle bataille des technologies vectorielles qui s’amorce entre Adobe Air et Microsoft Silverlight, il existe une technologie alternative dont l’origine remonte à presque 20 ans et qui mériterait toute nos attentions : Quartz.

i on regarde l’architecture met pourtant de réaliser des opé- de Mac OS X, on identifie Quartz Extreme rations complexes. D’autant plus S le composant " Core Avec Quartz Extreme, Apple a survitaminé Quartz à l’Open GL. Ainsi toutes que vous pouvez développer vos Image " de la couche " Graphics les opérations d’affichages, même 2D, sont directement confiées aux pro- propres patchs, repoussant ainsi cesseurs des cartes 3D. On est très proche de la solution retenue par and Media ". C’est ici que cohabi- Microsoft pour l’affichage des fenêtres du mode Aero de Vista. Cela va per- les frontières du possible. tent Quartz et Open GL, le premier mettre aux développeurs de repousser les limites de quartz. Il faut s’attendre Les compositions ainsi prenant officiellement en charge à un nouveau bond dans le design et l’ergonomie des applications sous Mac. construites peuvent être directe- la 2D et le deuxième la 3D. Mais ment utilisées en tant qu’écran de ce découpage est de plus en plus veille par exemple, ou être trans- artificiel puisque l’avenir est au formées en une application auto- mariage des deux éléments. nome. Pour les manipuler via du Quartz a deux fonctions essen- code dans une application Cocoa tielles : il suffit d’utiliser le contrôle gra- - Le moteur d’affichage 2D s’ap- phique QCView. Il va servir de puyant sur les spécifications PDF conteneur hébergeant votre com- - Un environnement de gestion position. On peut également les des fenêtres offrant des ser- intégrer dans une page Web via vices avancés tels que : le Win- un tag et interagir en dow Buffering, la gestion de la utilisant quelques lignes de code transparence et des ombres, et Javascript. la gestion des évènements. Et on peut utiliser Quartz en colla- Dessiner avec Quartz boration avec les collègues de tra- En Cocoa vail que sont Core Video, Open GL Toutes les possibilités de quartz et QuickTime. Ainsi on peut aisé- Exemple de composition sont mises à la disposition du ment créer une image dans développeur Cocoa à travers le Quartz qui provient d’une source Core Graphics framework de QuickTime. classes. Donc toutes les routines Quartz 2D sont directement dis- Composer avec Quartz ponibles via le AppKit.Framework. L’outil de développement privilé- La métaphore du peintre s’ap- gié de Quartz est le Quartz Com- plique très bien au développe- poser. Reprenant l’approche très Dans cet exemple : ment Quartz : chaque opération visuelle de l’interface builder, il - Un sprite (élément mobile) est construit à partir d’un texte. consiste à ajouter une couche de permet de " composer " votre - La connexion entre mouse et sprite sur " X Position " et " Y position " peinture sur la toile. permet de déplacer le sprite grâce à la souris. création graphique. Commençons par créer notre pro- Une flopée de technologies sont jet Cocoa avec XCode. Puis une mises à votre disposition: Quartz fois l’interface builder lancée, 2D, Core Image, Core Video, Open ajoutons une classe MaVueQuartz GL, QuickTime, MIDI System Ser- héritant de NSView, en prenant vices, et même les feeds RSS. On se sert soin de générer les fichiers Un " programme " quartz compo- d’un oscillateur basse sources associés (Create Files for ser est composé de " patchs " fréquence (LFO = Low MaVueQuartz). Frequency Oscillator) interconnectés entre eux. Le prin- pour faire " dilater " Nous allons maintenant ajouter cipe de base est simple mais per- le sprite. notre vue à la " Window " : drag &

Programmez! - N°102 24 NOVEMBRE 2007 22-27 22/10/2007 16:26 Page 25

MAC

dropons un Custom View dans notre fenêtre et prenons soin dans l’inspec- modèle 100% objet de Cocoa. Commençons par créer une application teur d’indiquer que la " Custom Class " est notre classe MaVueQuartz. Carbon C++ avec XCode. Lançons Interface Builder (double click sur Maintenant, il nous reste à implémenter notre vue. La première chose à Main.nib) puis ajoutons à notre fenêtre un HIView (Human Interface faire est d’obtenir le contexte graphique. Nous utilisons currentContext qui View) qui va nous permettre d’implémenter notre rendu Quartz. permet d’obtenir l’instance NSGraphicsContext associée au thread cou- L’élément clef est de bien noter la signature et le code que vous attri- rant. Pour dessiner, nous avons besoin d’un contexte graphique spécifique buez à notre vue : nous devons les utiliser dans notre code afin d’obte- à la plate-forme, ce que nous obtenons avec graphicsPort. nir une référence à notre HIView.

CGContextRef monContext = [[NSGraphicsContext currentContext] graphicsPort]; HIViewRef myHIView; static const HIViewID myHIViewID = { 123, 'mVue'}; Maintenant, créons un rectangle blanc. Nous utiliserons CGContextSe- (HIViewGetRoot(myMainWindow), myHIViewID, &myHIView); tRGBFillColor pour choisir la couleur du pinceau, puis CGContextFillRect pour peindre le rectangle plein. Pour la couleur rouge, pas de classique Maintenant que nous tenons notre vue, nous pouvons ajouter son event 255,0,0 mais un 1,0,0. En effet, les composantes couleurs sont définies handler pour prendre la main sur son affichage (Draw). par des float en Cocoa, perfection Apple oblige ! Il faut également ajouter une quatrième composante obligatoire à toute couleur : la transparence. static const EventTypeSpec myHIViewSpec[] = {kEventClassControl, kEventControlDraw }; CGContextSetRGBFillColor (myContext, 1, 0, 0, 1); CGContextFillRect (myContext, CGRectMake (0, 0, 200, 100)); err = InstallEventHandler (GetControlEventTarget (myHIView), NewEventHandlerUPP (MyDrawEventHandler), Donc voici notre application Cocoa complète : GetEventTypeCount (myHIViewSpec), @implementation MonApplicationQuartz &myHIViewSpec, (void *) myHIView, - (id)initWithFrame:(NSRect)frameRect NULL); { self = [super initWithFrame:frameRect]; Puis il nous reste à implémenter notre handler dans lequel nous pou- return self; vons récupérer la référence à notre HIView grâce à GetEventParameter. } OSStatus MyDrawEventHandler (EventHandlerCallRef myHandler, - (void)drawRect:(NSRect)rect EventRef event, void *userData) { { CGContextRef monContext = [[NSGraphicsContext OSStatus status = noErr; currentContext]graphicsPort]; CGContextRef myContext; CGContextSetRGBFillColor (monContext, 1, 0, 0, 1); HIRect bounds; CGContextFillRect (monContext, CGRectMake (0, 0, 200, 100)); CGContextSetRGBFillColor (monContext, 0, 0, 1, 0.5); status = GetEventParameter (event, CGContextFillEllipseInRect(monContext, CGRectMake(0,0,200,200)); kEventParamCGContextRef, } typeCGContextRef, NULL, @end sizeof (CGContextRef), NULL, C’est minimaliste, mais avec Objective C &myContext); et Cocoa quelques lignes de code et ça require_noerr(status, CantGetGraphicsContext); fonctionne. HIViewGetBounds ((HIViewRef) userData, &bounds); require_noerr(status, CantGetBoundingRectangle); En Carbon CGContextSetRGBFillColor (myContext, 1, 0, 0, 1); Avec Carbon les choses se compliquent CGContextFillRect (myContext, CGRectMake(0, 0, 200, 100 )); car on doit se conformer à un modèle CGContextSetRGBFillColor (myContext, 0, 0, 1, .5); procédural bien moins séduisant que le CGContextFillEllipseInRect(myContext, CGRectMake(0,0,200,200));

FORUM Programmez! dialogue- N°102 et assistance25 NOVEMBRE 2007www.programmez.com 22-27 22/10/2007 16:26 Page 26

Gros Plan MAC

CantGetGraphicsContext: vont permettre de définir les étapes de votre animation vont donc se CantGetBoundingRectangle: trouver entre ces deux valeurs. return status; } monAnim = [[NSAnimation alloc] initWithDuration:5.0 animationCurve: NSAnimationEaseInOut];

[monAnim setFrameRate:24.0]; Et voila! Nous remarquons que le dessin [monAnim setAnimationBlockingMode:NSAnimationNonblocking]; est inversé par rapport à celui obtenu en Cocoa. En effet, le HIView place l’origine [monAnim addProgressMark:progMarks[1]]; en haut à gauche, alors qu’il est norma- [monAnim addProgressMark:progMarks[2.5]]; lement en bas à gauche en Quartz. Pro- [monAnim addProgressMark:progMarks[4]]; blème vite corrigé avec : Pendant le déroulement de l’animation, à chaque fois qu’un marqueur CGContextTranslateCTM (myContext, 0, bounds.size.height); est atteint, le message didReachProgressMark sera envoyé par l’ani- CGContextScaleCTM (myContext, 1.0, -1.0); mation. A vous d’y associer un délégué pour réaliser l’opération souhai- tée pour cette étape. Utiliser le PDF Créer directement le PDF est très simple puisqu’il suffit de manipuler un - (void)animation:(NSAnimation *)animation contexte graphique PDF au lieu du contexte graphique écran traditionnel. didReachProgressMark:(NSAnimationProgress)progress Nous allons donc cette fois-ci peindre directement dans un fichier PDF. { if (animation == monAnim) NSString *monPdf = [NSHomeDirectory() stringByAppendingPath { Component: // Modifier par exemple la taille et la couleur du bouton selon l’étape @"test.pdf"]; de l’animation NSURL *urlDeMonPdf = [NSURL fileURLWithPath: monPdf]; } CGRect rectPdf = CGRectMake(0.0, 0.0, 600.0, 800.0); } CGContextRef mContext = CGPDFContextCreateWithURL((CFURLRef) urlDeMonPdf, &rectPdf, NULL); Ici c’est un usage très basique de l’API d’animation. Généralement on va créer plusieurs classes héritant de NSAnimation qui permettent de Maintenant nous pouvons procéder à notre opération graphique, définir les différentes animations élémentaires. Puis on va combiner comme précédemment, en utilisant ce contexte graphique. ces animations pour en construire de plus complexes. Par exemple on Pour utiliser du PDF dans notre code Quartz c’est beaucoup plus compli- peut déclencher une seconde animation quand la première atteint une qué. S’il s’agit d’afficher par des vignettes des pages du document PDF certaine étape : dans votre application, on peut obtenir une image d’une de ces pages [animSecondaire startWhenAnimation:animPrimaire reachesProgress:2.5]; en utilisant CGDataProviderCreateWithFilename qui nous permettra à partir du CGDataProvided de créer une Image. Par contre, si vous souhaitez manipuler le contenu du PDF, il faut utiliser Conclusion un CGPDFDocument qui s’obtient grâce à CGPDFDocumentCreateWith- Sur le plan programmatique Quartz n’a pas à rougir face à ses concur- Provider. Mais gardez en tête qu’un document PDF est un document fini rents directs. Et il bénéficie d’un retour d’expérience solide grâce à prêt à être imprimé, c'est-à-dire qu’il contient des pages rectangulaires Next (20 ans déjà !) et aux nombreuses applications Mac OS X qui font à taille fixe dans lesquelles vous trouverez du contenu. Si vous cherchez le succès d’Apple (iLife, iPhoto…). Apple donne des leçons d’ergono- à exploiter des templates vectoriels contenant juste votre magnifique mie et de design au reste de l’industrie informatique depuis des décen- bouton en relief, par exemple, vous devez vous pencher plutôt vers la nies, et ce n’est pas prêt de s’arrêter. manipulation d’EPS (Encapsuled Postscript). Cependant, il reste encore un effort à faire pour Apple avant d’atteindre le niveau d’outillage que fournissent Adobe ou Microsoft. Si le dévelop- Faire des animations peur va pouvoir assouvir ses ambitions avec les possibilités surpre- Si les applications Apple sont aussi agréables à utiliser, c’est souvent nantes de Quartz, il va commencer à déchanter lorsqu’il s’agira de grâce aux animations savamment étudiées qui rendent l’interface utili- travailler en étroite collaboration avec le graphiste. On ne dispose pas sateur si naturelle à l’emploi. Ceux qui ont manipulé un iPhone savent aujourd’hui d’outils permettant de construire les éléments facilement de quoi je veux parler. manipulables par le développeur Quartz, comme des styles graphiques Les animations reposent sur l’objet NSAnimation qui va vous permettre ou des story board d’animation. Mais avec l’arrivée du "Core Anima- de définir la vitesse (nombre de mises à jour par seconde), la durée, la tion" inclus dans Leopard, tout peut changer ! dynamique de l’animation (linéaire, accélération puis décélération) et le mode d’interaction avec l’utilisateur. ■ Eric GROISE Une animation démarre à 0.0 pour se terminer à 1.0, les marqueurs qui Responsable produit chez OCTO Technology 0800 667 307

Programmez! - N°102 26 NOVEMBRE 2007 22-27 22/10/2007 16:27 Page 27

NetAdvantage® for ASP.NET Dashboard

WebGrid™ and WebGauge™ in a PDF report

NetAdvantage for ASP.NET 2007 Vol. 3 La boite à outils exceptionnelle pour la conception et le développement de vos interfaces utilisateur.

Exportez en format PDF ou XPS - Notre nouveau Document Exporting Engine vous permet WebGauge are trademarks of Infragistics, Inc. All other or registered the respective property thei Copyright 1996-2007 Infragistics, Inc. All rights reserved. the Infragistics logo and NetAdvantage are registered de fournir des rapports imprimables pour les graphiques et grilles ASP.NET

Des tableaux de bord professionnels - Nos graphiques exceptionnels en 2D et 3D et gauges raffinés pour ASP.NET éliminent le besoin d'une autre solution pour vos graphiques

Intégration améliorée pour Excel® - Nouvelles fonctionnalités Import/Export vous permettent d'exporter des images, des lignes/colonnes fixes, des rangées cachées, formules et headers/footers. Exportez et créez des documents Excel avec le titre du document, auteur et catégorie

Design Once, Style Everywhere - pour vos applications Windows Forms et ASP.NET grâce à NetAdvantage. Créez rapidement et appliquez vos normes à travers les contrôles ou applications

Des applications de haute performance - Nos contrôles ASP.NET & AJAX pour moteur de trademarks of Infragistics, Inc. Application Styling, WebGrid and recherche sont essentiels pour des applications Web 2.0 agiles ou pour les composants r owners. WebPart dans SharePoint®

Pour de plus amples informations: infragistics.com/aspnet [email protected]

0800 667 307

WINDOWS FORMS ASP.NET WPF JSF grids scheduling charting toolbars navigation menus listbars trees tabs explorer bars editors 28-54 22/10/2007 16:27 Page 28

Dossier Rich Internet Application La révolution de l’interface Web ?

Le Web bénéficie enfin d’interfaces dynamiques et proches du Desktop.

Web 2.0 déjà dépassé ? Oui ! Il faut désormais parler de RIA lobalement, tout le monde est d’ac- cord sur ce qu’est une application pour Rich Internet Application. Depuis un peu plus d’un an, G RIA. Une application internet riche. nous assistons à un incroyable buzz autour de cette notion. Quand on parle de RIA, on parle essentielle- ment d’interface. En effet, la RIA a pour focus Mais finalement, à quoi correspond exactement ce terme ? d’offrir une expérience utilisateur, une inter- La question est loin d’être anodine, tant sa définition peut face proche de ce que l’on peut avoir sur le varier d’un éditeur à l’autre. Une chose est certaine, quelle poste de travail. Bref, l’interface RIA se veut aussi riche visuellement et ergonomique que soit la définition, avec les RIA, nous sommes clairement qu’une application Windows, MacOS X. Elle dans une nouvelle génération d’applications web, au-delà est aussi interactive, animée, dynamique. Les sites Web 2 avaient ouvert la voie, tout de ce que l’on peut connaître avec le web 2.0. Dans ce comme Flash, mais RIA va plus loin. C’est grand dossier RIA, nous allons vous donner les clés incontestablement le successeur de la notion techniques et stratégiques pour comprendre et décrypter de " web 2 " même si les fondements de l’ap- plication (en dehors de l’interface) restent cette vague de fond ! web 2. Parfois, on trouve pour RIA la défini-

Programmez! - N°102 28 NOVEMBRE 2007 28-54 22/10/2007 16:28 Page 29

RIA

tion suivante : Rich Interactive ments. Il faudra attendre les pre- Application. Mais fondamen- mières réalisations sérieuses talement, cela ne change pas pour voir comment cela peut se grand-chose. En RIA, on reste comporter. dans le navigateur, l’applica- Comme nous a confié François tion s’exécutant à l’intérieur. Lufeaux, l’idéal sera d’avoir une D’autre part, il nécessite un application " multi modal " ! plug-in compatible avec le navigateur utilisé. Connecté – déconnecté : le réel avenir ? Des plates-formes plus Il y a quelques mois, nous avions ou moins matures beaucoup parlé des applications Ajax web connectées / déconnectées Et le monde se bouscule pour selon la vision de Google, avec avoir droit de cité dans le mar- Google Gears. Il s’agit d’une API ché prometteur de la RIA : Flash / Flex, Silver- nible sous Linux), pour étendre l’universalité que l’on implémente dans son code pour gérer light, JavaFX, et tout simplement Ajax. Si pour de la plate-forme Microsoft. un fonctionnement local lorsque l’application Ajax, les solutions commencent à être À cela s’ajoute la solution de Sun : JavaFX. Si n’est plus connectée au réseau. On peut alors matures, elles demeurent toutefois sous- cette solution 100 % Java paraît intéressante, continuer à travailler, à sauvegarder. Lorsque outillées et le manque de spécifications stan- il faut demeurer prudent à cause du manque le réseau revient, l’application synchronise les dard pour unifier un peu l’ensemble cause un d’outils et surtout d’une trop grande jeunesse. données, les documents. Si cela peut intéres- réel souci, surtout que les frameworks Ajax ne Il faudra voir comment évolue la solution dans ser les applications RIA, cette technique reste manquent pas. " le développeur est un peu les prochains mois. marginale, surtout en dehors d’Ajax. Il faut que noyé, il est difficile de faire un choix " explique ce modèle puisse s’épanouir et montrer les Jean-François Lufeaux (Directeur Marketing RDA : entre indépendance et fusion scénarios d’utilisation. Ideo Technologies). Et malgré les initiatives de Dans le mouvement RIA, les RDA (Rich Desk- type OpenAjax, qui tardent à proposer du top Application) ne sont pas en reste ! WPF de La RIA mobile : oui, mais quand ? concret, la situation ne semble pas vouloir .Net 3.0 a ouvert les hostilités avec XUL / XUL Jusqu’à présent, la RIA se limite principale- bouger. " On observe une lente montée en Runner et Adobe Air. Nous sommes là dans un ment à nos postes de travail. Mais les éditeurs puissance des outils, les éditeurs qui suppor- contexte hors navigateur, s’appuyant sur un travaillent activement à fournir une déclinaison tent Ajax manquent d’universalité. Ajax n’est runtime pour s’exécuter. Bien plus puissantes mobile de leurs plates-formes RIA (ne parlons pas porté par de grands éditeurs, la commu- que les applications RIA, les applications RDA même pas de RDA, tout du moins à court nauté, éclatée, manque par conséquent de autorisent une exploitation des technologies terme). La mobilité pose un problème de sup- cohésion " remarque Stéphane Moreau (ingé- locales, tout en minimisant leur taille. port universel à cause de la multiplicité des nieur d’études chez Micropole-Univers). Cependant, il nous paraît difficile de garder modèles de téléphones, de smartphone, de isolé RIA et RDA. La logique voudrait qu’il y ait PDA, de systèmes. Adobe travaille à rendre le Adobe, Microsoft et Sun une fusion entre les deux plates-formes. plus universel son Flash Lite afin de pouvoir La seule plate-forme RIA aujourd’hui éprouvée D’ores et déjà le mouvement est en cours. utiliser une application Flex sans ce soucier du est Flex d’Adobe. Mais là encore, sa montée Ainsi, une application Flex peut s’exécuter sur modèle, du système. " Sur le mobile, c’est un en puissance a été longue. C’est seulement Air. Silverlight 1.1 avec le support de .Net offri- challenge. On doit créer une couche d’abstrac- avec la version 2 que Flex a pu montrer sa véri- ra une meilleure intégration avec la partie tion, car ce n’est pas homogène. L’objectif est table puissance et la v3, en cours de dévelop- desktop. Cependant, il n’y a pas de miracle à d’arriver à la puissance du player Flash 9 ! " pement, devrait asseoir la technologie attendre. Le contexte d’exécution étant diffé- selon Michael Chaize. Aucun délai annoncé d’Adobe. Surtout depuis l’apparition de la rent, les fonctionnalités disponibles diffèrent. mais l’espoir est d’y arriver à court terme (6-8 plate-forme RDA, Air. Cependant, l’arrivée de " C’est un prolongement naturel, même si on mois). Là se pose le problème de l’interface et Silverlight de Microsoft, en version finale 1.0 sort du navigateur. On développe en Flex, le de son adaptation, de la navigation, des res- depuis cet été, marque le début d’une guerre code peut être réutilisé dans l’environnement sources nécessaires. Pourra-t-on embarquer qui promet d’être implacable. Si Flex profite de Air. Il faut adapter son code, l’étendre. Sinon dans une même application le code et l’interfa- l’omniprésence du player Flash, Silverlight arri- cela n’aura aucun intérêt ! Mais on peut ce pour le navigateur, le mobile et le desktop ? ve avec de nouveaux outils Web et de design n’avoir qu’un seul code pour les deux plates- Microsoft rencontre aussi le même problème et le savoir-faire de Microsoft. Mais ce sera formes ", précise Michael Chaize d’Adobe. Et avec son Silverlight Mobile, toujours en déve- surtout avec la version 1.1, et le support de oui, pourquoi exécuter une application RIA en loppement. JavaFX prend bien en compte le .Net et des langages dynamiques, que Silver- RDA si cela n’apporte aucun avantage fonc- mobile mais il est un acteur marginal à l’heure light va véritablement affronter Flex. D’autre tionnel ? Il faut donc coder pour chaque cible actuel. part, il faudra attendre la disponibilité du pro- d’exécution et embarquer dans une seule jet Moonlight (un Silverlight open source dispo- application le code pour les deux environne- ■ François Tonic

Programmez! - N°102 29 NOVEMBRE 2007 28-54 22/10/2007 16:29 Page 30

Dossier RIA Choisir une solution RIA Comme l’indique un article apparu sur Ajaxian(1) et datant déjà de plus de six mois, le panel de solutions permettant de réaliser des applications AJAX/RIA est pléthorique : à l’époque, plus de 210 outils étaient proposés, soit 80 de plus que l’année précédente. Et le phénomène n’est pas prêt de s’arrêter.

onfronté à un tel bouillon de culture, le chef de projet, le directeur de pro- C jet, le responsable informatique sont désemparés : comment choisir LA solution qui convient le mieux, quels sont les critères qui doivent guider leur choix, quels sont les risques qu’ils prennent.

Se reconnaître dans le foisonnement RIA Où en est le RIA aujourd’hui ? Pour simplifier, nous pouvons considérer qu’il existe deux branches principales : AJAX et les technologies " applet-like " : • AJAX est la branche la plus prospère, elle repose sur les capacités intrinsèques des navigateurs du marché : langage JavaScript, communication http asynchrone. Ce principe fondateur se décline sur le marché en une myriade de solutions et d’architectures. Nous y reviendrons. • Les technologies " applet-like " sont celles qui utilisent le navigateur comme hôte d’un works JavaScript (Dojo, Ext, YahooUI, lopper. C’est ce que nous verrons dans la système qui vient s’y incruster, mais qui lui Script.aculo.us/ prototype) peut entrer dans deuxième partie de cet article. est en fait exogène. Il s’agit donc d’une cette stratégie. Le Google Web Toolkit pré- solution de type " client lourd " qui avance sente une solution originale – et efficace – Les technologies " applet-like " masquée : les capacités du navigateur sont pour construire des applications de ce type. Historiquement, le premier système de ce type peu ou pas utilisées. • L’autre stratégie consiste à confier une par- est l’applet Java. Flash en représente le tie importante de la logique IHM au serveur. meilleur aboutissement (et aujourd’hui le plus Comprendre AJAX La partie cliente, généralement constituée utilisé). Microsoft avec Silverlight complète AJAX n’est pas un produit, c’est une idée. Une d’une armature HTML enrichie de nombreux l’offre. JavaFX - comme cela est expliqué dans idée qui s’incarne aujourd’hui de façon extrê- réflexes JavaScript, n’assure que des fonc- un autre article de ce numéro – n’est qu’une mement variée. On peut néanmoins dégager tions d’animation avancée (menus, arbres, manière simplifiée de produire des applets deux grandes stratégies : glisser-déposer). Elle contient peu ou pas Java. • Une stratégie de type essentiellement d’intelligence fonctionnelle. Cette stratégie Bien que les plates-formes techniques soient " client/serveur ". La partie cliente est marie généralement AJAX avec un framework différentes (Java, .NET, flash), les offres implémentée en JavaScript. La partie ser- Web classique comme ASP.NET, Struts, JSF, " applet-like " présentent beaucoup de simili- veur utilise une des plates-formes les plus PHP, RubyOnRails. C’est pourquoi j’ai appelé tudes : courantes du marché : Java, .NET, PHP, etc. cette stratégie : " AJAX hybride " dans la • Elles utilisent toutes un système déclaratif Toute l’IHM (présentation, logique) est suite de cet article. de construction d’interface (mxml pour hébergée par le navigateur. Le serveur n’exé- Il n’existe pas de meilleure stratégie AJAX : flex/flash, xaml pour Silverlight, JSON-like cute que les points de service dont le client l’AJAX total n’est pas intrinsèquement supé- pour JavaFX). a besoin. Il s’agit donc d’une stratégie rieur ou inférieur à l’AJAX hybride, tout dépend • Elles permettent toutes de lier des proprié- " AJAX Total ". L’utilisation directe de frame- de critères spécifiques à l’application à déve- tés d’objets avec les propriétés des widgets,

(1) http://ajaxian.com/archives/210-ajax-frameworks-and-counting

Programmez! - N°102 30 NOVEMBRE 2007 28-54 22/10/2007 16:29 Page 31

SweetDEV RIA 2.2 Piochez dans nos tags Ajax pour développer vos interfaces Web 2.0!

SweetDEV RIA est une bibliothèque de composants Open Source prêts à l’emploi, dédiée au développement des applications Web “riches” sur les plateformes J2EE.

- Tags lib SweetDEV RIA + Datagrid Glisser/déplacer de colonnes, tri multi- + Treeview colonnes, cases à cocher, pagination, scrolling horizontal,contenus multiples + Tabpanel dans les cellules, gestion de préférences...

+ Window docking Gérer des composants “Window” au sein d’une structure “Layout” pour définir des Window + IHM comparables à celles de Netvibes™ ou iGoogle™. + Calendar

+ Menu Les + de SweetDEV RIA :

+ Combobox • Un projet Open Source • Un support technique en France + Collapse content • Le développement de composants sur mesure • Une expertise en architecture et ergonomie + Excel export • Des formations + Zone

Open Source Ajax Web 2.0 J2EE Licence Apache 2

Téléchargez SweetDEV RIA sur : www.ideotechnologies.com 28-54 22/10/2007 16:30 Page 32

Dossier

solutions RIA offrent des mécanismes per- mettant d’éviter les deux problèmes majeurs de la sécurité RIA : le " XSS " et le " SQL Injection ". D’autres n’offrent rien.

Faire un choix pertinent Choisir une solution RIA c’est donc autant connaître les avantages et inconvénients des diverses solutions proposées par le marché que de connaître les priorités qu’il faut consi- dérer et qui sont elles, très spécifiques au pro- jet ou à l’entreprise. Dans cet article nous allons considérer quelques solutions, parmi les plus connues : • Les frameworks JavaScript ont comme avan- tage de proposer une liberté maximale au développeur qui veut virtuellement faire ce qu’il veut. Cette liberté se paie au prix fort : l’outillage reste rustique, ubiquité, robustes- se et sécurité sont entièrement à sa charge. • JavaServer Faces (JSF) avec une extension AJAX (comme a4jsf ou ICEFaces) est la solu- tion reine de type " AJAX hybride " dans le la synchronisation étant ensuite automati- fonctions d’ergonomie très avancées ou/et monde Java. Elle possède tous les avan- quement assurée par le système. très originales. tages et les inconvénients des solutions • Elles offrent toutes l’intégration des appels • La productivité. Le développement RIA n’est hybrides : productivité (avec Seam), ubiqui- à un serveur via des Web Services. pas forcément plus coûteux qu’un dévelop- té, sécurité et robustesse. Les aspects ergo- Malgré l’hétérogénéité des plates-formes tech- pement Web classique : certaines solutions nomie et performances sont moins niques sous-jacentes, ces similitudes font que " AJAX hybride " en particulier peuvent profi- favorisés. La prise en compte de l’existant les réflexes acquis sur une plate-forme peu- ter d’un outillage ou de frameworks remar- n’a de sens que s’il est JSF. vent être reconduits sur une autre. Les cas quables (Visual Studio, Seam). • Le Google Web Toolkit est une solution de d’utilisation et les architectures adaptées sont • La performance. Les solutions " AJAX hybri- type " AJAX total " qui favorise les aspects les mêmes. Un développeur Flex/Flash peut de " ont tendance à multiplier les échanges performances, ubiquité, robustesse et sécu- devenir, par exemple, un développeur Silver- avec le serveur. Les solutions " AJAX total " rité grâce à un ingénieux système de déve- light ou JavaFX compétent après une phase ou " applet-like " exigent, elles, davantage loppement en Java (et non en JavaScript), d’apprentissage réduite. du navigateur client, qui n’est pas toujours puis de compilation en JavaScript. La princi- capable de faire face. pale limite de cette solution est la relative Les vraies questions • La prise en compte de l’existant. La techno- complexité de l’intégration client/serveur. La Avant de choisir une solution, il est indispen- logie déjà utilisée peut induire quelle exten- pérennité paraît garantie. sable de savoir de quoi nous avons vraiment sion AJAX doit être utilisée. Autre sujet : la • ASP.NET AJAX présente des caractéris- besoin et quelles sont nos priorités. Selon le réutilisation des compétences disponibles. Il tiques proches de JSF avec une extension type d’application, l’audience visée, le modèle est plus facile de passer de ASP.NET à AJAX : C’est l’extension naturelle d’ASP.NET économique, ces critères changent. Or ce sont ASP.NET AJAX, que d’utiliser le Google Web WebForms (dont il n’est en fait qu’une exten- eux qui conditionnent la validité d’un choix. Fai- Toolkit. sion). C’est une solution remarquablement sons un tour rapide de ces critères : • L’ubiquité. C’est la capacité d’une solution à outillée par Visual Studio. La prise en comp- • La pérennité. Si quelques solutions se déga- s’adapter aux différents environnements te d’un existant ASP.NET est très aisée. gent aujourd’hui du lot, il est encore bien trop clients : les principaux navigateurs du mar- • Flex est la solution de type " applet like " la tôt pour savoir qui finalement l’emportera. ché ou les divers systèmes d’exploitation. plus populaire. Elle en a tous les avantages, Même les produits soutenus par les plus Les surprises sont fréquentes. qui sont les mêmes que ceux d’une architec- grands ne sont pas à l’abri des caprices du • La robustesse. La fiabilité d’un logiciel repo- ture " AJAX total ". Le seul point faible est marché. se surtout sur la qualité de son code. Mais l’intégration client/serveur, nettement • L’ergonomie. Les solutions " AJAX hybride " cette qualité dépend aussi des facilités moins pratique que ce que propose permettent de fluidifier les manipulations uti- offertes par la plate-forme RIA utilisée. JSF/Seam ou ASP.NET AJAX. lisateur courantes (menus, onglets saisie • La sécurité. Sur Internet, c’est une question • Silverlight est la solution " applet like " du assistée, arbres, tables de données), les essentielle. Dans un intranet, la question monde .NET. Elle reprend le principe de solutions " AJAX Total " offrent en plus des est généralement moins sensible. Certaines construction déclarative de l’IHM popularisé par

Programmez! - N°102 32 NOVEMBRE 2007 28-54 22/10/2007 16:30 Page 33

RIA

Flex. L’ubiquité est encore assez limitée. L’ou- Tableau 1 tillage, avec Visual Studio, reste le point fort. • JavaFX est la solution " applet like " du monde Java. Les avantages et limites sont ceux rencontrés pour Silverlight, avec moins de crédibilité et de maturité. La correspondance entre ces différentes solu- tions et les critères décrits plus haut est don- née dans le tableau n°1. Définissons maintenant quelques catégories d’applications types, parmi celles qui sont le plus souvent rencontrées : • L’extension d’une application Web existan- te de manipulation de données (saisie, resti- tution, statistiques). Il s’agit d’une application classique que l’on veut faire évo- luer (nouvelles fonctionnalités) ou dont on veut améliorer partiellement l’ergonomie (quelques écrans critiques). La plate-forme technique existe et cela contraint forcément le choix de la solution RIA qui doit être gref- Tableau 2 fée (ASP.NET AJAX pour une application .NET par exemple). Une réponse " AJAX hybride " est adaptée. • Le développement complet d’une application RIA de manipulation de données pour un environnement particulier (une entreprise par exemple). Les besoins ergonomiques sont généralement très classiques, supportés par n’importe quelle solution RIA. Un niveau acceptable de performance suffit : le nombre d’utilisateurs est limité. La plate-forme clien- te étant connue, l’ubiquité n’est pas indis- pensable. L’aspect le plus crucial est souvent la productivité car l’application est constituée d’un nombre important d’écrans. Ici aussi, une solution " AJAX hybride " a plus de chance de donner satisfaction. • Le développement complet d’un progiciel de des internautes, dont on ne maîtrise ni le La correspondance entre les besoins de ces dif- manipulation de données. Il s’agit donc d’un nombre, ni les plates-formes (forcément férents types d’applications et les critères besoin spécifique aux éditeurs. Ce type d’ap- variées). Nous sommes sur Internet : la décrits plus haut est donnée dans le tableau n°2. plication est une variante du précédent avec sécurité doit être traitée avec soin. Une solu- des contraintes particulières : la plate-forme tion " applet-like " est indiquée. Nous pou- Conclusion cliente n’étant pas connue, l’ubiquité rede- vons aussi envisager une solution de type Une étude du marché des solutions RIA doit vient une priorité. Le nombre d’utilisateurs " AJAX Total ". être mise en perspective par rapport à des pouvant être extrêmement variable, l’aspect • La création d’un portail Web 2.0, c'est-à-dire besoins pour être pertinente. On découvre performance doit être considéré avec soin. un site offrant des outils dont l’ergonomie est alors que LA solution se hissant au-dessus de Dans ce cas, tous types de solution RIA doi- très avancée, originale, utilisant fréquem- toutes les autres n’existe pas (encore ?). Cer- vent être étudiés. ment des images, des graphismes et des tains outils gagnent aujourd’hui en popularité • Le rajout sur un portail Web classique de mécanismes comme le glisser-déposer. L’as- et rien n’interdit de penser que les limites quelques mécanismes RIA. Il s’agit donc de pect ergonomique devient primordial. Ubiquité, qu’ils présentent encore ne seront pas dépas- faire un lifting d’un portail existant en ren- performances et sécurité gardent leur carac- sées demain. Mais nous n’en sommes pas là dant sa manipulation plus fluide. La prise en tère essentiel pour les raisons décrites dans aujourd’hui. compte de l’existant est essentielle. Le pro- le cas d’un portail Web classique. Une solu- blème des performances et l’ubiquité sont tion " AJAX Total " - ou pourquoi pas " Applet ■ Henri DARMET très aiguës : la population visée est celle like " paraît la plus pertinente. Directeur Technique - Objet Direct / Homsys Group

Recevez la NewsletterProgrammez! www.programmez.com/inscription.php- N°102 33 NOVEMBRE 2007 28-54 22/10/2007 16:32 Page 34

Dossier RIA Les 7 technologies en présence Les Rich Internet Applications sont apparues dès 2002, lorsque Macromedia a publié un papier mettant en avant cette évolution d’applications Web. Depuis, certaines technologies sont arrivées, d’autres se sont adaptées pour permettre de proposer une réelle innovation sur Internet.

omment reconnaître une RIA ? Elles sont parfois difficiles à cerner, mais C proposent tout de même les caracté- ristiques suivantes : - Une interface dite riche : forcément plus ergo- nomique, et proposant des contrôles plus avancés. - Un contenu média plus poussé : de la vidéo, de l’audio, de la 2D et même de la 3D. - Des technologies centrées sur l’interface : en séparant la description de cette dernière (via une grammaire XML la plupart du temps) et en offrant les outils graphiques pour l’alimenter. Ainsi, au fur et à mesure des années et notam- ment grâce à l’explosion du Web 2.0, les acteurs se sont positionnés pour proposer chacun leur technologie permettant de créer des RIA. À noter, trois des principaux acteurs du Web présents sur ce domaine : Microsoft l’omniprésent mais également le dernier arrivé ; Adobe, profitant de l’expertise de Macromedia ; et Mozilla, qui propose son alternative libre et respectueuse des standards. Découvrons donc certaines de ces technologies.

Adobe Flex Adobe Flex est un ensemble d'outils incluant un framework de développement d'applica- tions en Flash, c’est-à-dire que tout ce qui est fait avec Flex peut l’être avec Flash, mais plus rapidement. Cette technologie est basée sur un langage XML de description : le MXML (pour Macromedia XML). Toutes les actions représentant le comportement de l’ap- plication sont décrites grâce au langage orien- té objet, l’ActionScript 3. Le code est ensuite compilé et un swf est généré. Flex est composé de plusieurs éléments : le comporte de nombreux points forts : le déve- définis, permettant la création d’interface SDK qui est en fait le compilateur, complète- loppement est très rapide grâce à son IDE et avec une liberté totale, et donc avec richesse. ment gratuit et open source ; Flex Builder, l'en- son système WYSIWYG de drag&drop des vironnement de développement basé sur composants Flash, comme les accordéons ou Silverlight Eclipse, disponible en plug-in ou en version les sliders, qui permettent d'enrichir les possi- Silverlight est l'arme RIA de stand-alone ; Flex Charting pour produire des bilités. L’Action Script 3, langage objet à mi- Microsoft. Cette technologie a graphiques et LiveCycle Data Services qui chemin entre le Java et le C# offre de été présentée lors du MIX 07 à forme un ensemble de briques fournissant nombreuses possibilités et une extension Las Vegas. Certains le qualifient de Flash killer divers services vers le serveur. Cette solution complète de l'ensemble des composants pré- tant ses qualités ont impressionné, notam-

Programmez! - N°102 34 NOVEMBRE 2007 28-54 22/10/2007 16:32 Page 35

Perforce Gestion rapide de configuration logicielle (GCL)

La fonctionalité Folder Diff, un atout de productivité du système de GCL Perforce.

Folder Diff est un outil interactif d’affichage en juxtaposition permettant de comparer l’état de deux groupes de fichiers.

À l’aide de Folder Diff, on peut rapidement déterminer les différences entre les fichiers situés dans des dossiers, des branches, des étiquettes ou sur votre disque local. Cette fonction est particulièrement utile lorsque vous devez réaliser des fusions de codes complexes.

De plus, si vous travaillez deconnecter, Folder Diff facilite la synchronisation des données avec celles du serveur Perforce lorsque Folder Diff de Perforce vous vous connectez de nouveau au réseau.

Folder Diff n’est qu’un des nombreux atouts de productivité offerts par le système de GCL Perforce.

Téléchargez sans conditions une copie gratuite de Perforce sur www.perforce.com. Vous bénéficiez d’une assistance technique gratuite pendant votre période d’évaluation. 28-54 22/10/2007 16:33 Page 36

Dossier

ment dans le domaine de la vidéo. Silverlight est un plug-in multi système d'exploitation (Windows, Mac OS X) et multi navigateur (IE, Firefox, Safari); permettant d'offrir de nou- velles expériences aux utilisateurs. Microsoft ne cesse de rappeler que leur offre permet de créer des expériences, terme répété et assez explicite. Le développement avec Silverlight peut se résumer en trois points : tout d'abord, la des- cription de l'interface qui est écrite en XAML, une grammaire XML comme on en trouve main- tenant dans quasiment chaque technologie d'interface. Ensuite, et c'est certainement l'un des points forts de Silverlight, une gamme d'outils pour créer des applications riches : Microsoft Expression et Visual Studio. Ces outils permettent donc de facilement créer des applications, mais surtout de personnaliser les interfaces pour offrir de vraies expériences adaptées. Le troisième point concerne la niveau du taux de pénétration. À noter que la mettant l’exécution de code Java sur des sup- couche plus applicative et métier d'une appli- plate-forme mobile est toujours en développe- ports mobiles tels que les PDA. Le mobile cation. Il faut savoir que Silverlight 1.1 (version ment. étant l’un des marchés les plus prometteurs, alpha) intègre la DLR (Dynamic Language cet avancement est forcément très straté- Runtime), c’est-à-dire une machine virtuelle JavaFX gique. JavaFX Script se rapproche plus des .NET dans laquelle on peut utiliser des lan- JavaFX est la RIA de Sun. En bénéficiant d’une technologies RIA précédemment citées, du fait gages dynamiques tels que Ruby ou Python, ce large communauté de développeurs grâce à qu’il s’agit d’un langage de script pouvant qui permet ainsi de créer des applications utili- Java, Sun a voulu les conserver et les emme- décrire une interface.Il y a une grosse diffé- sables avec Silverlight. ner vers un développement plus simple d’inter- rence : il ne s’agit pas là d’une grammaire Les points forts de Silverlight sont nombreux. faces, ce qui n’était pas le plus évident XML, mais d’un langage plus déclaratif décri- Il y a un gros potentiel dans ce petit plug-in qui auparavant. Ainsi JavaFX (anciennement vant tout de même une interface, statique- permet par exemple de diffuser de la vidéo nommé projet F3) a vu le jour : il s’agit d’une ment typé et compilé pour la plate-forme Java. Haute Définition. De plus, Microsoft est dans suite de produits et de technologies autour de Bien que cette séparation soit très intéressan- une phase d'ouverture et le fait que Silverlight Java pour permettre aux développeurs exis- te pour toute personne souhaitant facilement fonctionne sur Mac et sur Linux (via le projet tants de faire leurs propres applications créer et maintenir son interface, les résultats Moonlight) est significatif. Toutefois le plug-in riches. Il en existe pour le moment deux de cette technologie, trop récente pour être devra se faire une place dans un domaine déjà briques : JavaFX Mobile et JavaFX Script. jugée, sont encore peu visibles. écrasé par le Flash Player, notamment au JavaFX Mobile est en fait une plate-forme per- OpenLaszlo Tableau récapitulatif OpenLaszlo est une plate-forme de développe- Flex Silverlight OpenLaszlo JavaFX SOFTEAM Formation 2007 : ment d'applications riches, en open source. NOS BEST SELLERS Langages ActionScript 3 Javascript, Ruby, LZX Ses applications sont développées via une MXML Perl, etc. XAML Javascript JavaFX Script solution qui produit, à partir du même code Outils Flex Builder Visual Studio Expression Editeur texte Eclipse Creative Suite 3 (Windows uniquement) NetBeans source, une application en DHTML (HTML, CSS Environnement Flash Player Silverlight Flash Player et Javascript) ou Flash. d'exécution moteur HTML Java Comme de nombreuses technologies riches, Plates-formes Windows Windows Windows Windows le principe d'OpenLaszlo est de décrire des supportées Mac OS X Mac OS X Mac OS X Mac OS X interfaces via un langage basé sur une gram- Linux Linux Linux Linux maire XML, appelé le LZX, et un langage de Open source Oui, SDK uniquement Non Oui Oui, licence GNU/GPL script pour décrire les actions et événements, Version actuelle Flex 2.0.1, Flex 3 bêta 2 Silverlight 1.0, OpenLaszlo 4.0.5 N.A. Silverlight 1.1 alpha en l’occurrence le Javascript. Le serveur Lasz- Tarifs (TTC) SDK gratuit Expression Studio lo peut être utilisé pour compiler directement Flex Builder 2 : à partir (4 logiciels) : 799€ Gratuit Gratuit le code et fournir une application dynamique- Q i & 4499 de 537€, réduction car Expression (à l’unité) : ment. Ce serveur est basé sur la technologie sortie prochaine de Flex 3 de 399€ à 699€ Visual Studio : à partir Java. Tout cela présente certains avantages, de 305€ HT comme la non-dépendance à un système d'ex-

Programmez! - N°102 36 NOVEMBRE 2007 28-54 22/10/2007 16:33 Page 37

RIA

ploitation. Il n'existe pas réellement d'outil évidemment utilisable via Eclipse. Les outils des calendriers, etc.) vers le bureau. En se pour développer en LZX. Le code source peut graphiques utilisés pour ces RIA représentent basant sur des extensions de ces mêmes donc être écrit avec votre éditeur de textes également un certain coût : difficile toutefois technologies, les RIA proposent donc de favori, puis compilé avec le SDK d'OpenLaszlo de les compter dans la mesure où ils peuvent déployer vos applications directement sur disponible gratuitement. Il possède plusieurs servir pour d’autres tâches (on pense par votre bureau, en faisant abstraction du naviga- atouts : multi plate-forme et simple de prise en exemple à Photoshop). Il existe bien évidem- teur. Tout cela permet forcément de profiter de main grâce à une grammaire XML. Les applica- ment des formations diverses pour apprendre plus de puissance pour les applications sans tions créées ont une vraie richesse et l'on ces technologies, données par des orga- pour autant s’affranchir des avantages de retrouve tous les nouveaux comportements : nismes agréés pour la plupart. Les tarifs sont l’Internet. Ce qui va nous amener à parler des drag'n'drop, menus déroulants, effets, etc. vraiment variables, et des formations d’une RDA, pour Rich Desktop Applications. Depuis sa version 4, OpenLaszlo semblerait semaine environ sont proposées. Elles per- vouloir s'ouvrir vers d'autres plates-formes mettent une bonne prise en main des Les plates-formes comme les mobiles et en ne proposant pas concepts importants. Il faut savoir que la cour- de RDA (Rich Desktop seulement une compilation en Flash mais be d’apprentissage est plutôt rapide pour Application) aussi en DHTML. Le coût de développement toute personne ayant un minimum de bagage Adobe Air d’une RIA est bien évidemment variable en en HTML et/ou objet, de par l’utilisation d’une Air est assez difficile à cerner à première vue. fonction d’un très grand nombre de para- grammaire XML pour décrire l’interface et de Techniquement, il s'agit d'un environnement mètres. Néanmoins, il est toujours possible de langages objets pour aller plus loin (l’Action d'exécution multi plate-forme. Pour faire plus mettre en avant certains points. En premier, Script se rapprochant par exemple du Java). simple, il s'agit en fait d'un lecteur universel per- les technologies pour réaliser ce type d’appli- On constate donc que les technologies devien- mettant donc de lire du Flash, de l'HTML et des cations sont gratuites, ce sont les outils de nent de plus en plus nombreuses et surtout documents PDF à travers une application exécu- développement qui peuvent être payants. matures. Nous n’avons pas parlé de toutes les table sur Windows comme sur Mac ou Linux. Leurs prix sont très variables, en fonction des technologies existantes, mais il faut savoir Encore en développement, Air est disponible sur nombreuses offres proposées par Adobe et qu’il y a de plus en plus de possibilités. Cette le lab d'Adobe, pour une sortie programmée Microsoft. Concernant OpenLaszlo, il n’existe évolution se traduit notamment par un nou- début 2008. La principale différence avec un pas d’IDE officiel, d’où cette absence de prix. veau phénomène : le désir de déporter les simple Flash Player est que les applications Air JavaFX se basant sur du Java, est donc bien applications Internet (comme des clients mail, ne sont pas lues à l'intérieur même d'un naviga-

SOA est devenu en peu de temps le mot clé Soyez prêts des développements logiciels. SOA n’est toutefois qu’une nouvelle façon de faire qui s’appuie sur un pour les nouvelles ensemble de technologies existantes : UML, J2EE, .Net, XML, etc. Maîtriser SOA implique ainsi de maîtriser ces technologies pour les associer efficacement au sein d’une nouvelle approche.

SOFTEAM, forte de son expérience en Méthodologie, Architecture et Développement, architectures SOA! a construit un cursus complet de formation SOA qui vous permet de débuter dès les phases amont, de poursuivre en architecture, et d’aller jusqu’à la réalisation dans le langage de votre choix. Cartographie Méthodologie SOFTEAM Formation 2007 : SELLERS Urbanisation pour SOA NOS BEST BPM Méthodologie UML pour la maîtrise d’ouvrage 2 j Portail Analyse et conception avec UML 4 j Architecture SOA Méthodologie pour SOA 2 j EAI UML SOA SOA Architecture SOA 2 j SOA SOA Développement de Web Services en Java 3 j XML Architecture SOA Développement de Web Services en C# 3 j Architecture et intégration : la synthèse 3 j XML et Web Services Patterns Programmation orientée objet avec Java 4 j WebServices WebServices Développement d’applications JEE 5 5 j Frameworks J2EE en J2EE Développement d’applications JEE 5 Front End 4 j .NET Développement d’applications JEE 5 Back End avec EJB 3 3 j WebServices Maîtrise du framework (Struts / JSF / Spring) 3 j en .Net Développement d’applications .NET / C# 4 j Quinte&sens • 4499 Quinte&sens

Calendrier complet Tél. : 01 53 96 84 00 - Fax : 01 53 96 84 01 et inscriptions en ligne Paris : 21 avenue Victor Hugo - 75016 www.softeam.fr Rennes - Nantes - Sophia Antipolis 28-54 22/10/2007 16:34 Page 38

Dossier RIA

teur mais directement sur votre bureau, choix de la technologie lorsqu’il s’agit de tout en conservant l'avantage d'être multi développer une application riche. Il faut plate-forme. On pourrait donc croire qu'Air bien savoir tout d’abord qu’il n’y a pas est un nouveau navigateur, plus orienté de solution idéale, mais uniquement sur Flash. Que nenni ! L'environnement des avantages pour certaines d’entre d'exécution peut-être intégré à même elles en fonction de nombreux para- l'application, et donc il n'y a rien d'autre à mètres. Ainsi, les applications Flex pour- télécharger que l'application en elle- ront toucher une cible large, via le taux même. Elle offrira également de nom- de pénétration du Flash Player 9 (plus breux autres avantages, au-delà de ceux de 93%), alors que Silverlight concerne que propose déjà Flash, comme une inter- plutôt certains marchés de niches, du action avec les fichiers, une intégration fait de son plug-in encore frais et donc native au système d’exploitation, l’embarque- XUL/XULRunner peu déployé sur Internet. Open Laszlo est une ment d’une base de données (SQLite), etc. Au XUL est un langage de description d'interfaces bonne alternative de par sa double capacité à niveau du développement, les outils seront exac- graphiques, basé sur le XML. Couplé avec le produire du Flash et du DHTML : néanmoins, tement les mêmes que ceux utilisés pour déve- XULRunner, environnement d’exécution multi sa communauté moins importante et l’absen- lopper des applications Flex : une syntaxe plate-forme, il forme un couple permettant de ce d’un environnement de développement MXML, le langage Action Script 3, LiveCycle Data créer des RDA. C'est un projet mené par la fon- solide peuvent en éloigner certains. À noter Services, etc. Les seuls ajouts seront donc des dation Mozilla. XUL est donc un langage de que chaque acteur a bien compris l’importan- composants centrés sur les avantages cités ci- description d'interface, utilisé par exemple ce de l’interopérabilité entre les OS et les dessus et des extensions à Flex. La lecture du pour décrire Firefox. Il est très respectueux des navigateurs, et Microsoft proposera donc Sil- HTML se fait grâce au moteur de rendu de Safari : standards W3C et bien évidemment open sour- verlight sur les trois principales plates-formes : WebKit. En déportant les applications Internet ce. Le XUL est donc un fichier XML interprété Windows, Mac OS et Linux (via Moonlight). Le sur le bureau, Adobe propose aux développeurs par le moteur de rendu : XULRunner. Le langa- taux d’apprentissage peut également devenir Web d’exprimer tout leur potentiel et leur créativi- ge d'interaction utilisé derrière XUL est le un élément important au moment du choix : té pour créer des applications plus puissantes et Javascript. Un simple éditeur de texte suffit à en permettant aux développeurs de réutiliser avec un autre objectif. Pas encore sorti en ver- écrire les fichiers XUL qui ne sont que du XML. des langages déjà connus, Silverlight aura une sion définitive, Air se fait déjà remarquer par des Malheureusement, il n’existe pas de réel envi- courbe d’apprentissage forcément plus rapide applications comme celle d’eBay. ronnement de développement (malgré que des développeurs Flex qui devront quelques essais, notamment basés sur Eclip- apprendre le langage ActionScript, auparavant WPF se). C’est l’un des points faibles pour ce pro- destiné aux spécialistes de Flash. Presentation Foundation (WPF) est la jet, sur lequel Mozilla ne peut consacrer pourrait également prendre le dessus pour nouvelle couche présentation de Windows. beaucoup d’effectif, préférant se concentrer ses capacités à facilement encoder et mettre WPF est en version finale depuis fin 2006, en sur le développement de Firefox. XUL produit en ligne des vidéos de haute définition, ce qui même temps que Windows Vista. L'intérêt de des interfaces graphiques très complètes a valu une belle publicité à Silverlight lors de WPF est de séparer toute la partie interface du comme on peut le voir avec Joost, permettant sa présentation en mai dernier. À l’heure reste de l’application. Microsoft parle d'expé- de regarder la TV via Internet ou SongBird, un actuelle, Adobe a pris toutefois une avance rience utilisateur : proposer des outils simples lecteur multimédia nouvelle génération à la non négligeable du fait de son expérience à utiliser, mettant en relation la complexité des iTunes. Entièrement gratuit et soutenu par la dans les domaines graphiques (Flash, Photo- logiques métiers et l'ergonomie désirée par fondation Mozilla, XUL permet de créer des shop, Dreamweaver, etc.) alors que Microsoft les designers. Partie intégrante de .NET 3.0, clients riches déjà très utilisés. Il propose de vient seulement d’arriver sur ce domaine. La WPF nécessite ce framework pour fonctionner. nombreux avantages, mais soulève tout de même remarque pourrait être faite pour Sun Microsoft propose ainsi de créer des applica- même certaines interrogations : XUL arrivera-t- qui arrive avec une solution relativement tions riches de bureau (RDA). Elles ne sont dis- il à sortir son épingle du jeu chez Mozilla qui se jeune. Bien que les applications riches (Inter- ponibles que sur la plate-forme Windows. Les concentre sur son produit phare : Firefox ? net ou de bureau) soient encore récentes, la outils utilisés pour développer ce genre d’ap- vitesse d’évolution d’Internet force les déve- plications sont les mêmes que Silverlight : Peut-on choisir ? loppeurs et les décideurs à s’intéresser à ces Microsoft Expression et Visual Studio. Les Grâce au désir croissant des utilisateurs technologies qui feront certainement partie points forts de WPF sont nombreux. Il profite d’être toujours connectés, sont apparues ces de l’avenir des applications. de la diffusion de Vista pour se faire la part applications hybrides, à cheval entre Internet belle parmi les prochaines applications de et les applications plus classiques de votre ■ Fabien Deshayes bureau. Qui plus est, WPF bénéficie ainsi de la bureau. Leur avenir reste confus mais le fait Consultant RIA pour la société Tangane beauté graphique de DirectX (pour la 3D par de proposer à des développeurs Web de créer (www.tangane.com) et rédacteur du blog " Du exemple), du framework .NET déjà très utilisé des applications plus puissantes et hors du client riche à un Internet riche " et du langage objet C# (entre autres), c’est-à- navigateur attirera forcément la curiosité. Bien (www.fdeshayes.net). dire des valeurs sûres. évidemment, on peut se poser la question du [email protected]

Programmez! - N°102 38 NOVEMBRE 2007

P 28-54 22/10/2007 16:34 Page 39

InfoPro la collection pour les pros de l’informatique

NOUVEAUTÉ à paraître le 14 novembre

9782100513673 • +0-gX^\j 9782100511419 • ))+gX^\j 39 ` Jean-Luc Deleage 9782100512621 25 ` Annick Fron • )//gX^\j 32 ` Pascal Grojean Médéric Morel Guillaume Plouin

NOUVEAUTÉ à paraître le 14 novembre NOUVEAUTÉ à paraître le 14 novembre

Retrouvez 9782100515684 • )//gX^\j

notre JEU CONCOURS 9782100500765 • 37 ` Chantal Morley ),-gX^\j et la liste des libraires Jean Hugues 29 ` Etienne Vautherin Bernard Leblanc participant Olivier Hugues à l’opération sur MAOGANI 071009

www.dunod.com

Pub Programmez 210x285.indd 1 15/10/07 15:21:38 28-54 22/10/2007 16:34 Page 40

Dossier Flash, Flex, Air, dans l’univers des RIA La présence de plus en plus grande d’Adobe dans le domaine des RIA est incontestable. Néanmoins entre Flash, Flex et Air il est difficile d’identifier le produit le mieux adapté à la création d’une interface cliente riche.

Cet article a pour but de vous décrire à travers les trois produits cités précédemment, la mise en place d’un composant simple communé- ment appelé " Menu accordéon " .

Flash Flash est souvent associé à la réalisation d’animations graphiques mais il dispose également de composants pouvant être utilisés dans la réali- sation d’interfaces cliente riches. Lors de la création d’un nouveau projet, on constate aisément que Flash n’est à première vue pas conçu pour réaliser des IHM, car on note la présence de " time line " qui ont pour objectif de définir la succession des actions dans le temps. Ces successions sont par contre très utili- sées dans le domaine graphique (marche d’un personnage, rebond d’une balle…). Voyons comment implémenter notre menu accordéon.

Activation des composants La première chose à faire est d’activer la vue des composants Fig. 2 : Création des layers et mise en place du composant "Accordion" de Flash. Pour ce faire, il suffit de se placer dans le menu " Windows > Déve- menu_flash.createChild(View, "CONT3", {label:"Conteneur C"}); loppement Panel " et d’activer l’option " Components " (Fig.1).

Création des layers // ------CREATION DES SOUS MENUS ---- Nous allons créer deux layers. Le //- Conteneur A premier va contenir le code Action var s1:Object = menu_flash.CONT1.createChild(Label, "sousMenu1",{_x:10, _y:10}); Script et le second le composant s1.text = "Sous Menu A1"; " Accordion " ces layers seront var s2:Object = menu_flash.CONT1.createChild(Label, "sousMenu2",{_x:10, _y:30}); Fig. 1 : Vue des composants de Flash nommés respectivement s2.text = "Sous Menu A2"; " Action_Script " et " Composant " Une fois, ces deux layers créés, il suffit de sélectionner celui devant //- Conteneur B contenir le menu et d’y placer le composant " Accordion " via un " glis- var s3:Object = menu_flash.CONT2.createChild(Label, "sousMenu3",{_x:10, _y:10}); ser-déplacer ". La dernière étape consiste à éditer les propriétés du s3.text = "Sous Menu B1"; composant en lui attribuant le nom de " menu_flash " (Fig.2). var s4:Object = menu_flash.CONT2.createChild(Label, "sousMenu4",{_x:10, _y:30}); s4.text = "Sous Menu B2"; Le code La phase finale revient à la mise en place du code qui sera fait entièrement en langage action script. Pour cela, il convient de se placer sur le layer //- Conteneur C " Action_Script " et dans la partie " Action " de saisir le code suivant : var s5:Object = menu_flash.CONT3.createChild(Label, "sousMenu5",{_x:10, _y:10}); s5.text = "Sous Menu C1"; import mx.core.View; var s6:Object = menu_flash.CONT3.createChild(Label, "sousMenu6",{_x:10, _y:30}); import mx.controls.Label; s6.text = "Sous Menu C2";

// ----- CREATION DES CONTENEURS ---- Avant l’exécution de ce code, veillez à avoir ajouté le composant " Label " menu_flash.createChild(View, "CONT1", {label:"Conteneur A"}); à la librairie du projet. Pour cela, activez la vue " Library " dans le menu menu_flash.createChild(View, "CONT2", {label:"Conteneur B"}); " Windows ". Sélectionnez le layer " Composant ", y placer un compo-

Programmez! - N°102 40 NOVEMBRE 2007 28-54 22/10/2007 17:15 Page 41

RIA

Fig. 4 : Menu accordéon avec Flex

Fig. 3 : Menu accordéon avec Flash

sant label pour le supprimer ensuite. Vous pouvez à présent exécuter le code pour voir apparaître le résultat représenté par la figure 3.

Flex Notre composant est à présent implémenté et le projet peut être testé Mise en place du composant (Figure 4). Commençons par créer un nouveau projet Flex à l’aide de l’outil Flex Builder. Une fois ce projet créé, il faut nous placer en mode design et AIR insérer le composant " Accordion " situé dans la catégorie " Navigator " AIR est un runtime (Adobe Integrated Runtime) permettant d’exécuter en via un " glisser-déplacer " ligne ou hors ligne des applications développées en Flash, Flex, HTML… par conséquent, AIR doit être considéré comme un moyen de distribution Le code d’applications et non un outil de développement d’applications RIA. Flex, possède un langage nommé MXML permettant le design des com- posants ne laissant qu’à Action Script la partie traitement des données. Et les données ? C’est donc en MXML que nous allons configurer notre composant. Pour Flash et Flex étant utilisés par la partie cliente, il leurs est impossible de cela, il faut se placer en mode Code et saisir les lignes suivantes : communiquer directement avec la couche de données. Pour établir une communication, il faut user d’un second langage qui servira de passerelle entre les données et l’application RIA. Ce type de passerelle peut éventuel- concernant cette mise en place a déjà été consacré dans ce magazine.

Que faut il en conclure ? Au vu des deux petit morceaux de code réalisés en Flash et en Flex afin d’obtenir la même fonctionnalité, plusieurs conclusions peuvent en être déduites. Contrairement à Flex, Flash est avant tout conçu pour la réali- sation d’applications graphiques (Jeux, animations..) de par la présence de ses " time line " et le mode de développement (utilisation de layers). On constate de la part de Flex une séparation entre la gestion des com- posants et l’action de ceux-ci via l’utilisation du langage MXML, ce qui permet d’isoler la couche graphique qui peut être réalisée par des desi- gners. Enfin, il est incontestable que la mise en place du composant sous Flex est facilité par l’IDE, ce qui apporte également une rapidité de développement. Néanmoins, il ne faut pas sous-estimer la puissance de Flash, qui pourra être très utile lors de la réalisation de simples formu- laires (contact, mail…) dans les sites à fort potentiel graphique, mais reconnaissons tout de même un net avantage à Flex pour le développe- ment d’applications RIA. ■ Aurélien Vannieuwenhuyze Ingénieur Concepteur / Réalisateur Sylis France (www.sylis.com) - Blog : http://aurelienv.no-ip.org

EMPLOI : offres & Programmez!interviews- N°102 de recruteurs41 NOVEMBRE 2007 www.programmez.com 28-54 22/10/2007 16:35 Page 42

Dossier RIA JavaFX : une nouvelle manière de construire des applications Swing Annoncé en fanfare lors du dernier JavaOne (mai 2007), JavaFX a suscité, depuis, moult commentaires, une controverse sur sa pertinence et quelques espoirs. JavaFX a été présenté comme l’alternative Java aux solutions Flex d’Adobe ou Silverlight de Microsoft. En moins abouti. D’où la controverse.

ette vision de JavaFX n’est que partiellement juste : JavaFX n’est pas à proprement parler une solution RIA, c’est-à-dire un C outil pour projeter des appliquettes sur un navigateur client, à l’instar de Flex/Flash. Fondamentalement, JavaFX est un nouvel outil pour construire des applications Swing. Quelles qu’elles soient. JavaFX est une gamme d’outils qui est destinée à s’enrichir dans les mois et années qui viennent. Aujourd’hui, il y a deux outils dans la gamme : • Un langage de scripting (JavaFX Script) avec son environnement de développement associé (plug-in Eclipse ou Netbeans) • Un système logiciel pour matériel mobile (comme un téléphone por- table) capable d’exécuter des applications Java et donc JavaFX Script. Cet article ne traitera que de JavaFX Script, qui est l’outil censé être la solution RIA de la plate-forme Java et à ce titre, concurrente d’Adobe Flex/Flash et Sliverlight. JavaFX Script est un interpréteur. A partir d’un fichier source JavaFX (extension .fx), cet interpréteur construit une inter- face homme machine (IHM) basée sur Swing et lance son exécution. L’originalité de JavaFX est que le style de programmation proposé est déclaratif et non impératif : l’IHM à construire est décrite (à l’instar de ce qui est fait classiquement en HTML par exemple) alors que tradition- nellement, une application Swing est spécifiée comme une suite d’ins- tructions à exécuter. Cette démarche n’est pas nouvelle. Elle est au cœur de Flex et de Silverlight. Avec Flex ou Silverlight, l’interface à JButton button = new JButton("Click here"); construire est décrite en utilisant un format basé sur XML. Ce sera button.addActionListener(new ActionListener() { MXML dans le cas de Flex et XAML dans le cas de Silverlight. JavaFX uti- ActionBean actionBean = new ActionBean(); lise un format dérivé de JSON, mais le principe reste identique. public void actionPerformed(ActionEvent evt) { actionBean.doIt(); La programmation déclarative } Illustrons ce nouveau paradigme de programmation par un exemple : Com- }); mençons, en utilisant JavaFX, par créer une frame contenant un bouton : JFrame frame = new JFrame(); var myBean = new ActionBean(); Frame { frame.getRootPane().setLayout(new BorderLayout()); content: Button { frame.getRootPane().add(button); text: "Click here" frame.pack(); action: operation() { frame.setVisible(true); myBean.doIt(); } } } } visible: true } Au-delà de la simplification de l’écriture en JavaFX, ce qu’il convient de Créons le même frame en utilisant directement Swing : noter est la différence d’approche. Avec JavaFX, on décrit ce que l’on désire obtenir et non comment on l’obtient. La programmation impérati- public class MiniGui { ve ne perd pas tous ses droits. Mais elle reste confinée à l’implémenta- tion de réflexes, comme " l’opération " qui sera exécutée lorsque le public static void main(String argv[]) { bouton est cliqué.

Programmez! - N°102 42 NOVEMBRE 2007 28-54 22/10/2007 16:35 Page 43 28-54 22/10/2007 17:16 Page 44

Dossier

}, TextField { value: bind myModel.lastName columns: 10 } ] } visible: true }

Dans l’exemple qui précède, nous avons défini une fenêtre contenant deux champs de saisie. Ces deux champs sont liés aux deux propriétés du même bean " MyModel ". Ces deux propriétés sont toutes les deux liées avec le titre de la fenêtre (notez au passage l’utilisation des guille- mets et des accolades pour intégrer la valeur de ces deux propriétés). Dès que la saisie d’un champ est validée (en passant au suivant par exemple) le titre de la fenêtre est automatiquement mis à jour. La magie du binding Les possibilités offertes par ce mécanisme sont nouvelles, originales et La programmation déclarative est une idée intéressante, mais qui n’ap- demandent un savoir- faire encore peu répandu. Je ne peux résister à porterait qu’un avantage mineur au développeur si elle ne comportait présenter ici un exemple d’implémentation du " glisser-déposer " (drag pas un mécanisme qui établisse une correspondance entre des don- and drop) réalisé à l’aide de quelques " binding " adroitement placés. nées et les widgets qui les présentent à l’utilisateur. Ce mécanisme est Cet exemple est extrait du " JavaFX Script 2D Graphics Tutorial " : le " binding ". Un binding est un lien entre un attribut d’un artefact gra- phique (le contenu d’un champ de saisie, le titre d’une fenêtre mais Group { aussi la couleur de fond d’un panel, etc.) et une propriété d’un objet (un content: JavaBean par exemple). Ce lien implique une synchronisation automa- [Line { tique entre l’attribut et la propriété. Si nous avons, par exemple, un x1: bind x1 champ de saisie lié à la propriété name du bean myBean : y1: bind y1 x2: bind x2 TextField { y2: bind y2 value: bind myBean.name stroke: bind stroke }, strokeWidth: 2 }, Lorsqu’un utilisateur saisit dans le champ textuel un nouveau nom, ce Circle { nom sera automatiquement reporté dans la propriété " name " de cx: bind x1 " myBean ". Inversement, si pour une autre raison, la propriété " name " cy: bind y1 est modifiée, sa nouvelle valeur est automatiquement affichée par le radius: 5 champ de saisie. Il est possible de lier une propriété à plusieurs attri- onMouseDragged: operation(e:CanvasMouseEvent) { buts et obtenir ainsi des chaînes de synchronisations : x1 += e.localDragTranslation.x; y1 += e.localDragTranslation.y; import javafx.ui.*; } }, class MyModel { Circle { attribute firstName: String; cx: bind x2 attribute lastName: String; cy: bind y2 } radius: 5 onMouseDragged: operation(e:CanvasMouseEvent) { var myModel = new MyModel; x2 += e.localDragTranslation.x; y2 += e.localDragTranslation.y; Frame { } title: bind "{myModel.firstName} {myModel.lastName}" }] content: FlowPanel { } content: [ TextField { Un groupe rassemble un trait et deux cercles dont les centres sont value: bind myModel.firstName situés à chaque extrémité du trait. Les extrémités du trait et les centres columns: 10 du cercle sont liés à 4 valeurs (x1 y1 x2 y2) définies par ailleurs dans le

Programmez! - N°102 44 NOVEMBRE 2007 28-54 22/10/2007 16:36 Page 45

RIA

fichier " .fx ". A chaque cercle, un réflexe est défini lorsqu’un événe- stroke: darkblue ment souris de type " déplacement " est reçu. Cet événement modifie }, les valeurs liées au centre du cercle, pour les faire correspondre à l’em- … placement actuel de la souris. Du fait des binding, cette mise à jour Button { entraîne automatiquement la mise à jour des coordonnées du centre du text: "Width" cercle ainsi que celles d’une extrémité du trait. L’utilisateur a l’impres- action: operation() { sion de déplacer le trait à l’aide d’un cercle qui sert de poignée. Le tour width = [0..200] dur 1000; est joué. } }, Une richesse à concrétiser JavaFX Script propose d’ores et déjà un langage complet pour décrire Quand on appuie sur le bouton, un réflexe est déclenché qui modifie la des constructions (graphiques ou données) d’une part et pour implé- largeur du rectangle en la faisant passer de la valeur 0 à la valeur 200 menter des réflexes d’autres part. Il est clairement orienté objet avec la en 1 seconde (1000 millisecondes). possibilité de définir des classes. L’héritage est proposé, y compris mul- Dans le monde rude du RIA, la place de l’outillage est prépondérante : tiple, ce que Java ne permet pas ! La quasi-totalité des instructions de qu’est ce que JavaFX peut opposer aux redoutables FlexBuilder et contrôle sont présentes (if, while, for, foreach, try…catch). JavaFX implé- VisualStudio de ses concurrents ? Sur les IDE Java les plus connus, pas mente une logique de collections très souples, servies par de nom- grand-chose encore. Il existe bien des plug-in pour Eclipse et NetBeans, breuses constructions syntaxiques. En voici une illustration, tirée de mais ni l’un ni l’autre n’offrent encore de vue WYSIWYG de la page JFX. " Learning JavaFX Script " : Cela devrait être rapidement corrigé. Aujourd’hui, c’est ailleurs qu’il faut chercher les premiers vrais composeurs d’application JavaFX. Prenez var x = [1,2,3]; le temps, par exemple, de jouer avec un outil plein de promesses : JFX- insert 10 into x; // yields [1,2,3,10] Builder. Il est disponible via JavaWeb Start sur le site : insert 12 before x[1]; // yields [1,12,2,3,10] http://www.reportmill.com/jfx/ delete x[. == 12]; // yields [1,2,3,10] delete x[. >= 3]; // yields [1,2] Perspectives insert 5 after x[. == 1]; // yields [1,5,2]; JavaFX est un produit finalement mal connu : il est présenté un peu par- insert 13 as first into x; // yields [13, 1, 5, 2]; tout sur le Web comme une solution RIA, mais c’est en fait une nouvelle delete x; // clears the array and yields [] solution pour construire des applications Swing, qu’elles soient RIA ou non. D’ailleurs, qu’est-ce qu’une application Swing RIA ? C’est une Sont aussi proposés, un mécanisme puissant de formatage, la possibi- application graphique qui s’exécute sur une applet. Oui : les applets qui lité d’armer des réflexes sur mise à jour d’un attribut ou d’une collec- accompagnent Java depuis le tout début, celles-là même qui ont été tion, ou encore d’exécuter un traitement en tâche de fond. tant décriées et qui reviennent aujourd’hui à l’honneur grâce à l’expé- JavaFX autorise aussi la création et la manipulation d’objets Java. Il rience – beaucoup plus réussie – de Flash. existe bien entendu quelques restrictions dont la plus sérieuse est que La solution Java pour faire du RIA rassemble donc plusieurs technolo- ces objets ne peuvent être atteints par le mécanisme de " binding ". gies dont JavaFX n’est qu’une composante, d’ailleurs facultative : on C’est une fonctionnalité précieuse qui ouvre à JavaFX d’immenses pos- peut continuer à programmer des applets en utilisant directement sibilités. En premier lieu, la communication avec un serveur, Java EE, Java/Swing. RMI ou Web Service est immédiatement disponible. On peut, bien L’intérêt de JavaFX est donc à la fois ailleurs et plus large. Je pense entendu, mélanger des instructions JavaFX et des appels à des qu’aujourd’hui toute équipe qui développe une application graphique méthodes d’objets Java au sein d’un même traitement JavaFX (i.e. ope- basée sur Swing devrait s’intéresser à JavaFX : la programmation décla- ration). L’intégration des deux mondes est très naturelle. rative, le mécanisme de " binding " et le langage de scripting proposé, La bibliothèque des objets proposés par JavaFX est d’ores et déjà très bien intégré au reste de la plate-forme Java, sont de nature à amé- conséquente : outre les Frames, TextField et Buttons déjà présentés, on liorer considérablement la productivité. y trouve les panels, les tables, des arbres, des onglets, les labels, les De façon logique, l’avenir de JavaFX n’est pas lié au devenir de Java en cases à cocher et boutons radio, les curseurs, etc. tant que plate-forme RIA. JavaFX est une nouvelle brique qui vient Mais ce n’est pas tout : une importante partie de Java 2D est disponible accompagner les bibliothèques et outils Java pour fabriquer des applica- sous la forme d’objets spécifiques de type ligne, cercle, rectangle, tions riches et partagera le destin de cette plate-forme sur ce créneau. images. L’exemple du " glisser-déposer " vu plus haut en est une illus- tration. Une instruction spécifique appelée " dur " permet de créer faci- lement des animations comme en témoigne la snippet suivante : ■ Henri DARMET Directeur Technique attribute width: Number; Objet Direct / Homsys Group … Objet Direct, filiale à 100% de Homsys Group est une Rect { société de conseil, de services et de formation, spécialisée sur les technologies objet et Web. Conseil en méthodologie, width: bind width en architecture et en urbanisation du SI, développement applicatif, édition et height: bind height distribution de logiciels. www.objetdirect.com

Programmez! - N°102 45 NOVEMBRE 2007 28-54 22/10/2007 16:36 Page 46

Dossier RIA La RIA selon Microsoft : WPF, Silverlight, AJAX Alors que Silverlight 1.0 est disponible en version finale et que sort Silverlight 1.1 en version Alpha, cet article vous propose de faire un tour par la pratique de l’offre RIA de Microsoft.

es applications riches diffusées par l’intermédiaire d’un naviga- La gestion des médias teur sont de plus en plus courantes. On les reconnaît le plus sou- Xaml est profondément orienté L vent car elles présentent des interfaces très évoluées. Elles multimédia, Le MediaElement regorgent de multimédias, d’animations de look and Feel sexy. Je vous nous permet de visionner et invite, dans cet article, à faire un tour d’horizon des technologies Web manipuler des Vidéos comme le avancées proposées par Microsoft. Au programme nous aurons bien montre l’exemple suivant : sûr ASP.NET AJAX mais surtout Silverlight 1.0 et 1.1 en passant par les applications XBAP.

XAML : un langage descriptif au centre des RIA de Les formats acceptés sont : Microsoft - Windows media video (wmv), Au centre de l’offre RIA de Microsoft se trouve un nouveau langage de - Windows media audio (wma), développement : le XAML. Cet acronyme signifiant eXtensible Applica- - Et certains types de mp3. tion Marckup Language définit un langage descriptif basé sur des tags La gestion de vidéo est très simple en WPF et Silverlight ; c’est la raison qui s’écrit comme du XML. pour laquelle beaucoup d’exemples sont présentés. L’exemple XAML ci-dessous présente un rectangle (instancie un objet Rectangle) dont le contenu est un dégradé du blanc au Vert Gestion des transformations : Les transformations ont pour objectif de modifier le comportement d’un objet. Il en existe cinq en Xaml présentées ci-dessous : Type de transformation Description Exemple TranslateTransform C’est le déplacement d’un objet d’une position à une autre. ScaleTransform C’est le grossissement, rétrécissement d’un objet. RotateTransform C’est une rotation d’un objet.

On peut voir le résultat à l’exécution SkewTransform C’est une transformation qui met en oblique un objet. ci-contre. MatrixTransform Chaque élément 2D peut être représenté Le premier élément important est de par une matrice. Nous pouvons alors créer comprendre que xaml est un langage, nous-mêmes des transformations en les ainsi lorsqu’on écrit : appliquant directement sur la matrice de l’objet.

L’exemple de code suivant met en œuvre les quatre premières On instancie la classe Rectangle pour créer un objet représenté par la transformations en s‘appuyant variable RectangleLayout. Le code suivant écrit en C# a exactement le sur un rectangle. Avant toute même résultat : transformation, le rectangle blanc avec un cadre noir d’une longueur de 150 pixels sur 75, est positionné Rectangle rectLayout = new Rectangle(); sur le coin gauche de l’écran. rectLayout.Width = 150; rectLayout.Height = 75;

Programmez! - N°102 46 NOVEMBRE 2007 28-54 22/10/2007 18:00 Page 47 28-54 22/10/2007 16:37 Page 48

Dossier

Ensuite, nous lui appliquons des position toute la puissance de WPF : Moteur de databinding performant, transformations : une translation, du multimédia, des contrôles utilisateurs riches et nombreux et même une rotation pour le faire tourner de la 3D ! Je vous propose de regarder en détail de quoi est constituée d’un angle de 20°, un agrandisse- une application xbap à travers une application 3D. ment de 2 et enfin un Skew de 2. Le résultat est le suivant : Création d’une application xbap Pour créer une application XBAP, il suffit de choisir le modèle de projet approprié dans la fenêtre de création de projet. Ce modèle se nomme " WPF Browser Application ".

La gestion des animations XAML nous fournit un support d’animation, autrement dit un modèle objet (n’oublions pas qu’écrire du XAML c’est coder !) destiné à animer et interagir dynamiquement avec les objets instanciés. Par exemple, faire tourner en boucle notre rectangle. Le " Storyboard " permet de définir, créer et paramétrer une animation. Pour cela nous avons besoin d’un déclencheur appelé " trigger " qui lancera l’animation. Dans l’exemple ci-dessous, nous animons la propriété " Opacity " du rec- tangle créé précédemment. Une fois cette étape passée, on se trouve face à une application WPF classique, à quelques détails près. L’unité de code base n’est plus une fenêtre window mais une Page comme montré ci-dessous une URL qui pointera vers le fichier d’extension .xbap produit de la com- pilation. Ici un imprime écran de la publication de notre application xbap vers un site web par Click Once

Maintenant que nous avons compris ce qu’est XAML et ce qu’il met, en partie, à notre disposition, je vous propose d’étudier les technologies qui en tirent parti, à commencer par WPF.

Windows Presentation Foundation Met en quoi WPF peut – il être RIA ? En fait, il est possible de réaliser des applications WPF hébergées par internet explorer (et uniquement internet explorer). Ces projets portent le nom d’ XBAP pour Xaml Brow- ser Application. Je vous propose dans cette partie de voir comment cette technologie nous permet de profiter de la puissance de WPF et de la souplesse d’internet.

Les Xaml Application Browser Les XBAP sont donc des applications WPF hébergées par un Browser. La 3D sur le Web par l’exemple Aujourd’hui, seul internet explorer permet de les exécuter. Il nécessite Un des avantages de l’utilisation des applications Xbap est que toute la aussi l’installation du Framework 3.0 minimum sur le poste de travail puissance de WPF est accessible à savoir, le moteur de binding mais pour être exécuté. Une fois ces prérequis pris, nous avons à notre dis- aussi la 3D. Je ne m’étendrai pas sur la création 3D dans cet article.

Programmez! - N°102 48 NOVEMBRE 2007 28-54 22/10/2007 16:37 Page 49

RIA

Afin de l’illustrer, je vous propose de Silverlight et son contexte d’exécution créer une pyramide en trois dimen- Silverlight s’exécute via un browser sur le poste de travail client, ce n’est sions que nous ferons tourner à l’ai- donc pas une application serveur comme celles développées en de d’un " slider ". ASP.NET. Toute application Silverlight est embarquée dans une page Web La première étape est la création de hôte qui affiche une zone (un

) correspondant au plug-in Silverlight la géométrie de l’objet, de sa couleur dans lequel l’application s’exécutera. L’architecture fournie par Micro- et le positionnement d’une caméra. soft est la suivante :

La géométrie de la pyramide :

de Silverlight et nous pourrons même les faire interagir.

Enfin, regardons l’interactivité en donnant la possibilité à l’utilisateur de La création d’application Silverlight notre application RIA de faire tourner la pyramide. Pour cela, nous Comment créer une application silverlight ? Nous ne revenons pas sur créons un " slider " nommé " sliderRotate ". les outils mais il y a évidemment, plusieurs possibilités selon votre rôle, designer, développeur et selon la version. Pour le développeur l’outil roi sion 2008 bêta 2 pour Silverlight 1.1. Dans le cas de Silverlight 1.0, la Puis, nous lions par databinding la valeur du slider à la transformation création d’un projet Silverlight passe par le nœud " Silverlight " de la de rotation de notre pyramide. Le code suivant illustre cela. fenêtre de création de projet et le choix du modèle de projet " Silverlight JavaScript Application " comme présenté ci-dessous :

Ainsi nous avons une application Web mettant en jeu WPF, de la 3D mais aussi des mécanismes avancés et performants comme le Data- binding. Regardons désormais comment développer des applications Web multi browser.

Silverlight Dans le cas de Silverlight 1.1 Alpha, la création d’un projet Silverlight Silverlight est une technologie multi-plate-forme, multi navigateur, per- passe par le nœud " Silverlight " de la fenêtre de création de projet et le mettant de développer des applications riches orientées multimédia. choix du modèle de projet " Silverlight Project " comme présenté page Il existe, bien entendu, des éléments communs aux versions 1.0 et 1.2. suivante. Elles sont toutes les deux basées sur XAML pour définir l’interface visuelle. Elles sont hébergées par plusieurs navigateurs, à savoir : Inter- Le déploiement d’application Silverlight net Explorer, Firefox, Safari et récemment le support de Linux (via le pro- Pour comprendre comment déployer une application Silverlight, il faut jet moonlight). Elles nécessitent l’installation d’un plug-in. d’abord comprendre de quoi elle est composée lors de sa compilation.

POUR FAIRE VOTRE MAGAZINE IDÉAL ! Programmez! - N°102 49 NOVEMBRE 2007 Grande Enquête Utilisateurs 2007 www.programmez.com/enquetes.php 28-54 22/10/2007 16:37 Page 50

Dossier RIA

Silverlight 1.0 Silverlight 1.0 possède les caractéristiques suivantes : - Support du XAML - Support du JavaScript Un seul modèle de projet est disponible : " Silverlight JavaScript Applica- tion " par défaut ; ce dernier crée des fichiers détaillés ci-dessous : La compilation d’une application Silverlight produit une dll qui représen- te le code nécessaire à l’exécution de l’application (quelle que soit la Nom du fichier Contenu du fichier version aujourd’hui). Une application Silverlight se compose donc d’une Scene.Xaml Fichier Xaml contenant le visuel de notre application Silverlight page HTML, de fichiers JavaScript, utilisés pour l’interaction entre la Scene.Xaml.js Fichier Javascript contenant le code des interactions entre les utilisateurs et l’application page Web et le plug-in, et des fichiers XAML. Le déploiement se fera Default.html Page Web hébergeant l’application donc sur un site Web (dont l’URL pointera sur la page HTML hébergeant Default.html.js Initialisation et paramétrage du plug-in Silverlight notre application) qui contiendra un répertoire contenant la dll compilée, Silverlight.js Fichier de création du plug-in Silverlight ainsi que les fichiers HTML, JavaScript et XAML nécessaires à la bonne exécution du site Web. Maintenant que nous avons vu comment créer et L’interactivité entre l’utilisateur et l’application est entièrement basée déployer une application Silverlight je vous propose de créer un player sur Javascript et sera codée dans le fichier Scene.Xaml.js. Détaillons vidéo qui nous permettra de mettre en évidence les caractéristiques de maintenant le fichier Scenen.xaml du Player chacune des versions 1.0 et 1.1. Le fichier XAML du player Outre la création du MediaElement que nous avons vue, regardons com- ment créer les boutons qui pilotent notre Player. Ces derniers se compo- sent de Rectangle et d’un texte. Le tout, affiché dans un canvas, comme le montre le code suivant :

- Des rectangles pour créer les boutons. La particularité du MediaElement utilisé est que ce dernier est " Clipé " j’ai choisi un rectangle en paramétrant les Radius, de façon à avoir les bords arrondis.

Programmez! - N°102 50 NOVEMBRE 2007 28-54 22/10/2007 16:38 Page 51 INDISPENSABLE! Hors-Série .Net

www.programmez.com

ProProOctobre 2007 - Hors-Série grammez!grammez! LE MAGAZINE DU DÉVELOPPEMENT 100% Pratique ! BienBien démarrerdémarrer lala programmationprogrammation .Net.Net Les outils, les frameworks, nos conseils, les formations

Mobilité. Bureautique. Développer Développer avec des applications Office 2007 Windows Mobile avec le SGBD. Compact Le databinding Framework de Windows

Système. Et aussi : Gérer les E/S l'actualité et en .Net les nouveautés de l'univers .Net,

des interviews, des cas clients… M 02104 - 8 H - F: 4,95 E - RD 3:HIKMLA=YUY^ZZ:?a@k@a@s@f;

Printed in France - Imprimé en France - BELGIQUE 6,45 € - SUISSE 12 FS - LUXEMBOURG 6,45 € - Canada 8,95 $ CAN - DOM Surf 6,90 € - TOM 940 XPF - MAROC 50 DH

Actuellement dans les kiosques Demandez-le à votre marchand de journaux 28-54 22/10/2007 16:39 Page 52

Dossier

Ce qui est intéressant, c’est la manière dont les utilisateurs vont pou- Code behind voir déclencher des actions ici sur les boutons, l’évènement MouseLeft- Comme nous l’avons dit, la version Silverlight 1.1 est basée sur du code ButtonUp, sera levé et il appellera la méthode JavaScript " DoPlay ". behind pour toute interaction entre l’utilisateur et l’application. Ainsi le click du bouton " Play_Click " de notre Player est le suivant : Javascript Comme nous l’avons dit, cette version est entièrement basée sur le public void Play_Click(object sender, EventArgs e) JavaScript pour toute interaction entre l’utilisateur et l’application. Ainsi, { le script du bouton Play de notre Player réagissant au click de l’utilisa- teur, est le suivant : video = this.FindName("Video") as MediaElement; if (video == null) function DoPlay(sender, eventArgs) throw new ArgumentException("Video is not found"); { var theHost = document.getElementById("SilverlightControl"); video.Play(); var theMedia = theHost.content.findName("Video"); } theMedia.Play(); } La première chose réalisée est la récupération du contrôle MediaElement dans la variable " Video " sur lequel nous appelons la méthode Play. La première chose réalisée par ce script est la récupération du contrôle à partir duquel nous récupérons l’objet MediaElement référencé par son Web 2.0 et ASP.NET AJAX nom " Video " et sur lequel nous appelons la méthode Play. Dans cette partie, nous allons vous présenter le Framework AJAX de Microsoft. Nous n’entrerons pas dans le détail et je vous renvoie vers le Silverlight 1.1 N°99 de Programmez ! Pour le très bon dossier Web 2.0 incluant AJAX. Silverlight 1.1 possède les caractéristiques suivantes : ASP.NET AJAX est une couche supplémentaire à ASP.NET, on parle d’ex- - Support du XAML (et donc des animations etc.) tension AJAX pour ASP.NET. Cette technologie s’appuie donc sur les - Support du code behind (C#, VB.NET aujourd’hui) outils actuels de la gamme Visual studio. ASP.NET AJAX est composé de Il reste des limitations aujourd’hui à cette version comme la faible liste 3 modules principaux : de contrôle disponible, le non-support du databinding. Néanmoins, nous - Des extensions serveurs : elles vont prendre en charge les fonctionna- en sommes à la version Alpha et Microsoft a annoncé le support de ces lités AJAX dans les pages ASPX côté serveur points techniques dans les versions à venir. Deux modèles de projet - Des contrôles qui encapsulent des comportements AJAX pour dynami- sont disponibles : " Silverlight Project " et " Silverlight Class Library ". ser une page, on parle des contrôles AJAX Toolkit Les projets " Silverlight Project " créent par défaut le contenu suivant : - Microsoft AJAX Library : Une bibliothèque de scripts JavaScript pour prendre en charge AJAX côté client (manipulation de XMLHttpRequest, Nom du fichier Contenu du fichier JSON, DOM, etc.) Page.xaml Fichier Xaml contenant le visuel de notre application Silverlight L’objectif d’AJAX est d’ajouter du dynamisme dans les pages. Contrai- Page.xaml.cs Fichier contenant le code behind pour l’interaction utilisateur rement à Silverlight les applications ASP.NET AJAX sont des applications TestPage.html Page web hébergeant l’application serveurs plus que clientes. TestPage.html.js Initialisation et paramétrage du plug-in Silverlight Du point de vue du code je dirais que deux contrôles sont essentiels à Silverlight.js Fichier de création du plug-in Silverlight connaître de tout développeur ASP.NET : - L’update panel : panel permettant d’ajaxifier votre application avec peu d’effort L’interactivité entre l’utilisateur et l’application peut être basée sur du - L’update progress : permet de notifier un traitement Ajax en cours. Javascript, mais ce sera surtout le code behind qui lui sera préféré pour la souplesse et le nombre de fonctionnalités plus importantes qu’il apporte. CONCLUSION L’offre RIA de Microsoft est très étoffée. Elle est surtout centrée sur le Le fichier XAML du player XAML avec les applications WPF /XBAP mais aussi Silverlight 1.0 et 1.1. Le projet de Player en version 1.1 contient 2 projets. Le fichier de projet Les investissements et les annonces faits autour de Silverlight 1.1 confor- et une librairie Silverlight. Nous avons en effet externalisé les boutons tent d’ailleurs l’engouement pour cet technologie, ainsi nous voyons le en créant un contrôle utilisateur leur correspondant. Ainsi le fichier xaml support Linux par moonlight, l’apparition de contrôles utilisateurs évolués du player est allégé et fait uniquement référence à notre dll puis aux produits par des sociétés comme GOA. Nous sommes donc tous dans l’at- contrôles. tente de voir les prochaines versions de Silverlight 1.1. Néanmoins ASP.NET n’est pas en reste et l’approche à 3 niveaux d’ASP.NET AJAX. Une xmlns:control="clr-namespace:SilverlightControlProgrammez;assembly chose est sûre, les RIA ont de beaux jours devant eux. =ClientBin/SilverlightControlProgrammez.dll" ■ Sacha LEROUX Bewise - Centre de compétences Team System.

Programmez! - N°102 52 NOVEMBRE 2007 28-54 22/10/2007 16:39 Page 53

RIA Quelle sécurité pour les applications RIA ? Les RIA apparaissent aujourd'hui comme la meilleure évolution pour les sites Internet se réclamant de la génération du "Web 2". Mais qu’en est-il de la sécurité ?

es RIA protègent bien souvent le code Fonctionnement du jeu Flash propre compte, celui-ci ne faisant aucune véri- source des applications, les rendant ainsi (partie client) fication sur ce score. De plus, même pas L plus sûres et plus difficiles à hacker Il s'agirait d'un jeu de casse-briques RIA en besoin de lancer réellement une partie, vu qu'une simple page web pour les personnes Flash. Chaque brique cassée rapporte 5 qu'il n'est pas nécessaire de fournir d'ID de mal intentionnées. Le code source étant aussi points. Lorsque la partie se termine (ou que le partie. Très rapidement, certains dévelop- compilé ou précompilé, dans la majorité des joueur perd), le scriptlet Flash envoie au ser- peurs peu scrupuleux qui joueraient à ce jeu cas du moins, l'exécution se veut plus rapide veur le nombre de points gagnés par le joueur auraient trouvé la faille et auraient pu augmen- que celle du JavaScript. Ce masquage du code (via une requête web en POST), ainsi que (via ter le score de joueurs fictifs afin de sponsori- source permet aussi aisément de placer ou de le cookie) des informations d'identification - ser leurs équipes, ce qui aurait naturellement rapatrier des mots de passe ou autres informa- pseudo, mot de passe et ID. Le serveur s'oc- faussé le classement. Il ne s'agit ici que d'un tions importantes dans le cœur même de l'ap- cupe d'ajouter les points au joueur et d'établir jeu, et les conséquences auraient sans doute plication côté client, celles-ci devenant illisibles un classement des meilleurs joueurs. été mineures mais pour d'autres applications, même pour le développeur averti. Cela était ce genre de faille pourrait avoir des consé- totalement impossible à l'époque du JavaScript, Fonctionnement de quences bien plus graves. celui-ci pouvant être manipulé côté client. la partie serveur La page serveur en question vérifie l'adresse Comment ce problème aurait-il Les points faibles des RIA IP, les données de sessions et les cookies pu être évité ? Malgré toutes les promesses du RIA, il ne faut envoyés par l'application Flash afin de certifier Si la faille est simple à comprendre, il n'est pas oublier que tout ce qui passe sur Internet l'authenticité du joueur. Impossible donc probablement pas aussi aisé de trouver une ne peut l'être de manière sécurisée. Si les don- d'ajouter des points à un joueur quelconque si solution pour la combler. Plusieurs pistes nées contenues dans l'application elle-même on ne s'est pas au préalable identifié sur le auraient pu être explorées. peuvent apparaître comme solidement préser- serveur. De ce point de vue-là, l'application L'ID de partie vées, une RIA devra toujours faire appel au ser- paraît tout-à-fait sécurisée. Une fois la vérifica- Au chargement de la page côté serveur, il veur pour recevoir ou envoyer des informations tion d'autorité effectuée, une requête SQL est serait possible de passer au RIA un ID de par- cruciales. Ce sont ces données envoyées et envoyée à la base de données pour ajouter le tie, qui serait stocké tant côté serveur que reçues, et la manière dont elles seront proté- nombre de points dus au joueur. côté client. Lorsque la partie se termine, elle gées, qui feront toute la différence du point de enverrait cet ID de session au serveur, qui vue de la sécurité de votre application. Comment le classement pourrait pourrait alors le comparer avec le sien. Cette être faussé par les joueurs ? méthode éviterait par exemple que des parties Un exemple concret S'il devient évident qu'il est impossible de non-jouées apportent du score aux joueurs. Pour bien illustrer comment les données manipuler les données des autres joueurs, envoyées et reçues par une RIA peuvent com- étant impossible de trouver leur mot de passe, Une proportion temps de jeu / score promettre la sécurité d'une application web, je il est possible, le score de chaque partie étant La proposition précédente, si elle ajoute un suis parti d'un exemple imaginaire, mais qui variable, d'envoyer une requête au serveur niveau de protection supplémentaire, ne per- pourrait tout à fait exister. avec un score totalement farfelu pour son met pas d'éviter tous les problèmes. Il serait toujours possible de lancer une partie, récu- pérer l'ID, fermer brutalement le navigateur et Les failles du web envoyer une requête avec un score bidon par Entre le serveur et le navigateur, il y a deux étapes la suite. Pour contrer plus encore cette éven- importantes : tualité, il est possible de plafonner le score. Le Web Si, par exemple, en jouant 5 minutes un Il est possible d'y récupérer du contenu qui ne joueur peut gagner au mieux 1000 points, il vous est pas destiné, mais aussi d'envoyer un faut empêcher toutes les requêtes qui contenu à la place de quelqu'un d'autre. auraient un taux de gain supérieur à 250 Le Proxy points/minute (il vaut mieux laisser une L'utilisateur lui-même peut être mené à utiliser un marge, on ne sait jamais). Pour calculer le proxy pour filtrer les requêtes de votre application temps écoulé, on peut se servir de l'ID de ses- et les remplacer par celles de son choix. sion, l'heure ou commence la partie pouvant être conservée côté serveur.

Programmez! - N°102 53 NOVEMBRE 2007 28-54 22/10/2007 16:40 Page 54

Dossier RIA

Génération d'une clé de validation Si la méthode qui suit apparaît comme sûre, il ne faut pas oublier qu'elle ne pourra pas tou- jours s'adapter à tous les cas d'utilisation des RIA. Il reste alors une dernière validation, bien plus sécurisée que les précédentes. Cette vali- dation consiste en une clé, de par exemple 12 caractères, qui serait générée au moyen des données envoyées (que ce soit par le serveur ou par le client). Exemple de données : FremyCompany, Pass- Word, 3245 points 1. F = 6e lettre de l'alphabet, on ajoute 31 pour brouiller les pistes : 37 2. PassWord = 8 lettres, on ajoute 5 pour brouiller les pistes : 13 3. Somme de 37 et 13 = 50, on ajoute 3 pour brouiller les pistes : 53 4. 3245 = Somme des chiffres = 14, on ajoute Fiddler 2.1 en action. 8 pour brouiller les pistes : 22 Clé générée : 022-053-013-037 Clé reçue lors du dernier contact : Effectuer une analyse approfondie 089 – 251 – 003 – 048 – 1 50 avant de coder Générer des clés solides Génération d'une nouvelle requête (15 brouille Corriger c'est bien, prévenir c'est mieux ! Pour Il est évident que plus le système de généra- les pistes) : éviter d’avoir de grosses retouches à apporter tion de clé sera sécurisé et aléatoire, plus il |89-251+3| - |15+48-150| - |(251 * 48) / 150| par la suite, mieux vaut bien analyser les sera difficile de simuler les réponses de votre - |Hasard| - |Hasard| méthodes avec lesquelles les données seront application et/ou de votre serveur. Clé générée : 159 – 087 – 080 – 220 – 007 envoyées et prévoir des garde-fous suffisants pour contrer toute tentative de piraterie. Ce tra- Quelles sont les données Comment tester la solidité d'une vail préliminaire peut s'avérer fastidieux, mais qui peuvent servir à formuler application RIA ? il l'est moins que si une faille est découverte des clés sûres ? Rien à faire, le meilleur moyen pour découvrir par la suite. Si la situation le permet, mieux La date du jour une faille dans une application, qu'elle soit RIA vaut prévenir que guérir ! La date du jour est un excellent paramètre ou pas, c'est bien d'en chercher une ! pour générer des clés, car il change régulière- Effectuer un encodage ou cryptage ment. Cependant, il ne faut pas perdre de vue Tester avec Microsoft Fiddler 2.1 des données sensibles que la date sur votre serveur et sur l'ordina- Pour ce faire, il existe des outils qui pourront vous Cela reste encore la méthode la plus sûre pour teur du client peut varier, pour diverses rai- aider. Fiddler 2.1 en fait partie à coup sûr. Cet outil protéger les données. Encore faut-il trouver un sons. Dans le cas où la date entre en ligne de est pire qu'un espion. Il intercepte toute donnée encodage adéquat et pas trop long à décoder compte dans la génération de la clé, il faudra entrant ou sortant par Internet Explorer ou autres (il faut à tout prix épargner le serveur, sans toujours que votre application s'enquière de la applications qu'IE pourrait utiliser. Vous pourrez quoi son temps de réponse risque de ralentir date actuelle auprès du serveur, chose qui ainsi voir quel genre de données transite sur le votre application). Il faut aussi penser à sécuri- risque de ne pas passer inaperçue. Il ne faut Web et la manière dont celles-ci sont agencées. ser son application dans les deux sens (ser- pas non plus oublier que la date change à Vous pourrez tester les réponses de votre serveur veur > client et client > serveur) sans quoi le minuit. Il faut donc prévoir ce changement pour telle ou telle requête, que vous pourrez soit cryptage peut s'avérer inutile. horaire dans les algorithmes. rédiger manuellement soit récupérer à partir de Les données envoyées celles déjà envoyées. Mieux encore, vous pourrez Conclusion Manière simple et efficace de protéger les répondre à la place du serveur à une ou plusieurs Fort de ces nouveaux principes, vous êtes désor- données. Attention, un regard attentif peut par- requêtes dans le but de semer le trouble dans mais fin prêt à réaliser des applications non seu- fois trouver la méthode de génération si elle votre application. Il vous sera aussi possible d'en- lement riches en contenu mais aussi sécurisées. est trop voyante. registrer les requêtes et leurs réponses pour les A noter qu'il faut toujours faire attention à ce que Une information de session analyser par la suite, ou encore de simuler toutes l'on fait avec les données côté serveur. Il faut à Une clé offerte par le serveur lors de la les phases de connexion de votre application. Un tout prix éviter d'exécuter du code en provenance connexion est réutilisée ensuite pour valider véritable "must-have" pour tout développeur RIA, du client, par exemple. Il va aussi sans dire les envois/réceptions de données. Il peut par- et même Web en général. Comble du plaisir ? Il est qu'une validation côté client n'exclut pas une vali- fois aussi être intéressant de récupérer une totalement gratuit ! dation côté serveur. partie de la clé pour former la clé suivante : Site : http://www.fiddler2.com/ ■ François Remy

Programmez! - N°102 54 NOVEMBRE 2007 55-56 22/10/2007 16:41 Page 55

Technique PROGRAMMATION LINUX Accéder au code du framework .Net avec Visual Studio 2008 Le 3 octobre dernier, Scott Guthrie a annoncé, à travers son blog officiel, l’ouverture du framework.NET et de ce fait l’accès à son code source. Cette nouvelle philosophie, inhabituelle chez Microsoft, devrait être disponible fin 2007 / début 2008, peu avant la sortie de .Net 3.5 et de Visual Studio 2008 (prévue pour février prochain).

oute bonne nouvelle ne devrions ainsi retrouver, au regard venant généralement pas d’exemples comme OOXML, un T seule, cet accès aux maximum de commentaires et sources pourra se faire directe- aides diverses au sein de ce ment depuis son environnement code. C’est d’ailleurs très certai- VS 2008 et plus particulièrement nement afin de répondre à une au sein du débuggeur. démarche de nettoyage et d’orga- nisation de ce code source que Vous pourrez ainsi consommer le l’ensemble des librairies ne sont code source des librairies du .NET pas directement disponibles. Framework de deux façons : Bien entendu, à cette première • par téléchargement unitaire des affirmation s’ajoute automatique- fichiers au travers d’un mode de ment la question suivante : téléchargement à la demande Fig.1 "Quand aurons-nous ainsi accès à auprès du site MSDN Microsoft, Note : l’adresse url mentionné dans cette capture n’est pas fonctionnelle à l’intégralité des librairies du .NET de manière transparente pour l’heure actuelle et ne sera peut-être pas l’adresse définitive. Cette fonctionna- Framework ?". A cette question, lité n’est pas présente dans Visual Studio 2008 Bêta 2 mais le sera dans la l'utilisateur de VS2008. Cette version RTM. Microsoft répond que cette pre- fonctionnalité est déjà présente mière étape de mise à disposition pour vos propres librairies et se Un accès facilité Ainsi, Microsoft s’engage à nous du code source n’est que le début gère depuis la fenêtre d’option Observez la capture de la page fournir d’ici la fin d’année une pre- d’une longue démarche de mise – debugging / Symbols de suivante présentant le passage mière liste de librairies du frame- en libération des autres librairies, Visual Studio. lors du mode pas à pas (F11) de work accessibles dans ce dont certaines directement dans • par mode standalone permet- Visual Studio 2008 dans la classe nouveau mode. Cette première la foulée, comme celles relatives tant ainsi de consulter les " Page.cs " du .NET Framework. liste comprendra : à LINQ, WCF, WF par exemple ! sources depuis n'importe quel Celle-ci, reprise du blog de Scott • BCL (Base Class Libraries) : éditeur de texte ! Guthrie, permet de bien com- System, System.IO, System. Un accès tout langage ? prendre l’intégration intuitive des Collections, System.Configura- Et qu’en est-il de la multiplicité Scott sources du .NET Framework au tion, System.Threading, System des langages du .NET Framework. sein de vos développements mais .Net, System.Security, Sys- Sachant que le plus souvent, le Guthrie, également dans votre usage quo- tem.Runtime, System.Text, et code des librairies du .NET Frame- le leader tidien de celui-ci : (Fig.1) • ASP.NET : System.Web work est développé en C#, quid .Net Effectivement, le code source.NET • Windows Forms : System.Win- des développeurs VB, J#, … ? pourra ainsi vous apparaître dows.Forms Devront-il passer au C# ou pour- Scott Guthrie est le General comme étant un élément à part • WPF : System.Windows ront-il avoir un accès natif dans Manager de la division Microsoft entière de votre solution, permet- • ADO.NET : System.Data leur langage ? Et dans le cas Développeurs à Microsoft Corporation. Il gère et dirige les tant à tout développeur de se Non content de donner l’accès au d’une réponse affirmative à cette équipes en charge du développe- " balader " dans les librairies du code source, l’accès complet aux question, les librairies acces- ment des produits ou technolo- framework avec un accès à l'en- commentaires fournis par les sibles seront-elles construites à gies suivants : Common Langua- ge Runtime (CLR), ASP.NET , semble des symboles, au débug- développeurs du .NET Framework la volée au travers de méthodes Silverlight, WPF, IIS 7.0, geur local, à la gestion complète est prévu. Ce qui ne doit pas être d’introspection – Codedom – ou Commerce Server, .NET Compact des données transmises par les un maigre travail, puisque je vous seront-elles complètement mises Framework, Visual Web Develo- per, Visual Studio Tools for WPF espions ainsi qu’à l'exploitation laisse imaginer le mode formel de à disposition par Microsoft dans des piles d'appels ! travail chez Microsoft. Nous l’ensemble des langages majeurs

Programmez! - N°102 55 NOVEMBRE 2007 55-56 22/10/2007 18:45 Page 56

Technique

de la plate-forme de développe- géant de Redmond mais bien une ment ? Le résultat serait très dif- démarche longue, réfléchie et férent dans le cas d’un accès par lourde de conséquences straté- introspection des librairies, giques pour les dirigeants de puisque celui-ci serait relative- Microsoft. ment proche de ce que nous Cette mise en marche progressi- connaissons déjà au travers d’ou- ve passe largement au -delà de tils comme le .NET Reflector de cette initiative limitée à Visual Luts Roeder (bien utile, mais par- Studio 2008 et au .NET Frame- fois un peu trop approximatif !) work 3.5 puisque Microsoft met déjà à disposition du public, sous En lecture seule certaines conditions, le code Cette démarche, novatrice pour source d’une majorité de ses pro- Microsoft, est effectuée sous un duits ou outils. Le programme certain niveau de contrôle Microsoft Shared Source permet puisque les sources en question déjà à de nombreux développeurs seront mises à disposition au tra- d’accéder au code de divers pro- Fig.2 vers de la licence Ms-RL (Micro- duits, dont Windows sous diffé- soft Reference License) • Introspecter les librairies du qui devrait avoir des répercus- rentes versions, par exemple. permettant l'exploitation de .NET Framework afin de mieux sions à bien des niveaux de la Attendons maintenant l’évolution celles-ci en terme de référence appréhender leur implémenta- société. Il est important de com- et surtout la digestion de cette (que nous pourrions considérer tion ainsi que leur architecture prendre que ce mouvement n’est nouvelle par le marché et le comme une forme de mode en technique. Ceci permettra très pas neuf. Effectivement, cette monde de l’open source contem- lecture seule) et non pas dans certainement à de nombreux volonté d’exposer le code source porain. Cette approche risque for- l'objectif de modifications, compi- développeurs de trouver une du .NET Framework remonte à tement de bouleverser la vision lation, copie, ... La modification source d’inspiration afin d’opti- quelques années ! Shaw Burke, du Libre sur les solutions et des sources du .NET Framework miser leur propre code. Nous membre de l’équipe de Scott plates-formes made in Microsoft. serait un non-sens en soi de par retrouvons ainsi, au-delà de la Guthrie, est un fervent défenseur Force est en tout cas de constater la notion de classes unifiées et mise à disposition du code de l’ouverture du code source des une volonté progressiste et réfor- surtout le statut de norme ECMA - source, une démarche formatri- librairies Microsoft et plus particu- matrice des mentalités intrin- ISO de la CLI et de C#. Tout déve- ce à disposition des dévelop- lièrement celles du .NET Frame- sèques de chez Microsoft. loppeur retrouvant une parcelle peurs par les méthodologies de work. Quelques années en L’avenir nous dira si dans de code erroné ne pourra ainsi ceux qui ont pensé le .NET Fra- arrière, Shawn Burke postait sur quelques années les acteurs malheureusement pas effectuer mework. son blog un billet posant ouverte- majeurs du monde de l’Open la modification de lui-même mais • Permettre à tout développeur ment la question de l’intérêt pour Source tels que nous les connais- soumettre le bug et éventuelle- .NET d’optimiser son propre Microsoft et ses clients dévelop- sons aujourd’hui deviendront les ment la correction à apporter code en fonction des modes de peurs d’accéder au code source meilleurs collaborateurs d’une auprès de Microsoft Corp. fonctionnement du .NET Frame- des librairies relatives aux Win- société qu’ils avaient tant reniée. work. Cette approche est dans forms. Preuve est ainsi faite que Pourquoi faire ? la lignée de ce qu’avait initié en cette démarche, bien qu’elle ait ■ Grégory Renard Cette mise à disposition du code son temps la société Borland mis quelques années à aboutir, CTO Wygwam source n'est pas dénuée de sens, (au travers du langage Delphi) n’est pas le fruit d’un revirement Microsoft Regional Director surtout face à des outils de quali- en fournissant les sources de de situation brusque au sein du Microsoft MVP té comme le .NET Reflector de ses bibliothèques de compo- Lutz Roeder qui ne fournit malheu- sants (VCL) permettant par Ressources reusement qu'une vision approxi- exemple une optimisation de la http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing- mative des sources du .NET qualité des composants Tiers. the-source-code-for-the-net-framework-libraries.aspx Framework. Cela permettra à tout Ainsi, nous venons de vivre en ce http://blogs.msdn.com/sburke/ http://www.microsoft.com/resources/sharedsource/licensingba- développeur .NET une double mois d’octobre un changement sics/referencelicense.mspx approche : radical de position chez Microsoft

age 1

www.programmez.com

ProMe Pronsu el - Ju in 2007 - N°98 grammez! LE M Avant-première : AGA ZINE DU D ÉVELO PPEM BOUTIQUE BOUTIQUE BOUTIQUE ENT PHP6 Conférence Les nouvelles fonctions, ce qui change, migrer de PHP 5 à 6 MySQL :

En atten SGBD dant la v 6 C omparatif : Quelle b Achetez les magazines, les articles en PDF et abonnez-vous en ligne Les critères pourase bien de choisir d - Une avalanche de nouveautés onnées, p our quels b esoins ? Maîtriser la XUL plate-forme Mozilla Web Toolkit Construire un composant TE www.programmez.com "glisser-déposer" CHNIQU Pourquoi utiliserE AspectJ WEB 2 et la programmation aspect ? Com biner Aja avec x et Jav JAVA Telosys a L'usine à dé velop H p D e N m - 0 O en A t S e U C 5 - p T P c rin IL Y C g n T S S H $ O

O ra R F

N F 95 L A 2 'inté Dja , g le n n 1 ra fra 8 go M tio E n me : e a c w é S o o F - E n rk ad a tin S v w I P e ue e n c rim b U 5 C à a X ru to p is S 0 u 9 e t fa C C m - , - 4 ontro C ire I 5 + - € 9 l € + : e 5 M 5 c 4 O F

n ,4 C 6,

ré - T e ra 6 z v E G F os U € in R in te IQ 0 rfa U - 98 - d c G O e ,9 9 s L G B te n E 1 o f 6 m in M B r e r 3 E u P X 4

U S 0 L

OM M D

3:HIKONB=^UZ^Z]:?a@a@t@i@k; 57-59 22/10/2007 16:43 Page 57

PROGRAMMATION LINUX JBoss Seam… le fil à coudre extensible pour les architectures Java EE JBoss Seam 2.0 est disponible en pré-version. Quels sont les objectifs de ce framework ? Que recouvre-t-il exactement ? Nous allons démontrer dans cet article, par des exemples pratiques et concrets, en quoi il se distingue clairement des autres frameworks standard du monde JEE.

boss Seam (seam signifie "couture" en anglais) a pour vocation le mode d’accès du composant (@Local ou @Remote) et son état (@Sta- de rendre plus aisé le développement d'applications web basées teless ou @Stateful). On va retrouver ces concepts au cœur de JBoss J sur des briques centrales de Java EE 5.0, notamment JSF (Java Seam qui privilégie clairement l’utilisation des annotations (concept clé Server Faces) et EJB3/JPA (Java Persistence API). On retrouve la de java 5) à celle des fichiers de configuration XML (centrale par même idée au sein d'autres frameworks comme Struts Shale ou exemple dans Spring mais qui pose plusieurs problèmes, notamment Oracle ADF. JBoss Seam propose néanmoins un spectre d'opportuni- celui de la segmentation des fichiers, de la testabilité). Elles vont per- tés beaucoup plus large en apportant un certain nombre de solutions mettre au développeur de définir les composants de l’application, intégrées, simplifiant la vie du développeur, entre autres : Drools (le notamment leur état et leur contexte. L’architecture de Seam est basée moteur de règles de Jboss), jBPM (le moteur de workflow de JBoss) ou sur un modèle de composants dit unifié, en ce sens un composant AJAX (Asynchronous JavaScript and XML). Seam peut être à la fois un bean JSF et un EJB3 Session bean. Avec JBoss Seam, il peut (mais ce n’est pas une obligation) ne plus y avoir de distinction entre ces deux types de composants. Il est également pos- sible d’envisager une architecture sans EJB3. Nous nous focaliserons dans la suite de l’article sur l’intégration EJB3.

Schéma d’architecture issu du tutorial officiel de JBoss Seam EJB3 et JSF : approche classique EJB3 et JSF avec JBoss Seam Intégration JSF/EJB3, vers un modèle de composants unifié Mon premier composant Seam JBoss Seam s’est principalement fait connaître sur son principe fonda- Prenons un cas d’utilisation concret d’une application classique de com- mental d’intégration aisée de JSF et des EJB3, deux API qui jusqu’ici merce en ligne pour illustrer la mise en œuvre de JBoss Seam. Voici coexistaient plus qu’elles n’étaient réellement couplées. Focalisons- l’en-tête du composant Seam sous-jacent à la commande de l’utilisa- nous sur l’intégration de ces deux briques techniques. teur. Il s’agit donc d’un EJB3 utilisé comme bean JSF. L’objectif de JSF est de fournir un modèle événementiel indépendant du @Stateful protocole. JSF s’appuie néanmoins sur une architecture classique de @Name("clientCommande") type MVC2 (Model View Controleur 2). Le contrôleur frontal JSF, la Faces public class ClientCommande implements ClientCommande, Serializable { Servlet, permet de gérer un certain nombre de services communs comme la navigation et la gestion des messages configurables de @In manière déclarative via un fichier XML (faces-config.xml). Les vues peu- private User currentUser; vent être décrites très simplement en XHTML grâce aux " facelets ", la @Out singularité de JSF étant que ces vues sont représentées par un arbre de private Order order; composants graphiques (les UIComponents) sur lesquels il est possible …} d’interagir au niveau de "mini-contrôleurs" JSF, appelés backing-beans. Ceux-ci sont des POJO (Plain Old Java Object), de simples classes Java L’annotation @Stateful précise qu’il s’agit d’un EJB3 SessionBean avec sans contraintes d'héritage ou d'implémentation d'interface, et qui état. L’annotation @Name associe le composant à une variable contex- jouent un rôle particulier entre le contrôleur frontal et les vues : ils dis- tuelle. Exactement comme pour les managed-bean JSF (déclarés sous posent de références sur les composants graphiques. A partir d'un bac- une référence mentionnée par la balise dans king-bean, il est par exemple possible de désactiver l'affichage d'un le fichier de configuration de JSF) qui peuvent alors être stockés dans champ de formulaires ou de griser certains boutons. différents scopes (requête, session, application) et retrouvés par le fra- Le modèle de programmation des EJB3 est basé sur l’utilisation des mework JSF grâce à cette référence. Les composants Seam ont un POJO, mais également sur les annotations et le principe de l’injection de scope par défaut (conversation), mais il peut être assigné à un contexte dépendances. Les annotations EJB3 permettent par exemple de définir différent avec @Scope.

Programmez! - N°102 57 NOVEMBRE 2007 57-59 22/10/2007 16:43 Page 58

Technique

Seam propose le concept de " bijection ", reposant à la fois sur le prin- cette HttpSession, la plus simple étant l’utilisation de cookie, mais si le cipe d’injection de dépendances et la notion de contexte. L’injection va client refuse de les recevoir, une solution alternative doit être implé- permettre aux beans de récupérer des informations depuis ces mentée (de type réécriture d’URL pour ajouter l'identifiant de la session contextes et l’outjection va permettre d’en déposer par défaut dans le dans l’URL de la requête). D’autre part, en mode cluster, la réplication contexte du composant. Ce sont les annotations @In et @Out qui vont de cette HttpSession est critique. ainsi déclencher ce wiring automatique… il n’est alors plus nécessaire Avec Seam, il vous suffit de spécifier un scope au composant gérant le d’aller récupérer " manuellement " un attribut dans la session. Dans panier. Il peut être " stateful ", son état peut alors être automatique- l’exemple de code précédent : ment associé à des contextes différents des contextes classiques des • @In injecte la valeur de la variable contextuelle nommée currentUser applications Web (request, session, application), notamment le contex- chaque fois que le composant est invoqué. te " conversation " servant à couvrir l'enchaînement de plusieurs écrans • @Out dépose la variable contextuelle nommée order dans le contexte d’un scénario utilisateur. Toutes les requêtes Web dans Seam sont défini pour le composant (par l’annotation @Scope). associées à un contexte conversation qui par défaut démarre à la sou- mission de la requête et se termine au rendu de la réponse. Si vous vou- Les avantages de l’approche Stateful lez qu’une conversation s’étale sur plusieurs requêtes, vous devez La plupart des frameworks web sont basés sur une approche plutôt state- étendre la conversation courante à une conversation longue en utilisant less des composants, obligeant les développeurs à gérer eux-mêmes le les annotations @Begin et @End. Celles-ci précèdent des méthodes de cache applicatif. Ceux-ci ont alors le réflexe de mettre beaucoup trop d’élé- composants Seam et permettent ainsi de démarquer la conversation ments en session HTTP, ce qui est bien souvent source de bug et de fuite de correspondant au processus de commande. Un seul utilisateur peut mémoire. D’autre part, on se heurte, dans ce type de framework, au problè- avoir plusieurs conversations en cours à tout moment, notamment dans me mis en avant dans le pattern " Open Session in View ", bien connu des des fenêtres navigateurs différentes (une pour lister les produits, l’autre applications basées sur Hibernate et Spring. En effet, au sein de ces archi- pour confirmer sa commande par exemple) et ceci sans provoquer de tectures, la session Hibernate est classiquement ouverte et fermée au collision entre les conversations, que l’on peut ainsi comparer à des niveau des services métier. Ce peut-être une source d’erreur fréquente en " vues " différentes des données de sa session. Techniquement, ce développement, lorsqu’on essaie d’accéder, au niveau de la couche présen- contexte est géré par Seam grâce à des paramètres de requêtes parti- tation, à des dépendances d’un objet qui n’ont pas été précédemment char- culiers indiquant l’identifiant de la conversation et le fait qu’il s’agisse gées, alors que la session Hibernate est déjà fermée (la fameuse ou non d’une conversation-longue (respectivement les attributs cid et clr LazyInitializationException !). L’approche proposée par Seam est différente, par défaut). Vous pouvez, de plus, lier la conversation à un processus elle privilégie des composants " stateful " qui peuvent garder valide leur jBPM en indiquant dans l’annotation @Begin le nom du pageflow asso- contexte de persistance depuis la soumission de la requête http et ce, jus- cié à cette conversation. Par exemple : qu’au rendu de la page de réponse. Le modèle de composants unifié de @Begin(pageflow="valid_order") JBoss Seam permet ainsi aux composants d’accéder simultanément à l’état représenté par l’HTTPSession et à l’état du contexte de persistance. Le pageflow est alors défini de manière déclarative dans un simple Avec un tel modèle, on se rapproche des concepts du développement pilo- fichier XML avec jPDL (jBPM Process Definition Language). A noter que té par le domaine, chers à Eric Evans et Martin Fowler . la gestion du bouton back du navigateur devient alors aisée (en spéci- fiant un attribut back valorisé à enabled ou disabled au sein de la balise page pour respectivement autoriser ou bloquer l’usage du bouton back). L’autre contexte intéressant de JBoss Seam est le contexte " Business Process ", celui-ci est persistant et multi-utilisateur. Le processus métier peut être également défini avec jPDL, on parle alors de " tâches " qui peuvent être démarquées via les annotations @BeginTask , @Resu- meTask, @CompleteTask ou @AbortTask. Composant Seam et la gestion des contextes. Focus sur l’authentification et Sécurité Détaillons à présent un scénario utilisateur complet : Seam propose de définir les paramètres de sécurité et d'authentifica- • Etape 1: L’application propose une liste de produits à l’utilisateur qui tion de manière déclarative. Typiquement, on définira une méthode utili- peut en choisir un certain nombre et les mettre dans son panier. Il sée pour l'authentification au niveau du fichier components.xml peut consulter son panier à tout moment. • Etape 2: l’utilisateur valide son panier et confirme sa commande. • Etape 3: L’application indique alors si la transaction est validée et le Le composant Identity est utilisé par Seam pour permettre de créer des panier est vidé. formulaires de login de manière rapide et efficace. On le retrouve, A travers un tel cas d’utilisation, plusieurs problèmes sont à gérer. La comme mentionné précédemment, au sein du fichier components.xml conservation des éléments du panier : classiquement, ce type d’infor- afin de définir la méthode qui permet à l'utilisateur d'être authentifié. mations est stocké en HttpSession (ou en base de données). La gestion Celui-ci a besoin, comme attributs, d’un username et d’un password. de cette HttpSession est bien souvent à la charge du développeur qui Ceci est suffisant dans un grand nombre d’applications. doit penser à nettoyer les éléments contenus dans cet objet, garantir L’exemple de code suivant, inséré dans un formulaire, appelle la métho- son cycle de vie, etc. Il existe plusieurs solutions pour la gestion de de login() du composant Identity. Cette dernière renvoie alors le résultat

Programmez! - N°102 58 NOVEMBRE 2007 57-59 22/10/2007 16:43 Page 59

PROGRAMMATION LINUX

de la méthode d'authentification (définie plus haut). "Seam Remoting JavaScript". Cette solution est la plus onéreuse, mais la plus flexible puisqu'elle peut fonctionner avec n'importe quel- le librairie JavaScript existante (la librairie Dojo par exemple). Elle per- Ceci permet d'avoir une uniformité dans l’heuristique de développement met d'accéder aux composants Seam via JSF Expression Language des pages d'authentification et de pouvoir, le cas échéant, n'avoir à (JSF EL) dans des appels JavaScript. modifier qu'un élément situé dans un fichier XML si la méthode utilisée Quant à la gestion de la validation, Seam intègre Hibernate Validator qui change. En ce qui concerne la sécurité proprement dite, il existe deux permet de poser (par annotations) des contrôles directement sur un solutions: POJO, les messages étant internationalisés. Une des principales diffi- - utiliser des rôles permettant l'accès aux pages de manière individuelle cultés rencontrées sur le développement d’applications d’entreprise est (page à page) ou collective (pages.xml), vérifier si l'utilisateur est de savoir où faire la validation. Un piège fréquent est de concentrer la authentifié, etc. validation dans la partie présentation. Cela nuit fortement à la réutilisa- bilité et à la testabilité de la validation, de plus un tel système entraîne souvent des duplications de code. Avec Hibernate Validator, il suffit #{s:hasRole('admin')} d’annoter votre POJO pour indiquer vos contraintes. Voici un exemple de POJO annoté (notez l’usage des messages internationalisés en cas d’échec de la validation de la référence):

- définir des règles avec le moteur de règles Drools pour, par exemple, public class Order { permettre l'accès à une page en fonction de règles métier particulières. private Double amount; private String reference; L'avantage est de pouvoir avoir des règles qui s'appliquent en fonction … de l'état courant de l'application et également d'externaliser une partie de règles métier hors du code. @NotNull public Double getAmount() { … } rule CanUserManuallyAddMoney public void setAmount (Double amt) { … } when c: PermissionCheck(name == "manager", action == "addMoney") @NotNull Role(name == "admin") @Length(max=16,message="{order.reference.invalid}") then c.grant() public String getReference() { … } end; public void setReference (String z) { … }

… Dans ce cas précis, la règle sera vérifiée lors de l'accès à la méthode } manager.addMoney(). Si cet utilisateur a effectivement le rôle " admin ", il aura accès à celle-ci. La validation peut être réalisée très simplement en embarquant la bali- Vous pouvez également spécifier en en-tête des composants Seam l’an- se au niveau de l’attribut de la page à contrôler ou bien la notation @Restrict("#{identity.loggedIn}") indiquant que le composant balise pour une validation globale du formulaire. ne doit s'exécuter que si l'utilisateur s'est préalablement authentifié. Et la suite ? Encore plus d’intégrations… et en bonne Quelques Adds-on de JBoss Seam voie pour la standardisation A défaut d’être exhaustif, nous allons citer quelques autres fonctionnali- On retrouve dans les nouvelles fonctionnalités de la toute dernière ver- tés apportées par JBoss Seam facilitant le développement d’applica- sion 2.0 BETA de JBoss Seam cette volonté d’intégrer d’autres solu- tions web java. La dernière version de production de Seam intègre un tions au service du développement des applications JEE, comme par certain nombre de bibliothèques " utilitaires " comme iText pour générer exemple le support natif pour GWT (Google Web ToolKit) et Groovy ou des PDF ou le framework de test TestNG. l’intégration d’Hibernate Search basé sur le moteur le recherche Apache Concernant AJAX, il existe trois types de support dans JBossSeam : Lucene. Cette nouvelle version propose également l’intégration de • soit vous pouvez utiliser des composants JSF qui, eux-mêmes, vont JBossWS permettant de définir des composants Seam comme web ser- incorporer une gestion AJAX (voir http://www.jsfmatrix.net/). Ce vices et incluant notamment le support des web services conversation- moyen d'utiliser Ajax est certainement le plus simple et le moins coû- nels. Gavin King, qui a lancé JBoss Seam, est également leader de la teux, par contre peu flexible (on doit rester figé aux possibilités des JSR (Java Specification Request) 299, nommée "Web Beans". L'idée composants JSF) sous-jacente de cette JSR est de normaliser certains concepts fonda- • soit il est possible d'utiliser une librairie générique de création de com- mentaux de JBoss Seam, plus particulièrement ceux concernant l'inté- posants Ajax JSF, comme ajax4jsf. Il devient alors possible d'ajouter gration de JSF et des EJB3. Cette JSR est soutenue par Borland des fonctionnalités Ajax à des composants existants. Cette solution est Software Corp, Google, JBoss Inc, Oracle Corporation, Sun Microsys- plus coûteuse que la première, bien qu'il ne soit pas nécessaire d'écri- tems et Sybase. L'approche innovante de JBoss Seam peut ainsi deve- re du code javascript ou du code Java. Elle est également plus flexible nir la clé de voûte des architectures JEE de demain. puisque le développeur définit lui-même le comportement Ajax voulu. • enfin, il est possible d'utiliser une librairie de JBossSeam : la librairie ■ Agnès CREPET, Architecte, SQLI ■ Frederic VALENZA, SQLI

Programmez! - N°102 59 NOVEMBRE 2007 60-62 22/10/2007 16:44 Page 60

Développement Web EN BREF Exploiter un site web 2.0 Avec le web 2.0 on est passé d'une collection de sites Web s’apparentant à une gigantesque bibliothèque à une plate-forme informatique à part entière et ce au profit de l’utilisateur. L’internaute a été replacé au centre de cette nouvelle plate-forme de participation.

’internaute devient un véritable acteur, il est actif et fait désormais partie d’un L système collaboratif alimenté par ses utilisateurs. Créer son blog, diffuser ses pho- tos et ses vidéos, échanger des données, tout cela est possible grâce au Web 2.0. Ainsi, l'internaute n'est plus un simple consommateur d'informations. Il peut désor- mais devenir un acteur du réseau et un pro- ducteur d'information. L’utilisateur a désor- mais les droits de lecture, d’écriture et d’exé- cution sur vos applications. t concédés pour un engagement annuel L’approche Marketing Le web 2.0 n’est pas seulement une évolution technologique, c’est aussi un véritable phéno- mène social qui marque déjà les stratégies de marketing et de communication des entre- prises. Souvent diabolisées, les pratiques marketing 2.0 existent bel et bien et viennent chambouler toutes les pratiques existantes. Le marketing de masse tend à se transformer Fig. 1 en marketing " one-to-one ". Google est sans défaveur. Pour cela, je vous préconise l’utilisa- permettra aussi d’apporter une réelle valeur doute l’exemple le plus avant-gardiste du tion d’une rédaction " pyramidale inversée " ajoutée à votre contenu initial et donc d’être domaine, qui se sert de votre contenu (Blog- pour votre contenu. Par ce terme, j’entends référencé de façon intelligente et sémantique ger, Gmail,...) pour créer ses propres revenus que tout contenu doit commencer par avoir un sur la plupart des moteurs de recherche. publicitaires. Ces pratiques ne sont pas appré- titre clair, informatif et constitué d’un mot clé ciées de tous, mais semblent visiblement por- pour les moteurs de recherche. Un sous-titre Le web 2.0 d’un point ter leurs fruits. Communauté, liberté, associé à une accroche sera bien vu des de vue technologique créativité, “illimitation”, participation, tous ces moteurs de recherche et permettra de garder AJAX concepts vous permettent de fidéliser vos visi- l’internaute attentif. Votre premier paragraphe, La technologie la plus représentative et la plus teurs, cela dans le seul but de faire fructifier quant à lui, doit répondre à la problématique utilisée du web 2.0 est la technologie AJAX leur nombre. Avec les technologies 2.0 vous posée dans le titre ou le sous-titre. Chaque (Asynchronous JavaScript And XML). Comme pouvez enregistrer, analyser les comporte- paragraphe commencera par la conclusion de son nom l’indique, il ne s’agit que de JavaS- ments de vos utilisateurs, mais aussi trouver celui-ci. Pour pallier le concept web 2.0 la der- cript et de traitement de données via XML. leurs centres d’intérêts en fonction de leur nière phrase de votre contenu pourra, pour- Pour apporter une réelle valeur ajoutée à cette activité au sein de votre application. Si vous quoi pas, interpeller directement l’internaute, technologie, AJAX a été couplé à la technologie souhaitez exploiter le concept 2.0 à 100%, comme par exemple : " Qu’en pensez-vous ? ". DHTML qui consiste à dynamiser les docu- vous devez vous servir de toutes les données Il ne s’agit ni plus ni moins que de mettre en ments HTML. En mélangeant ces deux techno- que vous avez en votre possession et ce, dans avant tous les points clés au début de votre logies ont obtient de bien belles applications le but de servir l’utilisateur et donc indirecte- contenu. Chaque visiteur de votre site doit être comme "Live.com ", " Yahoo Mail ", " Google ment de vous servir. perçu comme une source potentielle de conte- Spreadsheets ", etc. qui démontrent des inter- nu, il est de votre devoir de permettre à l’inter- faces interactives et parfois même animées. Le contenu 2.0 naute de s’exprimer sur n’importe quel type de L’apparition de ces nouvelles technologies a Le web 2.0 a fait place à des utilisateurs 2.0. contenu que vous proposez. Le fait de créer du bien entendu demandé un remaniement cer- Un utilisateur qui ne trouve pas le contenu contenu autour d’un sujet vous permettra non tain des architectures web, et ce, toujours au qu’il recherche sur votre site n’hésitera pas à seulement de fidéliser vos visiteurs en leur profit de l’utilisateur (Fig. 2). se rediriger vers un autre site et ce en votre donnant la sensation qu’il est actif mais vous Le schéma 2 montre comment réagit votre AMEN RCS PARIS : B 421 527 797 IN WEB WE TRUST : Nous croyons au web Voir conditions Générales de Vente sur www amen fr *Prix au 01/01/2007 Tous ces tarifs son

Programmez! - N°102 60 NOVEMBRE 2007 60-62 22/10/200716:45Page61

AMEN RCS PARIS : B 421 527 797. IN WEB WE TRUST : Nous croyons au web. Voir conditions Générales de Vente sur www.amen.fr. *Prix au 01/01/2007. Tous ces tarifs sont concédés pour un engagement annuel. (1) Du lundi au samedi de 9h à 18h au 0899 70 9001 (1,34 € l'appel puis 0,34 €/mn). (2) Garantie satisfait ou remboursé sous 10 jours. AMD, le logo AMD opteron et ses déclinaisons sont des marques déposées de Advanced Micro Devices Inc. ** Offre d'une valeur de 412,62 € TTC, réservée aux 300 premiers clients ayant souscrit sur une période de 6 mois minimum à un serveur dédié DUO avec système d'exploitation Windows. elle vouspermettrad’atteindre lasérénitéabsolue assistance techniquepar mailettéléphone6j/7 techniques :architecture réseauredondée, bandepassantedédiée 2GB, hautedisponibilité(99,9%), avancées Nous avonsfoienunidéal deservices,surtoutlorsqu’ilvouspermetbénéficier desdernières NOMS DEDOMAINE Pour plus de renseignements XHTML, CSS,Javascript… XML, ASP.NET 2.0,DHTML, création CSS,priseencharge : professionnelle dynamiques dequalité pour créerdessitesweb dont vousavezbesoin vous offre touslesoutils Microsoft Expression Web OFFERT** ! - de performance! pour vousoffrir deuxfoisplus Vous n'avezpasànousprier dédiésDUO serveurs HÉBERGEMENT 0 8925566 77 - CRÉATION DESITE-E-COMMERCE . (1) . Quantànotre ‘Garantie satisfaitouremboursé’ Si vouscroyez auweb, vous croirez ennous. (0,34 € domaines -Trafic illimité 6 adresses IP-InterfacePlesk8jusqu'à300 Disque dur2x250GB-Raid1matériel AMD Opteron 1214-2x2,2GHzRAM4GB (238,00 4000 DUO domaines -Trafic illimité 4 adresses IP -InterfacePlesk8jusqu'à300 Disque dur2x200GB-Raid1matériel AMD Opteron 1212-2x2,0GHzRAM2GB (178,20 2000 DUO (118,40 1000 DUO domaines -Trafic illimité 2 adresses IP -InterfacePlesk8jusqu'à100 Disque dur2x160GB-RaidSoft AMD Opteron 1210-2x1,8GHzRAM1GB vous offrir coeur, disquesdursenRAID,pour basée surdesprocesseurs double / min) Serveurs dédiésDUO NOUVEAU ou € € € ttc/mois*) ttc/mois*) ttc/mois*) www.amen.fr de serveursdédiésDUO lance lanouvellegamme les plusexigeants,AMEN Pour lesprofessionnels 2 foisplusdepuissance. 199 149 99 Compatibles & - € RÉFÉRENCEMENT € € ht/mois* ht/mois* ht/mois* (2) , 60-62 22/10/2007 16:45 Page 62

Développement Web

Fig : 2 ajoutée à cette application en termes de navi- gation et de fonctionnalité (Fig. 1). Vous l’aurez compris, AJAX devra être utilisé à bon escient en terme de sécurité mais aussi en terme de contenu. Il est important d’être conscient que toute donnée récupérée via la technologie AJAX ne sera pas indexée par les moteurs de recherche.

L’architecture Je ne rentrerai pas en détail sur cette partie qu’est l’architecture. Je vous conseillerai sim- plement d’orienter le plus possible votre appli- cation vers une application de type SaaS (Software as a services), ceci dans le but de pouvoir exposer vos données mais aussi de pouvoir les partager. Distribuer vos services vous permettra de vous faire connaître et par conséquent de faire augmenter votre quota de visiteurs. Inutile de vous rappeler qu’API et RSS ont fait le succès de très grands noms du web 2.0 comme Flick-R, Technorati, ou Twitter.

Conclusion Le web 2.0 n’est finalement qu’un regroupe- ment d’approches, de technologies et de application lorsqu’il s’agit d’une application logique métier dans un fichier JavaScript lisible méthodes qui permettent aux créateurs d’ap- web classique et lorsque cette même applica- par tout un chacun. Vous devez vérifier toutes plications d’aborder les problèmes complexes tion a été remaniée, redéveloppée avec la les données envoyées à votre application que sont les réseaux sociaux, le marketing, la technologie AJAX. On peut très facilement qu’elles le soient par la méthode GET ou par la participation etc. et d’apporter des résultats s’apercevoir que le nombre de requêtes au méthode POST. AJAX est donc un réel plus efficaces. Le web 1.0 reflétait des limitations serveur augmente nettement, mais qu’au final pour rendre agréable la navigation de l’utilisa- technologiques ainsi que des pratiques rigides, le trafic transité sur le réseau est bien moins teur au sein de votre application. La personna- aujourd’hui le web 2.0 semble ouvrir de nou- conséquent. En effet, comme seulement des lisation d’une application est sans doute la veaux horizons où l’internaute se retrouve plon- petites parties de votre page sont rafraîchies, partie la plus appréciée des utilisateurs. Vous gé au cœur du système, la web2sphère… cela engendre un coût de bande passante pourrez trouver un très bon exemple sur le site A vous de la construire. moindre que si vous aviez rechargé toute la www.guidetele.com où l’utilisateur a la possibi- page. Il est donc très important de prendre en lité de consulter son programme télévisé via ■ Guillaume André compte ce critère. Le JavaScript se trouvant du une interface riche et peut aussi sauvegarder Intégrateur .NET, Designer Wygwam côté client, vous allez devoir redoubler de pru- son propre bouquet de chaînes lorsqu’il est http://www.wygwam.com/ dence. Il n’est jamais anodin de déporter de la enregistré. AJAX apporte ici une réelle valeur http://www.wpfstorm.com/

Programmez! - N°102 62 NOVEMBRE 2007 63-66 22/10/2007 16:54 Page 63

EN BREF Construire des applications MVC avec le ZEND Framework Le Zend Framework a été développé par la société Zend afin de faciliter le développement et la maintenance des sites PHP dynamiques. L’un de ses principaux avantages est qu’il est librement téléchargeable sur le site de Zend.com. Ce framework offre un ensemble de classes et méthodes (Accès aux bases de données…) permettant d’alléger le code déployé dans les pages PHP

e zend Framework offre aussi la possibilité de développer selon l’architecture MVC (Modèle, Vues, Contrôleurs) qui permet de L dissocier les aspects logique métiers, données et présentation d’une application. C’est donc la mise en place de ce type d’architec- ture qui sera détaillé tout au long de cet article.

Les pré-requis La version 1.0.1 du framework ne fonctionne pas sur une version de PHP inférieure à la version 5.1. Dans le fichier de configuration du ser- veur web Apache, il faut charger le module " mod_rewrite " permettant la réécriture d’adresse et autoriser l’utilisation de celui-ci en affectant la valeur " all " au paramètre " AllowOverride ". Enfin, dans le fichier php.ini, activer l’extension php_pdo_mysql.dll

Projet Notre projet test, va consister à gérer une collection de bonsaïs. La page d’accueil devra lister l’ensemble des bonsaïs de notre collection et une autre page permettra d’en ajouter. Un bonsaï sera identifié par un numé- ro automatique et nous ne nous intéresserons qu’à l’espèce et à l’âge. Figure 2 : Fonctionnement général

Arborescence Expliquons ceci par un exemple. Soit l’URL http://localhost/bonsai- Création des répertoires zend/index/ajouter Libre à vous d’organiser les répertoires de l’application, mais la com- Le découpage de cette URL peut être effectué comme suit : munauté de Zend préconise l’arborescence décrite sur la figure 1. http://localhost/bonsaizend/CONTROLLER/ACTION

/racine de l’application Etape 1 • dossier " application " qui contiendra les L’URL est interceptée par le fichier .htacess qui la redirige vers le rou- parties MVC. (Veillez à respecter les noms teur, ce dernier la transmettant au contrôleur adéquat et l’architecture de ce répertoire) Comment déterminer le bon contrôleur ? • dossier " isc " contenant les Images, Le framework de Zend est très strict sur le système de notation des Script et Css (Vous pouvez le nommer à fichiers. Ce dernier précise que tout contrôleur doit bien évidemment se votre convenance) trouver dans le répertoire /application/controllers mais doit respecter • dossier " Zend " contenant le framework la règle de notation suivante : directement issu du répertoire library NomducontroleurController.php le nom du contrôleur devant commencer contenu dans l’archive du framework par une majuscule Dans notre cas, le nom du contrôleur est donc " index " ce qui implique Figure 1 : Arborescence d'un projet zend MVC donc que Le contrôleur portant le nom " IndexController.php " sera Fonctionnement général appelé. Lorsqu’une requête web arrive sur le serveur, celle-ci est automatique- ment traitée par un fichier .htaccess, qui est chargé de la rediriger vers Etape 2 un routeur. Ce routeur transmet la requête au contrôleur qui l’analyse et Une fois le contrôleur adéquat trouvé, celui-ci doit contenir une action exécute l’action nécessaire. Une action correspond à une page web correspondant au dernier membre de l’URL saisie (ici " ajouter ") (vue) portant l’extension " .phtml ". Là encore, une notation précise doit être respectée :

Programmez! - N°102 63 NOVEMBRE 2007 63-66 22/10/2007 16:55 Page 64

Développement Web

nomdelactionAction() : la première lettre de l’action devant être en minuscule. // Paramétrage des contrôleurs Notre contrôleur doit donc contenir l’action " ajouterAction() " $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); Etape 3 $frontController->setControllerDirectory('./application/controllers'); Vient ensuite, le chargement de la vue. Celle-ci doit se trouver dans le répertoire /application/view/scripts auquel s’ajoute un répertoire por- // Recherche du contrôleur adéquat tant le nom du contrôleur, ce dernier contenant une page de type phtml $frontController->dispatch(); correspondant au nom de l’action : /application/view/scripts/index/ajouter.phtml Le contrôleur La figure 3, illustre le fonctionnement de cet exemple et permet d’assi- Si l’on reprend le fonctionnement général de Zend, il convient de créer miler le concept MVC du Zend framework. un fichier contrôleur et les pages correspondant à chaque action. Comme énoncé plus haut, notre contrôleur se nommera IndexControl- ler.php. Et sera constitué de deux actions : indexAction() correspondant à l’action à effectuer lors de l’arrivée sur l’accueil du site, ajouterAc- tion() qui permettra d’ajouter de nouveaux éléments. Le contrôleur devra être créé dans le répertoire /application/controllers comme suit :

class IndexController extends Zend_Controller_Action { //Action d'accueil function indexAction() { echo "

Appel de la page scripts/index/index.phtml

"; } Figure 3 : Illustration de l'exemple général

Configuration du Routeur //Action d'ajout d'un bonsaï Création des fichiers function ajouterAction() La mise en place du routeur se résume par la création des fichiers .hta- { cess et routeur.php que l’on placera à la racine du projet. Une petite echo "

Appel de la page scripts/index/ajouter.phtml

"; astuce pour créer ce fichier consiste à créer un fichier dans le NotePad } et à l’enregistrer sous le nom suivant en y incluant les guillements : " .htaccess " } Configuration du .htaccess Ce fichier va permettre de rediriger l’ensemble des requêtes http vers le Les actions routeur (routeur.php) Pour l’instant, il suffit de créer deux fichiers vides dans le répertoire /application/scripts/index/ nommés respectivement index.phtml et RewriteEngine on RewriteRule .* routeur.php ajouter.phtml. Il ne reste plus qu’à tester ! On constate donc que l’ensemble des requêtes Web vont être réécrites http://localhost/bonsaizend/ pour pointer vers le fichier routeur.php, d’où l’importance d’activer le modu- texte affiché : Appel de la page scripts/index/index.phtml le mod_rewrite d’apache et d’autoriser l’utilisation de cette réécriture. http://localhost/bonsaizend/index/ texte affiché : Appel de la page scripts/index/index.phtml Configuration du Routeur.php http://localhost/bonsaizend/index/ajouter Ce fichier spécifie les règles de routage et précise le chemin des contrô- texte affiché : Appel de la page scripts/index/ajouter.phtml leurs de l’application Si vous ne voyez pas les résultats escomptés, vérifiez d’avoir configuré correctement votre serveur Apache (cf pré-requis).

Programmez! - N°102 64 NOVEMBRE 2007 63-66 22/10/2007 16:55 Page 65

EN BREF

CREATE TABLE `db_bonsaizend`.`tb_bonsai` ( table située dans la base de données `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, protected $_name = 'tb_bonsai'; `espece` VARCHAR(45) NOT NULL, } `age` INTEGER UNSIGNED NOT NULL, PRIMARY KEY (`id`) $_name = ‘tb_bonsai’ sert à spécifier à Zend, que la classe Bonsai est ) mappée avec la table tb_bonsai de la base de données

Libre à vous d’y ajouter quelques enregistrements. Les contrôleurs La seconde étape consiste à paramétrer notre application pour qu’elle Listing des bonsaïs : se connecte à la base de données. Pour ce faire, il faut créer un fichier ini situé dans le répertoire " application ". Nous appellerons ce fichier //Chargement de la classe Bonsai " configuration.ini " dont le contenu sera le suivant : function init() { [general] $this->view->baseUrl = $this->_request->getBaseUrl(); db.adapter = PDO_MYSQL Zend_Loader::loadClass('Bonsai'); db.config.host = localhost } db.config.username = root db.config.password = motdepasseroot db.config.dbname = db_bonsaizend //Action d'accueil une fois ce fichier créé, la configuration devra être spécifiée dans le function indexAction() fichier routeur.php : { $bonsai = new Bonsai(); //On spécifie le chemin du répertoire models // Parcours de la table tb_bonsai grace à la méthode fetchAll() set_include_path('.' $this->view->bonsais = $bonsai->fetchAll(); . PATH_SEPARATOR . './application/models/' . PATH_SEPARATOR . get_include_path()); }

include "Zend/Loader.php"; L’analyse du code se fait d’elle-même. Tout d’abord, nous exécutons un chargement de la classe Bonsai grâce à la fonction init(). Etant donné //Chargement des classes Zend nécessaires que le listing du catalogue des bonsaïs se fera dans la page d’accueil, il Zend_Loader::loadClass('Zend_Controller_Front'); nous faut étoffer la fonction indexAction(). Cette fonction a pour fonction Zend_Loader::loadClass('Zend_Config_Ini'); première d’instancier la classe Bonsai() puis, grâce à la méthode " fet- Zend_Loader::loadClass('Zend_Registry'); chAll() " de la classe zend_db_°table, elle parcourt la liste complète des Zend_Loader::loadClass('Zend_Db'); bonsaïs, stockée dans la table tb_bonsai. Chaque donnée sera stockée Zend_Loader::loadClass('Zend_Db_Table'); dans la variable " bonsaï " qui sera transmise à la vue (view)

// Chargement de la configuration Création d’un nouvel enregistrement $config = new Zend_Config_Ini('./application/configuration.ini', 'general'); $registry = Zend_Registry::getInstance(); function ajouterAction() $registry->set('config', $config); { if ($this->getRequest()->isPost()) // Configuration de la base de données { $db = Zend_Db::factory($config->db->adapter, $config->db->config-> toArray()); //Recupération des données grâce à la méthode Zend_Filter_ Zend_Db_Table::setDefaultAdapter($db); StripTags Zend_Loader::loadClass('Zend_Filter_StripTags'); Maintenant, il ne nous reste plus qu’à créer le modèle (mapping) dans $filtre = new Zend_Filter_StripTags(); le répertoire /application/models. Ce dernier se nommera bonsai.php $espece = $filtre->filter($this->getRequest()->getPost('espece')); et sera composé des lignes suivantes : $age = $filtre->filter($this->getRequest()->getPost('age'));

$espece,'age' => $age,); class Bonsai extends Zend_Db_Table $bonsai = new Bonsai(); { $bonsai->insert($donneesformulaire); //on effectue le mapping entre le nom de la classe et le nom de la

Programmez! - N°102 65 NOVEMBRE 2007 63-66 22/10/2007 16:56 Page 66

Développement Web EN BREF

} baseUrl aura pour valeur http://localhost/bonsaizend } Ajouter.phtml

En premier lieu, on vérifie que la méthode " Post " a été exécutée. Si c’est le cas, on utilise la classe Zend_filter_StripTags servant de filtre pour évi- ter l’utilisation du code HTML dans les données transmises. Enfin, on récupère les données pour les stocker dans un tableau qui servira à l’in- sertion des données dans la base. A noter l’utilisation de la méthode Figure 5 : Page d'ajout insert() nous évitant l’écriture complète du code SQL d’insertion. Les vues

AJOUT D'UN NOUVEAU BONSAI

Je ne m’attarderai pas sur l’utilisation de CSS, images et autres compo- sants graphiques dans les vues, étant donné que cet article se veut
retrouver l’exemple complet accompagné de ses sources sur mon blog. Index.phtml Figure 4 : Page d'index

MES BONSAIS

Espece
Age
Accueil bonsais as $bonsai) : ?> Cette vue est très simple à analyser. Le formulaire fait appel à l’action " ajouter " en utilisant la méthode " post ". Un lien vers la page d’accueil est également présent. Conclusion Tout au long de cet article vous avez pu apprécier une mise en place
Espece Age
escape($bonsai->espece);?>escape($bonsai->age);?>
certes minimaliste du framework zend mais qui vous permet de com- prendre le mécanisme de réalisation d’une application de type MVC
avec ce framework. Nouveaux On constate aisément que celui-ci peut faciliter énormément le dévelop- bonsais pement d’applications php en offrant une multitude de classes, mais un apprentissage de celui-ci est nécessaire afin de connaître et d’utiliser l’ensemble des classes à bon escient. Si vous souhaitez aller un peu plus loin, vous trouverez sur mon blog l’application complète (avec CSS, images….) accompagnée de L’action indexAction récupère l’ensemble des données contenues dans ses sources. la table tb_bonsai. La vue index.phtml parcourt les résultats transmis par l’action (variable ($bonsais)) pour les afficher. On remarque égale- ment l’utilisation de la boucle de parcours " foreach ". La fonction " escape " du framework Zend est identique à la methode htmlspecial- char() de php servant à l’échappement des caractères spéciaux. ■ Aurélien Vannieuwenhuyze Enfin, un lien est ajouté en bas du tableau pour appeler l’action " ajouter " Ingénieur Concepteur / réalisateur via le lien $this->baseUrl; ?>/index/ajouter Sylis France (www.sylis.com) Si vous testez votre application sur votre serveur local, la variable Blog : http://aurelienv.no-ip.org

Programmez! - N°102 66 NOVEMBRE 2007 67-68 22/10/2007 16:56 Page 67

LANGAGE : -- APPLICATION : SERVICES Code DIFFICULTÉ : ••••• SOURCE : oui Utiliser UDDI intelligemment 1re partie Les architectures orientées services (SOA) sont aujourd’hui devenues le " must-have " des entreprises. Malheureusement, l’expérience montre que mettre en place ce type d’architecture est tout sauf simple. Voici comment mettre en œuvre de façon simple et pragmatique un des composants fondamentaux de SOA : l’annuaire UDDI.

i cela fait maintenant plusieurs années qu’on nous parle de vrir la structure des fonctions exposées par les services et l'emplace- SOA comme le Walhalla du système d’information, force est de ment physique de ces services. S constater que peu nombreux sont les élus dans ce pays béni Pour ce faire, il stocke des informations de plusieurs niveaux : des Dieux. Les raisons de cette adoption encore difficile sont assez • à un haut niveau il stocke les informations concernant les entreprises claires. et les services qu'elles proposent (l'équivalent des pages jaunes d'un annuaire) SOA : une bête difficile à apprivoiser • les adresses et autres informations de contact des entreprises D'abord les standards sont mouvants. Web services, BPEL, WS-*, ... la (pages blanches) liste d'acronymes qui cachent des technologies encore immatures est • mais aussi toutes les informations techniques permettant d'utiliser longue. Pour le seul cas des Web services, cela fait depuis 2000 qu'on un service nous rebat les oreilles en nous disant qu'il s'agit là de la technologie de Un annuaire UDDI se construit à partir de quatre briques fondamen- demain. Mais en pratique, pour ceux qui s'y sont vraiment essayés, il tales, chacune possédant un identifiant unique (UUID) dans l'annuaire : faut plusieurs mois pour faire son chemin entre les différentes implé- • l'entité commerciale : BusinessEntity mentations plus ou moins réussies, les différents modes d'encodage et • les offres de service : BusinessService de communication (RPC ou document, litteral ou encoded ...), les • les liaisons UDDI : bindingTemplates modes de développement (contract-first, code-first), génération des • les types de service : tModel stubs (statique, dynamique)... et encore sans aborder la fameuse inter- La structure businessEntity décrit une entreprise et les divers services opérabilité promise mais à proprement parler jamais vraiment (ou diffici- qu'elle offre. Elle renseigne aussi sur les catégories auxquelles appar- lement) obtenue ! tient l'entreprise. Pour ce faire, UDDI dispose d'un référentiel de taxono- Ensuite, les bonnes pratiques pour mettre en place une architecture mies. Cette structure regroupe plusieurs informations telles que le nom orientée services sont encore difficiles à dégager. Comment aller vers de l'entreprise, son adresse ou encore l'URL de son site Web. A ces infor- SOA sans tout casser et laisser le système d'information en travaux, mations s'ajoutent des liens vers les autres entités de l'annuaire UDDI. voire indisponible pendant de longs mois ? Faut-il une gouvernance? La structure businessService décrit le service publié par une entreprise. Comment s'assurer du respect des règles par les projets ? Nombreuses Elle fait référence à une catégorie de service afin de permettre les sont les questions qui se dressent une fois la décision prise de mettre recherches en fonction de types de services particuliers. en place SOA. De plus, même si par sagesse, vous souhaitiez vous La structure bindingTemplate décrit les informations destinées à accé- adjoindre les services d'un ou plusieurs consultants capables de vous der à un service spécifique. Un service pouvant être disponible par dif- assister dans cette démarche (car SOA est plus une démarche qu'un férents protocoles de communication, une entité businessService peut ensemble de technologies), l’expérience sur le sujet est encore ardue à pointer vers plusieurs entités bindingTemplate. Chaque entité de liaison trouver sur le marché. spécifie, dans la valeur accessPoint, le protocole utilisé. De ce fait, il apparaît qu’une approche stratégique de l’architecture La structure tModel permet de mettre à disposition les pointeurs vers les misant sur la SOA est encore réservée aux sociétés ayant les moyens spécifications techniques du service. Un tModel permet d'identifier les en termes de temps et d’hommes. Comment dans ce cas aller vers SOA implémentations du service. Si deux entités commerciales référencent si l’on est une petite, moyenne ou même grande entreprise avec peu de le même tModel, cela garantit que les deux entreprises implémentent la budget sur le sujet ? même spécification du service. Un tModel permet également de repré- senter des taxonomies, des catégories, un système d'identification... Comprendre les termes Les relations entre ces différentes briques sont illustrées ci-contre Tout d'abord, il est important de bien comprendre ce qu'est UDDI et ce dans ce diagramme UML tiré de "UDDI Technical White Paper" qu'il apporte. UDDI est l'acronyme de Universal Description, Discovery, (http://uddi.org/pubs/uddi-tech-wp.pdf) : and Integration. Quelle ambition ! En fait, il s'agit tout bêtement d'un annuaire se basant sur XML pour fournir ou recevoir des données. Il faut Première utilisation d’un annuaire cependant savoir que UDDI n'est pas la seule spécification d'annuaire Commençons à présent les choses sérieuses. Il vous faut tout d'abord de ce type : parmi les plus connus, il existe également ebXML (Electro- une implémentation d'un annuaire UDDI. Pour cela, téléchargez la derniè- nic Business XML) qui est, lui, plus orienté B2B. Fondamentalement, re version de jUDDI (http://ws.apache.org/juddi). Il s'agit d'une simple UDDI fournit, au sein d'une architecture SOA, un point d'accès central application web qui peut tourner dans n'importe quel conteneur de serv- aux consommateurs de services, en leur permettant à la fois de décou- lets comme Tomcat. Afin de parvenir de façon simple à faire tourner les

Programmez! - N°102 67 NOVEMBRE 2007 67-68 22/10/2007 16:58 Page 68

LANGAGE : -- APPLICATION : SERVICES Code DIFFICULTÉ : ••••• SOURCE : oui

structurer l’information, la spécification n’impose rien et il faut considé- rer l’annuaire comme une simple base de données structurée. Ainsi pour référencer un service et lui associer un binding de type web servi- ce, il n’existe pas une seule et unique façon de le faire et OASIS ne fait que fournir une best practice : http://www.uddi.org/pubs/wsdlbestprac- tices.pdf. La structuration proposée dans ce document est la suivante :

StockQuote Service WSDL description of a standard stock quote service interface WSDL source document. http://stockquote-definitions/stq.wsdl détails de ce qui est présenté ci-après, le mieux est encore de suivre les indications décrites à cette URL : http://wiki.apache.org/ ws/jUDDI_HOW- Tos. Afin de valider votre installation et notamment la connexion à la base vous suffit d’aller dans ‘Help > Software updates > Find and Install > sear- ch for new features to install’ et sélectionnez Web Tools Platform. L’explo- rateur Web Services de WTP n’est clairement pas le meilleur outil pour naviguer dans un annuaire mais il a le mérite d’être facilement installable Le point le plus important est que le tmodel contienne un categoryBag sur une plate-forme de développeur standard. Après le redémarrage contenant une entrée du type ‘uddi-org:types’ et dont la valeur est d’Eclipse, lancez le web services, explorez en choisissant le menu ‘run > ‘wsdlSpec’. C’est un peu maigre, et qui plus est, aucune contrainte Launch the web services explorer’. Ouvrez votre annuaire UDDI en entrant n’est associée à aucun de ces éléments. Il faut donc compter sur le bon les paramètres suivants dans la fenêtre principale : vouloir des ‘publieurs’ de services pour pouvoir espérer une compatibili- té des requêtes de recherche d’un annuaire à un autre. Bien sûr, entre Registry name : local temps, de nouvelles ‘technical notes’ ont été éditées par OASIS. Mais Inquiry URL : http://localhost:8080/juddi/inquiry elles ne sont venues ajouter que de nouvelles ‘suggestions’ d’enrichis- sements sémantiques afin de pouvoir exécuter des recherches de ser- Cliquez ensuite sur ‘Go’ puis sur ‘login’ et entrez les paramètres suivants : vices sur de nouveaux critères, comme par exemple le type de transport, etc. Publish url : http://localhost:8080/juddi/publish Le service que nous avons précédemment créé grâce à l’explorateur User id : juddi Web Services de WTP est conforme aux best practices de l’OASIS à ceci Password : password près que le nom de la clé contenant ‘wsdlSpec’ est ‘types’ au lieu de ‘uddi-org:types’, mais ceci est mineur. Maintenant que vous êtes connecté en tant que personne habilitée à Comment à présent utiliser les informations contenues dans l’annuaire publier dans l’annuaire, nous allons créer un nouveau business. Pour pour faire une découverte automatique de service ? Il est pour cela cela, cliquez sur le bouton ‘publish’ en haut de la fenêtre principale nécessaire d’utiliser une API de requêtage qui va interroger l’annuaire Vérifiez que la liste déroulante affiche bien ‘business’ et que le mode de en lui envoyant des requêtes SOAP. Si vous souhaitez en faire l’expé- création est bien ‘simple’. Entrez alors le nom et la description de votre rience rapidement, il est possible d’utiliser la console de juddi à cet business et validez en appuyant sur ‘Go’. Votre premier business est effet en utilisant l’URL : http://localhost:8080/juddi/console. Cette créé dans l’annuaire. A présent, créons le premier service en procédant console vous permet de sélectionner un type de requête et de remplir de la même façon, mais en choisissant cette fois ‘service’ dans la liste les paramètres remplacés (astucieusement) par des caractères ‘*’. En déroulante. Entrez l’URL du WSDL du web service, son nom et sa des- Java, il existe plusieurs façons de réaliser la même chose sans passer cription. Votre service doit maintenant apparaître dans la liste des ser- par les API SOAP de bas niveau. Il est possible d’utiliser soit UDDI4J qui vices dans l’arbre de gauche. est une API exclusivement dédiée à UDDI mais il est également possible d’utiliser l’API standard JAXR qui permet de requêter plusieurs types Et maintenant ? d’annuaires de services comme UDDI ou encore ebXML. Nous arrivons à présent dans la partie où SOA, et en particulier UDDI, nous laisse bien seuls. En effet, si UDDI propose une possibilité de ■ Fabrice Dewasme

FORUM Programmez! dialogue- N°102 et assistance68 NOVEMBRE 2007www.programmez.com 69_70 22/10/2007 16:58 Page 69

LANGAGE : JAVA APPLICATION : TOUT Code DIFFICULTÉ : ••••• SOURCE : non Pourquoi faut-il s'intéresser à Groovy ?

Groovy est un des "nouveaux" langages à la mode. Si vous vous demandez encore pourquoi des gens s'évertuent à créer de nouvelles syntaxes, c'est vraisemblablement parce que vous ne connaissez pas suffisamment de langages différents. Dans le cas contraire, vous savez déjà que Java n'a rien inventé. Il a "seulement" agrégé tout un tas de bonnes choses présentes dans d'autres langages.

Groovy peut être vu comme une tentative d'aller encore un peu plus loin premier = uneListe[0] en ajoutant à Java ce qu'il a oublié d'intégrer. sousListe = uneListe[1..3] dernier = uneListe[-1] Groovy : une simplification de Java entier6 = uneMap.six 1 La première bonne nouvelle pour vous si vous connaissez Java, uneMap["huit"] = 8 c'est que Groovy reprend sa syntaxe en la simplifiant. De nombreux élé- uneListe[5]="six" ments syntaxiques deviennent optionnels, tels les points virgules en fin for (i in 0.. x * x } //retourne le paramètre x au carré println squared.call(12) } squaredList = [1, 2.1, 3.2f, new Short((short)9)].collect(squared)

def salute(Object[] who) { //def pour lever l'ambiguïté Les closures apportent de nouveaux raccourcis syntaxiques : println "${new Date()}. Hello ${who.join(', ')}" • les closures ont un paramètre 'it' par défaut } • la méthode call peut être remplacée par l'opérateur '( )' } • si le dernier paramètre d'une méthode est une Closure, il peut être sorti des parenthèses Les opérateurs sont considérablement améliorés avec Groovy. On De nombreuses méthodes comme le "collect" existent pour énumérer, appréciera l'opérateur "." et surtout "?.", combiné avec le '=' qui utili- rechercher, collecter, trier, compter, … et pas seulement sur les collections. sent les getters et setters s'ils sont présents : new File("test.txt").eachLine { println it } println personne.adresse.ville.code //passe par les getters println personne?.adresse?.ville?.code //pas de NullPointerException 2. Surcharge d'opérateur et Extension personne?.adresse?.ville?.code = "44000" //passe par le setter La surcharge d'opérateur est basée sur l'association automatique des opé- Beaucoup resteront dubitatifs devant l'exemple suivant : rateurs avec leur nom anglais ('+' avec 'plus', '-' avec 'minus', etc.). On pourrait, par exemple, définir une classe Montant regroupant une valeur println "Hello world!"-"Hello"-'!'+('-'*3) //produit " world---" et une devise et surcharger l'opérateur de multiplication comme suit : La liste des astuces syntaxiques comme celle-ci est longue. Citons rapi- dement quelques autres exemples : def multiply(Number n) { new Montant(valeur*n, devise) //return implicite uneListe = ["un", "deux", "trois", "quatre", "cinq"] } uneMap = ["cinq":5, "six":6, "sept":7] //def unMontant = new Montant(99, Devise.EURO) * 3.25

Recevez la NewsletterProgrammez! www.programmez.com/inscription.php- N°102 69 NOVEMBRE 2007 69_70 22/10/2007 16:59 Page 70

LANGAGE : JAVA APPLICATION : TOUT Code DIFFICULTÉ : ••••• SOURCE : non

Cependant, pour pouvoir écrire 3.25 * unMontant, il faut recourir au méca- rescentes. Quatre méthodes abstraites ("createNode" avec quatre nisme d'extension. Le principe est de permettre l'ajout de méthodes à des signatures différentes) doivent être redéfinies dans les sous-classes. classes dont nous ne pouvons pas modifier la définition comme par La magie du builder peut alors opérer, comme dans l'exemple suivant : exemple les classes systèmes. La construction, un peu spéciale, consiste à définir des méthodes statiques avec la classe à étendre en premier def writer = new StringWriter() paramètre. Ainsi nous pourrions écrire une classe MontantExtensions def xml = new groovy.xml.MarkupBuilder(writer) avec une surcharge de l'opérateur de multiplication des nombres : xml.comptes() { compte(no:'21723465000', solde:756.37) { def static Montant multiply(Number n, Montant m) { return m*n transactions() { } debit(date:'01/05/2007', type:'CHEQUE', montant:99.90) Cette définition peut ensuite être utilisée avec l'instruction "use" debit(date:'02/05/2007', type:'RETRAIT', montant:40) comme suit : } } use(MontantExtensions.class) { } println 3.25 * 100.euros() println writer.toString() }

La syntaxe est en fait un habile mélange des astuces vues plus haut 3. Métaclasse (construction de tableaux d'objets avec les arguments excédentaires, closu- Il s'agit de manipuler les classes en tant qu'objets de description. Bien re sortie des parenthèses lorsqu'elle est en dernier paramètre, guillemets évidemment, la notion de métaclasse de Groovy recouvre le mécanisme optionnels, traitement générique des messages, …). Bien sûr, l'exemple d'introspection de Java en simplifiant considérablement l'écriture mais serait plus intéressant en introduisant des boucles ou des accès JDBC ou le plus intéressant n'est pas là. toute autre production de données. Le texte xml obtenu est le suivant : Une métaclasse peut être installée dynamiquement autour de n'importe quelle classe Groovy ou Java. Elle intercepte alors tous les "messages" envoyés pour cette classe, ce qui permet de changer le comportement. Cela peut consister à intercepter les messages pour les loguer, les fil- trer, les mesurer, les rediriger automatiquement vers un autre objet (proxy) ou même répondre de manière générique à des messages qui ne seraient pas implémentés explicitement. Un des exemples standard montre comment modifier le comportement de la classe String mais voyons plutôt le constructeur générique propo- sé en standard pour toutes les classes : Il existe plusieurs sous-classes de BuilderSupport, respectant exacte- def cust = new Customer(id:1, name:"Gromit", dob:new Date()) ment cette même syntaxe pour des besoins spécifiques : NodeBuilder, Le tableau de couples propriété:valeur (les guillemets sont optionnels MarkupBuilder, DOMBuilder, SAXBuilder, AntBuilder, SwingBuilder, … devant les ':') est construit par le mécanisme des paramètres surnumé- Pour ceux qui veulent voir un framework plus conséquent, on ne peut raires. La métaclasse intercepte les appels de constructeurs et utilise que leur conseiller d'aller voir Grails (Groovy on Rails) qui reprend les ce tableau pour renseigner les propriétés de l'instance. Ce mécanisme concepts de Ruby on Rails, un framework web extrêmement puissant. de métaclasse permet un objet extensible nommé "Expando" qui accu- mule dynamiquement les propriétés dans une map. Les propriétés pou- Conclusion vant éventuellement être des closures, invocables avec l'opérateur call 4 Java s'est imposé comme langage universel en intégrant tout un '()', on peut écrire l'exemple suivant qui ne peut que convaincre : tas de bonnes choses de ses prédécesseurs tels que C++ ou Smalltalk. De nombreux développeurs sont satisfaits mais d'autres demandent une Expando dyno = new Expando(); plus grande souplesse et se tournent vers des langages plus dyna- dyno.nom = "DUPOND" miques tels que Ruby ou Python. Groovy est une alternative intéressante dyno.prenom = "Jean" qui réussit presque à atteindre Smalltalk dans mon cœur. Je lui reproche dyno.salutation = { println "Bonjour de $prenom $nom" } juste un accroissement de la complexité syntaxique, déjà énorme de Java, pour proposer la même chose que la syntaxe ultra simple de Small- println dyno.nom talk. Cependant, l'intérêt indéniable de Groovy est son intégration extrê- dyno.salutation() me avec Java (les fichiers Groovy sont compilés en des ".class" Java). Ainsi, on peut appeler ou sous-classer du code Java dans Groovy et la Vers des frameworks puissants réciproque est vraie. Tous les outils disponibles autour de Java sont 3 Tous ces mécanismes se révèlent extrêmement puissants pour directement utilisables et là on ne peut qu'admirer ce tour de force. écrire des frameworks. Le système des builders, défini dans une classe abstraite BuilderSupport, donnera un aperçu d'un tel framework. Le ■ Jean-François LEFEVRE principe du builder est de simplifier la construction de structures arbo- SQLI Consulting

Programmez! - N°102 70 NOVEMBRE 2007 71-72 22/10/2007 16:59 Page 71

LANGAGE : JS APPLICATION : WEB 2 Code DIFFICULTÉ : ••••• SOURCE : non Scriptaculous : Javascript au secours de l'ergonomie des applications Web Nous avons vu avec DHTML Goodies un moyen intéressant de créer des interfaces utilisateurs performantes, et reproduisant l'esprit des applications traditionnelles. Dans un esprit plus créatif, Scriptaculous est plus orienté sur la manipulation d'éléments graphiques, et la dynamisation de l'interface au moyen d'effets tout Javascript.

e web 2.0 n'a pas seulement renouvelé le web en développant l'interactivité des utilisateurs. Il a également poussé à une L exploitation maximale des technologies en place, que ce soit au niveau de la manipulation de données et des communications ou au niveau de l'interface elle-même. Grâce à Ajax, on peut doter les sites web de comportements plus réactifs, et plus intuitifs que jamais. Pour bénéficier de ces nouveaux concepts sans réinventer perpétuellement la roue, partons à la découverte de Scriptaculous. Pour cet article, nous placerons nos exemples dans un fichier nommé " scriptacu- lous.html ", et les librairies dans un sous-dossier " /js ". Comme nous n'utiliserons que du Javascript, aucun serveur n'est nécessaire. Déploiement 1 La bibliothèque Scriptaculous se place à un plus bas niveau que DHTML Goodies, puisqu'elle ne fournit pas d'éléments complets d'appli- cations, donc ni image ni feuille de style, son intégration est des plus

Calque de test
grande partie sur la librairie Prototype, qui lui fournit notamment des fonc- tionnalités Ajax de tout premier ordre, ainsi que de multiples extensions Note : charger scriptaculous.js entraînera le chargement de toutes les librairies Javascript et DOM réduisant drastiquement le code nécessaire à son exé- qui la composent. Pour ne charger que celles qui sont nécessaires, il est pos- sible de les spécifier explicitement en utilisant cette syntaxe : cution. Nous aurons certainement l'occasion de détailler dans un prochain numéro cette librairie formidable. Mais pour le moment, on se contente de est fournie dans l'archive de Scriptaculous. Pour disposer de l'environne- Dans ce cas, seules les librairies effects et controls seront chargées. ment nécessaire à nos tests, rendez-vous sur http://script.aculo.us, puis Les différentes librairies sont : builder, effects, dragdrop,controls, slider. dans la section téléchargement. Récupérez l'archive scriptaculous-js- Maintenant que tout est fonctionnel, effectuons un premier test. Ajoutez 1.6.5.zip, et décompressez-la dans un dossier temporaire. Récupérer les cette portion de script après le body du document : fichiers .js des dossiers " lib " et " src " et placez-les tous dans un unique 2 La bibliothèque Scriptaculous est composée de plusieurs librai- Consultez le document : notre calque disparaît progressivement. Donc ries. Avant de se servir de leurs fonctionnalités respectives, il nous faut tout marche correctement. Au lieu d'ajouter ce script, on aurait pu éga- les charger dans notre fichier HTML. Pour cela, créons notre fichier lement ajouter ceci dans la définition du calque : scriptaculous.html, et plaçons-y les en-têtes suivants : onclick="new Effect.Fade(this)"

Le résultat est similaire, sauf qu'il est désormais nécessaire de cliquer Essais Scriptaculous sur le calque pour le voir disparaître. Ce deuxième exemple nous apprend déjà une chose intéressante, c'est que Scriptaculous accepte aussi bien un id ('calque') qu'un objet (this) lorsqu'il attend la référence d'un élé- ment à manipuler. Cette deuxième possibilité est fort pratique lorsqu'il s'agit d'appliquer des effets dynamiquement, sur des éléments dont on Ajoutons ensuite un calque qui nous servira pour nos tests : ne connaît pas l'identifiant (par exemple, lorsqu'il a été lui-même créé

Programmez! - N°102 71 NOVEMBRE 2007 71-72 22/10/2007 17:00 Page 72

LANGAGE : JS APPLICATION : WEB 2 Code DIFFICULTÉ : ••••• SOURCE : non

dynamiquement). Bien sûr les effets sont paramétrables, sans quoi l'inté-

  • Javascript rêt de telles fonctions serait très limité. Si nous souhaitons par exemple que la disparition de l'élément soit plus lente, on peut procéder ainsi : Il faudra maintenant 5 secondes à l'objet pour disparaître totalement. Tous les effets sont construits sur un prototype similaire : en premier Vous pouvez déplacer à votre gré les éléments de la liste à l'intérieur argument, la référence de l'objet sur lequel appliquer l'effet, en second, même de celle-ci. Utilisons ce principe pour un mini sondage : nous un objet anonyme (équivalent d'une table de hashage en Javascript, allons déclarer quels langage nous utilisons, en les classant par ordre matérialisée par { }) comportant les divers paramètres de personnalisa- de préférence : tion de l'effet. Ce mécanisme permet une grande souplesse quant aux arguments que l'on souhaite passer. Parfois, lorsqu'un paramètre est Propositions : indispensable, il est demandé en seconde position :
    • PHP onclick="new Effect.Scale(this,200)"
    • Ruby
    • Python Ceci aura pour conséquence de doubler les dimensions de notre calque,
    • Javascript ainsi que celles de son contenu. Si l'on avait souhaité ne doubler que la
    largeur du calque, nous aurions fait ainsi : Choix : onclick="new Effect.Scale(this,200,{scaleY:false})"
      Nous pourrions continuer assez longtemps nos petits tests sur les Il existe de nombreux effets dans Scriptaculous, dont beaucoup sont des combinaisons des cinq effets de base ("Core Effects"') que sont Et voila, on peut désormais déplacer les éléments d'une liste à l'autre, Opacity, Scale, MoveBy, Highlight et Parallel. Comme nous l'avons vus et les ordonner dans chacune. Le style 'min-height:15px' et l'option avec Scale, ces effets peuvent également être déclenchés directement. 'dropOnEmpty:true' permettent de pouvoir déplacer un élément vers Pour connaître la liste des effets disponibles, reportez-vous au Wiki offi- une liste vide. Récupérons le résultat grâce à un tout petit script : ciel de Scriptaculous : http://wiki.script.aculo.us/ Le Drag'n'drop 3 Voici certainement l'un des éléments d'interface les plus à la new Draggable('calque') Pour finir ce système de vote, il ne reste plus qu'à envoyer les résultats Cela suffit à nous permettre de déplacer le calque n'importe où sur la en Ajax au lieu de les afficher, et c'est terminé. page ! Forçons maintenant le déplacement de notre calque, comme s'il se trouvait sur une grille : Conclusion new Draggable('calque',{snap:[100,100]}) Il nous aurait été impossible dans ce bref article de faire le tour de toutes les possibilités offertes par Scriptaculous. Les deux modules C'est aussi simple que cela. Pour une application plus concrète du glis- que nous avons choisi de vous présenter sont toutefois représentatifs ser/déplacer, essayons le "Sortable". Celui-ci s'emploie très naturelle- de l'ingéniosité et de la qualité de la bibliothèque. Maîtrisé, Scriptacu- ment avec des listes. Remplacez le contenu du document par : lous permet de créer des interfaces à la fois originales et performantes, et surtout très ergonomiques. Bien que déjà très complet, le projet est Propositions : encore récent, et il reste encore des efforts à faire, notamment au
        niveau de la documentation. Mais, les sources étant accessibles, il est
      • PHP tout à fait possible dès aujourd'hui d'exploiter au maximum cette librai-
      • Ruby rie emblématique du bouillonnant monde émergeant du web 2.0.
      • Python ■ Gauthier Delamarre

        Programmez! - N°102 72 NOVEMBRE 2007 73-75 22/10/2007 17:01 Page 73

        LANGAGE : JAVA APPLICATION : TOUT Code DIFFICULTÉ : ••••• SOURCE : non Mettre en œuvre Eclipse 3.3 Après Eclipse Callisto (Eclipse 3.2), la fondation Eclipse sort la nouvelle mouture d'Eclipse appelée Europa (Eclipse 3.3), faisant ainsi passer le nombre de projets embarqués de 10 à 21. Découvrons-le.

        Dans la section " téléchargement " du site d'Eclipse, depuis le 29 juin dernier nous avons le choix entre ces différentes versions d'Eclipse : • Java Developers : à destination des développeurs Java SE • Java EE Developers : à destination des développeurs Java EE • C/C++ Developers : à destination des développeurs C et C++ • RCP / Plug-in Developers : à destination des développeurs utilisant Eclipse comme plate-forme de base pour leurs applications RCP. • Customize Europa : à destination des développeurs souhaitant créer leur propre version d'Eclipse en ajoutant les plug-in via l'Update Manager Eclipse Europa offre un support complet de Java 6 et embarque diffé- rents plug-in et de nouvelles fonctionnalités. Dans cet article, nous allons utiliser la version d'Eclipse : " Java EE Developers " et développer Fig.1 un projet basé sur les EJB 3 afin d'identifier les réels gains de cette nou- velle version. Voici le nouveau Welcome screen (Fig.1).

        Un Eclipse tout puissant Nous allons développer un projet avec les technologies Java EE phare : EJB3 & JSF. Très souvent, dans les tutoriaux, nous pouvons trouver une modélisation UML des classes métiers alors que dans la réalité il est relativement rare de débuter un projet sans aucune base préalable. Prenons donc comme fait que nous devons construire une application à Fig.2 partir du modèle physique de données suivant (Fig.2). Pour information, ce diagramme a été réalisé grâce au plug-in Clay Data- base Modeling qui permet notamment de faire de la rétro-conception afin de rapidement visualiser une structure de base de données. En revanche, le plug-in Data Tools Platform (DTP) : 1.5 regroupe plu- sieurs outils permettant un accès facile aux données. La perspective " Database Developement " permet d'accéder à une base de données et d'y exécuter du SQL, la vue " Data Source Explorer ". Dans le quoti- dien d’un développeur, avoir un client SQL intégré à Eclipse (ou tout Fig.4 autre IDE) est un gain de temps considérable. La première des opéra- tions à effectuer va donc être d'explorer le modèle et visualiser les infor- mations (Fig.3). Dans cet exemple où nous partons d'une base de données existante, nous allons utiliser l'approche "bottom-up". Pour ce faire, nous allons commencer à utiliser les nouveautés apportées par le plug-in Web Tools Fig.3 Platform (WTP) : 2.0. WTP est LE plug-in incontournable pour développer des applications Web & Java EE sous Eclipse. Les assistants et éditeurs graphiques supportant de multiples normes permettent un gain de temps considérable. De plus, le support des EJB3 (grâce au sous-projet Fig.5 Dali), Java Persistance API (JPA), JSF & Ajax permet à Eclipse de consoli- der sa place d'environnement privilégié des développeurs Java EE. classe qui sera mappée à la table (Fig.5). Une pratique courante en Construisons donc un projet de type " JPA Project " que vous trouverez base de données est de ne pas nommer une table " user ", d'où le fait dans la catégorie " JPA " qui aura pour but d'héberger, dans un premier que nous ayons dans l'assistant ci-dessus une table nommée " xuser " temps les Entity Beans. Nous allons donc générer ces Entity à partir du qui sera rattachée à la classe Java nommée " User ". Ce plug-in Dali va modèle de données via le menu contextuel " JPA Tools " suivant (Fig.4). cependant beaucoup plus loin que la simple génération des Entity La génération de code (et dans ce cas là d'Entity) n'est pas une grande Beans puisque c'est surtout l'édition des annotations au sein du POJO découverte mais il y a des petits plus qui sont vraiment très appré- (Plain Old Java Object) qui est facilitée puisque cela est réalisable à la ciables comme l'assistant suivant qui permet de choisir le nom de la fois via l'éditeur et également via la vue " JPA Details "(Fig.6).

        Programmez! - N°102 73 NOVEMBRE 2007 73-75 22/10/2007 17:01 Page 74

        Code

        Fig.6 Fig.7 Fig.8 Voici un extrait du code généré et mappé de l'Entity Bean " User " : tâches, les bugs & le planning de vos projets. Pour la définition des tâches, un référentiel distant peut être défini afin que l'ensemble des package com.labosun.stockmanager.entity; membres d'une équipe puisse y accéder et ainsi prendre en charge la réalisation des tâches en attente. Vous pourrez donc notamment plani- ... fier vos corrections de bugs en vous connectant directement au Bugzilla de l'entreprise ou à un autre système de bug tracking soit distant, soit @Entity local. Pour ce faire, une nouvelle perspective " Planning " permet de @Table(name="xuser", schema = "database") créer vos propres tâches et de les planifier. Comme vous pourrez le voir public class User implements Serializable { dans l'écran suivant, nous pouvons spécifier le détail d'une tâche, son @Id importance, son état, sa date de début, sa durée, la date limite de réali- private int id; sation, ...(Fig.7). private String password; Voici un exemple de liaison entre MyLyn et Bugzilla, l'accès / l'ajout aux private Date birthdate; fichiers attachés à un bug sont facilités, (la description de celui-ci). Il est private String firstname; donc très simple de programmer la correction d'une liste de bugs ou private String login; d'évolutions. Des notifications des tâches planifiées à réaliser s'affi- chent alors dans le coin inférieur droit de l'écran afin de ne pas @Column(name="address_fk") "oublier" la correction d'un bug. Cette gestion des tâches intégrée à private int addressFk; Eclipse permet de mieux gérer son temps en vue d'un meilleur travail en private String sex; équipe (Fig.8). ... Parlons maintenant des nouveautés de l'éditeur en lui-même, des rac- public int getId() { courcis et fonctionnalités qui viennent enrichir Eclipse 3.3 (Europa). Cer- return this.id; tains de ces ajouts sont majeurs, d'autres seront moins visibles, mais } tout autant attendus par la communauté des " Eclipse addicts ". public void setId(int id) { La nouveauté sans doute la plus marquante est le raccourci "Ctrl + 3" this.id = id; qui permet d'accéder aux fonctionnalités d'Eclipse sans avoir à naviguer } dans les menus. Dommage pour ceux qui connaissent par cœur les public int getAddressFk() { chemins complets permettant d'accéder aux éléments d'Eclipse, ils ne return this.addressFk; pourront pas rivaliser avec ce nouveau menu de recherche rapide. Il suf- } fit donc de saisir le nom d'une commande, menu, vue, perspective,... public void setAddressFk(int addressFk) { afin de restreindre les possibilités. this.addressFk = addressFk; Il n'est donc ni nécessaire de connaître l'emplacement, ni le nom com- } plet de l'élément recherché. Encore mieux, le menu de recherche ... mémorise les derniers éléments sélectionnés. Voici un exemple d'accès public String getLastname() { à ce nouveau menu (Fig.9). return this.lastname; Tout projet informatique bien documenté est un gage d'une certaine } rigueur qui en fait très souvent le succès. Avec la correction orthogra- public void setLastname(String lastname) { phique (en anglais Etats-Unis ou Royaume-Uni) des commentaires (Java- this.lastname = lastname; Doc ou classique), cette qualité sera accrue permettant d'éliminer un } bon nombre de fautes qui peuvent se " glisser " dans la documentation. } Il est possible de lier cette nouvelle fonction à d'autres dictionnaires. Il est donc à prévoir que des dictionnaires dans les différentes langues Une fois cette couche d'accès aux données développée, nous pouvons ainsi que dans celles spécifiques à certains corps de métier : télécoms, valider cette tâche au sein d'Eclipse. Et oui, nous savions depuis long- finance, … seront bientôt disponibles. temps qu'Eclipse était bien plus qu'un IDE, il se propose grâce au plug- Il est très simple de réaliser son propre dictionnaire puisqu'il suffit in MyLyn de gérer les tâches. MyLyn, version 2.0, fait partie des d'inscrire dans un fichier texte l'ensemble des mots (un par ligne) à avancées majeures d'Eclipse. Ce plug-in permet d'avoir une vue sur les prendre en compte lors de la correction. L'utilisation du raccourci "Ctrl +

        Programmez! - N°102 74 NOVEMBRE 2007 73-75 22/10/2007 17:01 Page 75

        LANGAGE : JAVA APPLICATION : TOUT DIFFICULTÉ : ••••• SOURCE : non

        Fig.9 Fig.11 Fig.12

        Les projets d’Europa Dans l'ordre alphabétique nous retrouverons les plug-in suivants inté- grés à Europa : • AspectJ Development Tools (AJDT) : 1.5 • Business Intelligence and Reporting Tools (BIRT) : 2.2.0 • Buckminster : 0.1.0 Fig.10 • C/C++ Development Tools (CDT) : 4.0 • Data Tools Platform (DTP) : 1.5 1" permet d'accéder à la fonctionnalité Quick Fix que nous connaissons • Device Software Development Platform - Device Debugging (DSDP.DD) : 0.9 d'Eclipse pour proposer des corrections de code. Dans le cas de la cor- • Device Software Development Platform - Target Management rection orthographique, les propositions émises seront les mots correc- (DSDP.TM) : 2.0 tement orthographiés (Fig.10). De nombreuses autres évolutions • Dynamic Languages Toolkit (DLTK) : 1.0 apparaissent avec cette version d'Eclipse, nous pouvons citer la fonc- • Dash (Eclipse Monkey) : 1.0 tion Undo qui a été améliorée et donne accès à la restauration de • Eclipse Communication Framework (ECF) : 1.0.0 fichiers supprimés, le comparateur de fichiers a subi des évolutions, le • Eclipse Platform, JDT, PDE and Equinox : 3.3 drag & drop de texte entre différents éditeurs (le fichier source et desti- • Eclipse Modeling Framework (EMF) : 2.3 nation n'ont pas à avoir la même extension, cela permet donc de rendre • Eclipse Modeling Framework Technology (EMFT) - Query, Transaction, les copier/coller encore plus rapides..), la sélection entière d'une ligne Validation (MQ, MT, VF) : 1.1 de code dans l'éditeur par l'intermédiaire d'un triple clic, le support de • Graphical Editing Framework (GEF) : 3.3 Windows Vista (SWT se basant désormais sur WPF), le nettoyeur de • Graphical Modeling Framework (GMF) : 2.0 code source a subi des améliorations : dorénavant il est possible d'ap- • Model Development Tools (MDT) : 1.0 peler cette fonction lors de chaque enregistrement de fichiers. Parmi les • Model to Text (M2T) – JET : 0.8 actions pouvant être faites par ce nettoyeur, nous pouvons citer la réor- • MyLyn : 2.0 ganisation des imports, la correction de l'indentation du code, le rajout • SOA Tools Platform (STP) : 0.6 des annotations marquantes, la suppression des opérations de cast • Test and Performance Tools Platform (TPTP) : 4.4 inutiles,... Le copier / coller de code depuis une source externe (par • Web Tools Platform (WTP) : 2.0 exemple le contenu d'une classe pris sur le net) génère maintenant les Vous pouvez consulter le détail de chacun de ces plug-in en accédant à ressources associées (package et classe). l'adresse suivante : http://www.eclipse.org/europa/projects.php Reprenons notre projet, après avoir développé la partie JPA, admettons Pour télécharger cette nouvelle version d'Eclipse vous pouvez toujours que la partie des services (EJB Stateless et Stateful) est également utiliser l'adresse habituelle : http://www.eclipse.org/downloads/ et finalisée. Nous allons mettre en place l’application Web se basant sur pour obtenir plus d'informations sur cette version, visualiser les diffé- les Java Server Faces. Créons donc un simple projet de type " Dynamic rents Webinars, écouter les Podcasts ou tout simplement suivre les Web Project " auquel nous allons ajouter les pages JSP du site. nouveautés d'Eclipse Europa, rendez-vous sur le site http://www.eclip- Nous commençons par créer la page de login avec un éditeur WYSIWYG se.org/europa/. qui se compose de plusieurs zones (la palette de composants gra- A vous maintenant d'essayer et de vous faire votre avis sur cette nou- phiques, le rendu et le code (Fig.11). velle version d'Eclipse. On se demande bien les manques qui pourraient Plus qu'un simple éditeur WYSIWYG, WTP intègre surtout un éditeur du subsister... Et pourtant, après Europa, la prochaine version est déjà en fichier de configuration " faces-config.xml " avec de nombreux onglets préparation, la 3.4 qui devrait s'appeler Ganymède. dont "Navigation Rule" permettant de rapidement visualiser le compor- tement de l’application Web (Fig.12). Cet éditeur du fichier " faces-config.xml " permet une gestion vraiment facilitée de l'ensemble de la configuration de l'application, que ce soit ■ Maxime Vialette de l'utilisation de ressources bundles, de validators, de managed Ingénieur d’étude et développement chez Completel beans, ... WTP conforte donc sa place de plug-in Java EE par excellence, Membre du laboratoire Supinfo des technologies Sun que vous utilisiez la technologie JSF ou non. Certifié SJCP & MCAD.NET

        Programmez! - N°102 75 NOVEMBRE 2007 76_78 22/10/2007 17:02 Page 76

        Code Incorporez vos composants Swing et JFreeChart dans vos documents PDF Depuis Programmez! 97 nous savons générer des documents PDF en Java à l'aide de la librairie iText. Nous voyons aujourd'hui comment incorporer des composants Swing ou des graphiques JFreeChart dans les documents.

        upposons que nous ayons écrit une grosse application en Java. méthode! En effet l'interface Sérialisable ne déclare elle-même aucune Nous voulons que notre application soit accompagnée, outre la méthode ni quoi que ce soit d'autre. Comme l'explique la Javadoc, son S Javadoc, d'un manuel de qualité. Un document PDF est un rôle est simplement de modifier la sémantique de la classe. Ceci posé, excellent choix. Naturellement notre manuel devra comporter des illus- qui effectue réellement le travail de sérialisation ? La réponse est: toute trations. Par exemple des boîtes de dialogue de l'application que nous classe implémentant les interfaces java.io.ObjectOutput et voulons documenter. Ou encore des graphiques que celle-ci est sus- java.io.ObjectInput pour l'écriture et la lecture respectivement. Dans le ceptible de produire. Supposons pour l'exemple qu’il s’agisse de gra- package java.io, ce sont les classes ObjectOutputStream et ObjectIn- phiques obtenus à partir de la librairie JFreeChart. Comment générer putStream. notre document PDF? Nous pouvons tout simplement l'écrire avec un Remarquons que ces classes sont avant tout des Stream, ce qui outil tel qu'Open Office, qui générera le PDF une fois le document écrit. implique que nous pouvons tout aussi bien sérialiser vers un fichier que Dans ce cas, nous devons faire des captures d'écrans de notre appli- vers le réseau. Si nous nous reportons à la Javadoc de ces classes cation et nous devons les incorporer manuellement dans le document. nous apprenons que leurs méthodes ne traitent pas les membres décla- Avec tous les risques d'oublis et d'erreurs que cela entraîne si le docu- rés 'static' ou 'transient' des objets à sérialiser. Expérimentons un peu ment doit être repris et modifié. Une autre solution, que je préfère, est pour voir comme cela fonctionne. d'écrire le document sous la forme d'un texte brut, avec des balises Voici une classe décrivant un employé de l'entreprise Programmez!. La pour les illustrations à insérer. classe comporte un membre static et un membre transient, les autres On écrira alors une petite application Java qui, à partir du document membres étant ordinaires. brut et de la librairie iText, générera notre PDF. Ceci posé, reste le pro- blème des illustrations. Si nous devons continuer à faire les captures package fred; et les manipulations qui s'ensuivent à la main, nous ne gagnons pas grand-chose avec notre procédé. import java.io.Serializable; En revanche, s'il était possible que l'application à documenter génère elle-même ses illustrations nous pourrions plus facilement automati- public class EmployeProgrammez implements Serializable { ser la génération de notre documentation. Ceci est il possible ? Oui. public EmployeProgrammez(String nom, Java, iText et JFreechart offrent tout ce qu'il nous faut. Tout ce que String prenom, int salaire) { nous avons à faire est d'assembler les pièces du puzzle, ce que nous this.nom = nom; faisons dans cet article. this.prenom = prenom; this.salaire = salaire; Java et la sérialisation } 1 L'idée est de faire survivre les objets à l'arrêt d'une application. On parle encore de persistance des objets. Pour cela, Java fournit un public void print() { mécanisme dit de sérialisation, dont le nom vient du fait que les consti- System.out.println("Entreprise: " + entreprise); tuants d'un objet sont écrit les uns à la suite des autres, c'est-à-dire en System.out.println("Nom: " + nom); série, dans un flux. Le même mécanisme, utilisé dans l'autre sens, per- System.out.println("Prenom: " + prenom); met de recharger les objets et de les reconstituer en mémoire. Voici nos System.out.println("Salaire: " + salaire); objets ressuscités. Pour qu'un objet soit sérialisable en Java, sa classe } doit simplement se déclarer comme implémentant l'interface private static String entreprise = "Programmez!"; java.io.Serializable sans rien faire de plus, ce qui n'est pas courant private String nom; dans le monde de Java. Voici un exemple: private String prenom; private transient int salaire; import java.io.Serializable } public MaClasse implements Serialisable { } Voici maintenant un code qui sérialise une instance de cette classe MaClasse est sérialisable et cependant elle n'implémente aucune dans un fichier puis qui la recharge immédiatement:

        Programmez! - N°102 76 NOVEMBRE 2007 76_78 22/10/2007 17:02 Page 77

        LANGAGE : JAVA APPLICATION : GRAPHIQUE DIFFICULTÉ : ••••• SOURCE : oui

        package fred; tance de JFrame, tous les composants que celui-ci contient seront sérialisés avec lui. Vous trouverez en exemple le fichier HelloSerial.java import java.io.FileInputStream; sur le Cd-Rom ou sur notre site. En voici un extrait: import java.io.FileOutputStream; import java.io.IOException; package fred; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import // tous les imports

        public class TestEmployeProgrammez { public class HelloSerial extends JFrame { public static void main(String[] args) { EmployeProgrammez ep = public HelloSerial() { new EmployeProgrammez("Mazue", "Frederic", 100); super(); ep.print(); // initialisation des composants System.out.println(); initialize(); try { } // Sérialisation de la classe FileOutputStream fos = private void OnButton() { new FileOutputStream("programmez.dat"); try { ObjectOutputStream oos = new ObjectOutputStream(fos); FileOutputStream fos = oos.writeObject(ep); new FileOutputStream("HelloSerial.dat"); // On recharge la classe sérialisée ObjectOutputStream oos = FileInputStream fis = new ObjectOutputStream(fos); new FileInputStream("programmez.dat"); oos.writeObject(this); ObjectInputStream ois = new ObjectInputStream(fis); } ep = (EmployeProgrammez)ois.readObject(); catch(IOException ioe) ep.print(); { } ioe.printStackTrace(); catch(IOException ioe) { } ioe.printStackTrace(); } } catch(ClassNotFoundException cnfe) { public static void main(String args[]) { cnfe.printStackTrace(); HelloSerial hs = new HelloSerial(); } hs.setDefaultCloseOperation(EXIT_ON_CLOSE); } hs.setVisible(true); } } } L'illustration ci-contre montre, sous Eclipse, la sortie de la L'illustration ci-contre montre méthode print de la classe. le JFrame ainsi construit. On Tous les membres sont recons- remarquera dans le code les titués, à l'exception de salaire deux dernières lignes de la qui est déclaré transient. Le méthode main, très clas- membre static entreprise est siques. Voici maintenant, bien présent car la JVM extrait de ReloadHello Le mécanisme de sérialisation perd construit automatiquement les Serial.java, le code symé- les membres transient mais restitue par défaut tous les autres. membres statiques d'après trique au précédent et qui leurs valeurs en mémoire au Un Hello World sérialisé :-) reconstruit le JFrame. moment de l'opération. Le lecteur qui aura la curiosité de consulter le contenu du fichier programmez.dat pourra constater qu'en effet rien n'y try { figure en ce qui concerne le membre static entreprise. Le mécanisme de FileInputStream fis = sérialisation ne s'en est pas occupé. new FileInputStream("HelloSerial.dat"); ObjectInputStream ois = Sérialiser des composants Swing new ObjectInputStream(fis); 2 C'est ici encore très facile. Le mécanisme de sérialisation Java HelloSerial hs = (HelloSerial)ois.readObject(); veut que si un objet fait référence à un autre, la sérialisation du premier hs.setVisible(true); provoquera la sérialisation du second. Ainsi si nous sérialisons une ins- System.out.println("Termine");

        Programmez! - N°102 77 NOVEMBRE 2007 76_78 22/10/2007 17:03 Page 78

        LANGAGE : JAVA APPLICATION : GRAPHIQUE Code DIFFICULTÉ : ••••• SOURCE : oui

        } On remarque (cf code sur le Cd-Rom) qu'il faut faire apparaître le JFrame catch(IOException ioe) { à l'écran pour que cela fonctionne. Il faut ensuite le fermer sinon le pro- ioe.printStackTrace(); cessus Java ne s'arrête pas. C'est la raison de hs.dispose(); qui pro- } voque la destruction du JFrame. Enfin on note que le système de catch(ClassNotFoundException nfe) { coordonnées part par défaut du bas de la page, ce qui est très pénible à nfe.printStackTrace(); utiliser dans la pratique dès qu'il s'agit de mêler textes et graphiques. } Car les éléments de texte, construits via les classes de haut niveau, sont eux incorporés à la page en partant du haut. Il serait possible de Nous voyons dans ce code que nous repositionnons le membre 'visible' spécifier une matrice de transformation pour modifier implicitement les du JFrame. Faute de quoi le JFrame ne réapparaîtrait pas à l'écran. systèmes de coordonnées pour les graphiques. Les lecteurs intéressés Cependant le membre, qui n'appartient d'ailleurs pas à JFrame mais à trouveront un code d'exemple de matrice de transformation sur le site java.awt.Component n'est pas déclaré transient. de iText. Malheureusement le procédé se répercuterait sur l'objet gra- C'est une autre particuliarité de la sérialisation Java qui permet aux phics2D et donc sur le tracé de l'image qui serait effectué à l'envers. objets de définir des méthodes readObject et writeObject pour agir sur le Bien sûr, on pourrait à ce moment donner une autre matrice de transfor- mécanisme à la volée. JFrame ne fait pas cela, mais si vous avez la mations à Graphics2D, mais au total cela devient inutilement lourd et curiosité d'examiner les sources, vous constaterez que son ancêtre compliqué. Il existe une solution toute simple mais bien cachée dans la java.awt.Window le fait, et que c'est à cette occasion que le membre documentation d'iText. La classe de haut niveau Image peut être instan- 'visible' est systématiquement positionné à false lors de la désérialisa- ciée à partir d'un objet PdfTemplate. Moyennant quoi, l'image que nous tion. Le mécanisme de sérialisation recèle encore quelques finesses avions tracée plus haut devient un élément de document au même titre que nous verrons une autre fois. Nous en savons plus qu'assez pour qu'un Chunk ou un Paragraph. Il ne nous reste plus qu'à insérer simple- notre but d'aujourd'hui. ment ces éléments dans le document les uns à la suite des autres, sans plus nous préoccuper de coordonnées. Voici un extrait de Dessiner un composant Swing dans un PDF l'exemple SwingInPDF1.java qui fonctionne sur ce principe: 3 Dans Programmez! 97 nous avons manipulé des fonctionnalité de haut niveau telles les classes Chunk ou Paragraph de iText. Nous PdfContentByte cb = pdfwriter.getDirectContent(); supposons que le lecteur a pris connaissance de l'article et qu'il est PdfTemplate tp = cb.createTemplate(rect.width, rect.height); familiarisé avec la librairie. D'autres classes permettent un travail de Graphics2D g2d; plus bas niveau. Ainsi PdfContentByte qui encapsule les données mêmes g2d = tp.createGraphics(rect.width, rect.height); du document. Nous avons encore la classe Pdftemplate qui encapsule hs.print(g2d); un Xobject, c'est-à-dire g2d.dispose(); un graphique selon les Image image = Image.getInstance(tp); spécifications PDF. iText document.add(image); se charge de relier ce graphique à l'objet Enfin le lecteur trouvera sur le Cd-Rom l'exemple JFreeChartInPDF qui java.awt.Graphics2D incorpore un graphique JFreeChart dans un PDF bien connu. Moyennant quoi notre exemple SwingInPDF.java desé- rialise notre JFrame comme expliqué précé- demment et le dessine dans le Graphics2D associé au XObject PDF. Voici le contenu de notre JFrame incorporé dans Voici la partie importan- un PDF. te et nouvelle du code:

        PdfContentByte cb = pdfwriter.getDirectContent(); Un graphique PdfTemplate tp = cb.createTemplate(rect.width, rect.height); JFreeChart Graphics2D g2d; incorporé dans un document PDF. g2d = tp.createGraphics(rect.width, rect.height); hs.print(g2d); Ce n'est finalement qu'une petite variante des exemples précédents. g2d.dispose(); Nous construisons une carte JFreeChart et nous invoquons sa méthode cb.addTemplate(tp, 30, 500); draw sur un objet Graphics2D. Mais comme JFreeChart est basé Swing, // etc... cela revient aux exemples précédents :-) hs.setVisible(false); hs.dispose(); ■ Frédéric Mazué - [email protected]

        Programmez! - N°102 78 NOVEMBRE 2007 79 -102 22/10/2007 18:47 Page 79

        Abonnez-vous

        12ÉCO Étudiant 3 Numérique Recevez Vous devez Lisez le magazine justifier de votre chaque mois chaque mois statut d’étudiant le magazine économisez 20 € Economisez 26 € Format PDF (téléchargement) 11 Numéros 11 Numéros 11 Numéros 45 € 39 € 30 € Au lieu de 65,45 € Au lieu de 65,45 € (Prix au numéro) Tarif Monde entier (Prix au numéro) Inscription ,73€ (Prix France en ligne uniquement 2 métropolitaine) (offre réservée le numéro -40% France -30% métropolitaine) www.programmez.com +Abonnement INTÉGRAL NOUVEAU ACCÈS ILLIMITÉ aux ARCHIVES du MAGAZINE pour 1€ par mois ! Prix de lancement

        Cette option est réservée aux abonnés pour 1 an au magazine, lancement, identique pour toutes zones géographiques). Pendant quel que soit le type d’abonnement (Éco, Numérique, Etudiant). la durée de leur abonnement, ils ont ainsi accès, en supplément, Le prix de leur abonnement normal est majoré de 12 € (Prix de à tous les anciens numéros et articles /dossiers parus. ✁

        OUI, je m’abonne ! ou abonnement en ligne : www.programmez.com

        Offre limitée, ■ ABONNEMENT 1 an ECO au prix de 45 € TTC. Tarif France métropolitaine. valable jusqu’au Tarifs hors France métropolitaine : CEE et Suisse : 51,83 € - Algérie, Maroc, Tunisie : 55,95 € - Canada : 64,33 € - Tom : 79,61 € - Dom : 62,84 € - Autres : nous consulter 30 novembre 2007 ■ € Le renvoi du présent bulletin

        ABONNEMENT 1 an ETUDIANT (11 n°) : 39 TTC.Offre limitée à la France métropolitaine. Photocopie de la carte d’étudiant obligatoire implique pour le souscripteur PROG 102 l'acceptation pleine et entière de ■ + SUPPLEMENT ABONNEMENT 1 an INTEGRAL au prix de lancement de 12 € TTC. (s’ajoute à une des formules d’abonnement) toutes les conditions de vente de cette offre. MONTANT TOTAL DE L’ABONNEMENT : ■ € Conformément à la loi Informatique et Libertés du 05/01/78, vous disposez d'un droit d'accès et de ■ M. ■ Mme ■ Mlle Entreprise : ...... Fonction : ...... rectification aux données vous concernant. Par notre intermédiaire, vous Nom : ...... Prénom :...... pouvez être amené à recevoir des propositions d'autres sociétés ou Adresse : ...... associations. Si vous ne le souhaitez pas, il vous suffit de nous écrire en nous ...... Code postal : Ville : précisant toutes vos coordonnées.

        Tél : ...... E-mail : ...... ■ Je joins mon règlement par chèque à l’ordre de Programmez ! ■ Je souhaite régler à réception de facture A remplir et retourner sous enveloppe affranchie à : Programmez ! - Service Abonnements - 22 rue René Boulanger - 75010 Paris. Programmez!grammez! [email protected] LE MAGAZINE DU DÉVELOPPEMENT 80-81 22/10/2007 17:04 Page 80

        Ludique Imagine Cup 2008 : objectif Paris ! Vous ne savez peut-être pas encore ce qu’est l’Imagine Cup ? C’est la première compétition technologique mondiale organisée par Microsoft chaque année et cela depuis maintenant 5 ans. Une sacrée opportunité pour les étudiants de montrer leurs capacités !

        a finale d’Imagine Cup est organisée qui concerne les catégories où il faut être en thème de cette année, l’environnement. chaque année dans un pays différent et équipe, il n’est pas obligatoire d’être dans la Celles-ci devront susciter intérêt et réflexion de L avec un thème différent. Après même école que ses partenaires, du moment telle sorte qu’elles amèneront ceux qui les l’Espagne, le Brésil, le Japon, l’Inde et la que tout le monde réside dans le même pays. regarderont à vouloir changer les choses et à Corée, ce sera au tour de la France en 2008 envisager des actions positives pour préserver d’accueillir les équipes finalistes. Le thème Dans quel but ? l’environnement dans le futur. Il est possible de cette 6e édition est l’environnement D’après une enquête de Microsoft, les pre- de faire des équipes de 2 personnes. Vous " Imagine un monde où les nouvelles techno- mières raisons de participer sont : améliorer avez jusqu’au 2 Mai pour rendre votre présen- logies contribuent à l’amélioration de l’envi- son niveau technique, voyager, avoir une expé- tation et espérer être sélectionné pour la finale ronnement ". Pour vous donner quelques rience à mettre sur son CV, expérimenter le tra- mondiale. chiffres, l’Imagine Cup, c’est plus de vail en équipe et aussi gagner de l’argent. Les 130 000 participants provenant de plus de vainqueurs d’Imagine Cup ont un atout supplé- Court-Métrage 100 pays. Cette compétition comprend 9 mentaire sur leur CV, il suffit de regarder ce Si vous connaissez un peu catégories, des plus techniques aux plus que sont devenus d’anciens participants. Ils cette catégorie, elle est artistiques, qui couvrent la plupart des travaillent tous dans de grosses entreprises. assez impressionnante. Il domaines du monde numérique. Lorsqu’on Imagine Cup permet aussi de nombreuses ren- faut réaliser son propre court-métrage (scéna- est finaliste d’Imagine Cup, on ne repart pas contres, notamment des étudiants qui font la rio, storyboard, etc.). Il faut donc réussir à sans rien. 170 000 $ de prix ont été remis, même chose que vous. montrer comment la technologie peut aider dont une grosse partie aux Français. La l’environnement. Il s’agit d’équipes de 4 per- France a toujours été très présente en finale. Les 9 catégories sonnes maximum et vous devez être parmi les Pour revenir un peu sur le palmarès des bleus Interface Design 30 premières si vous voulez être qualifié pour en Corée, nous avons eu une médaille d’or en Une des catégories les plus le Round 2. Ensuite, chaque équipe se verra Web Development, une médaille d’argent en connues. Il s’agit de créer diffuser son court-métrage sur Channel 8 Système et Réseaux, une autre médaille d’ar- une interface utilisateur d’un (http://channel8.msdn.com/) afin de sélec- gent sur Hoshimi et une médaille de bronze logiciel ou d’une application Web en rapport tionner les 6 meilleures équipes pour la finale. en Interface Design. Nous comptons dès à avec le thème. La créativité et l’ergonomie présent 10 médailles pour la France. seront des points à ne pas manquer. L’interfa- Conception Logicielle ce devra être intuitive, captivante et fonction- Plus communément appelée nelle. Cela se joue seul ou à 2. Il est conseillé Software Design, cette caté- de travailler en collaboration avec un designer gorie est la plus primée avec et un développeur .NET. Encore une fois, inuti- un total de 50 000$, mis en jeu pour la finale. le d’être un dieu. Ils ont appris le WPF pendant Le but est d’imaginer une solution applicative qu’ils développaient leur projet. Les 30 basée sur le Framework .NET en accord avec le meilleurs projets sont sélectionnés pour le thème de la coupe. Cette solution pourra être round 2, une sélection de 6 équipes est ensui- développée dans le langage de son choix et te faite pour la finale mondiale. devra être innovante, intuitive et dynamique. Les équipes sont composées de 4 partici- Photographie pants maximum avec la possibilité de choisir Les gagnants Imagine Cup 2007. La photographie est l’une des un mentor. A savoir : la catégorie Web Develop- catégories les plus artis- ment a été fusionnée avec Software Design. Qui peut participer? tiques. Le but est de prendre Les pré-requis des projets sont maintenant Il suffit d’avoir plus de 16 ans et d’être étu- 10 photos qui racontent une histoire en rap- plus larges. On pourra retrouver les dernières diant pour participer à Imagine Cup. Pour ce port avec la technologie et bien sûr avec le technologies Microsoft comme Popfly. L’inno-

        Programmez! - N°102 80 NOVEMBRE 2007 80-81 22/10/2007 17:06 Page 81

        PAR WILLIAM BORIES

        vation du projet et la manière dont la technolo- reil. En plus de construire une solution maté- gie va révolutionner les usages est aussi rielle, il faudra assurer la partie logicielle en importante que la technique. Les 6 meilleurs .NET. Une des autres difficultés est d’être en projets sont sélectionnés et une finale nationa- accord avec le thème de l’année, l’environne- le est faite sous forme de présentation orale ment. Vous pouvez faire des équipes de 2 per- devant un jury composé d’experts pour déter- sonnes, il faudra par contre être dans les 30 miner quelle sera alors l’équipe qui représen- premiers pour être qualifié pour le round 2. tera le pays pour la finale mondiale. Ensuite il y aura une sélection des 6 finalistes. Contrairement aux autres catégories où une sélection de 6 finalistes est directement faite, Project Hoshimi L’équipe de Malte (Software Design) la catégorie Software Design permet à chaque Voici la catégorie la plus pays (soit environ 55) d’être représenté en populaire d’Imagine Cup. Elle de messagerie, portails collaboratifs, de la vir- finale. Comme pour les autres catégories, a été crée par Richard Clark tualisation, serveurs de fichiers et d’impres- inutile d’être un dieu en programmation pour (www.c2i.fr). Cette discipline est basée chaque sion, etc.). Cette catégorie est bien sûr commencer. Les gagnants sont avant tout année sur un scénario, une histoire servant à individuelle ! ceux qui croient en leur projet. appuyer le but du Project Hoshimi. Cette année nous nous retrouvons en 2097 et nous devons Algorithmes soigner la terre comme si c’était le corps Inutile d’expliquer ce qu’est humain (un des précédents scénarios). Le but un algorithme aux lecteurs de du jeu est de programmer en .NET le compor- Programmez ! Le principe de tement et la stratégie d'une équipe de nano- qualification est le même que la catégorie IT, robots qui se déplacent et interagissent en des QCM sont en ligne et il faut faire partie fonction des évènements rencontrés dans un des 200 premiers pour être qualifié pour le moteur 3D. Cette année l’application a été round 2. Ensuite il vous faudra développer une complètement développée en WPF et un vie- assembly en .NET pour résoudre un problème wer XNA est en préparation ! Les équipes sont scientifique. La difficulté de cette catégorie composées d’une ou de deux personnes. est d’être capable de comprendre le raisonne- ment humain, de résoudre des énigmes et des Développement puzzles algorithmiques. Cette catégorie est de jeux vidéo également individuelle. Cette catégorie est la petite nouvelle de l’édition 2008. Cette catégorie est un très bon moyen de Conclusion XNA ça vous parle ? Il s’agit d’un ensemble débuter en programmation. Il existe 2 modes. Imagine Cup est une compétition mondiale de d’outils (Framework, outils d’intégrations, etc.) Le mode Learner qui, en quelques clics, vous plus en plus réputée. Comme nous l’avons permettant de développer des jeux pour XBOX permet de programmer l’intelligence artificielle maintes fois répété, il est inutile d’être doué tech- 360 et sur Windows XP / Vista. Les équipes de vos bots et de découvrir toutes les subtili- niquement pour commencer l’aventure. Le fait de sont composées d’une à 4 personnes. Un tés du jeu, ainsi que le mode expert où vous participer est déjà très formateur. Nous vous sou- mentor est vivement conseillé. Tout doit être devrez tout programmer à la main. haitons bonne chance pour les qualifications. en anglais, que ce soit le jeu ou la documenta- Ressources : tion. Les participants devront redoubler d’ef- Système et Réseau http://imaginecup.com/ forts, il ne faudra pas simplement être bon sur La catégorie IT (Information http://www.microsoft.com/france/etudiants/i le plan technique ou artistique, il faudra réus- Technologie) se distingue des magine-cup/ sir à dégager un message social bénéfique autres par une absence de http://blogs.msdn.com/imaginecupfr2007/ pour l’environnement. programmation. L’IT Challenge consiste à http://blogs.developpeur.org/raptorxp/ Les gagnants auront la chance d’aller chez développer, déployer puis maintenir un Systè- http://www.project-hoshimi.com/ Microsoft pour présenter leur jeu afin de les me d’Informations efficace, fonctionnel, fiable intégrer en téléchargement dans le service et sécurisé. Encore une fois, il y a 2 rounds Arcade de XBOX Live ou sur le site de jeux de avant la finale mondiale. Le 1er round est Abonnez-vous MSN. Le grand vainqueur aura l’opportunité de constitué de 3 QCM de 30 questions en ligne à devenir apprenti chez Microsoft dans la divi- une date et une heure donnée. Il suffit ensuite sion divertissements interactifs. de réussir au moins un des 3 QCM et de faire partie des 500 premiers pour être qualifié 3 Système Embarqué pour la suite. Le round 2 est une étude de cas. numéros gratuits C’est la seule catégorie où il Les qualifiés vont devoir être inventifs et pos- coupon d’abonnement p. 79 va falloir bricoler un peu pour séder des connaissances très vastes dans le et sur www.programmez.com concevoir son propre appa- domaine de l’IT (bases de données, serveurs

        Programmez! - N°102 81 NOVEMBRE 2007 82-102 22/10/2007 17:05 Page 82

        Livres PAR FRANÇOIS TONIC

        Prendre ouvrage, précis et concis, les auteurs vous pro- ment corrigés et commentés. Ainsi, l’appren- en main posent en 170 pages un concentré de pro- tissage de l’ensemble des notions abordées grammation HTML et Javascript pour créer des se fera de manière guidée et progressive. De Expression applications AIR ! On débute par la présenta- nombreux exemples parsèment l’explication Design tion et l’architecture de l’AIR avant de passer à ce qui aide à sa compréhension. Si ce XML se ◗ Difficulté : * son modèle de développement. Puis, les destine avant tout aux étudiants, un dévelop- ◗ Editeur : Dunod auteurs s’attaquent au code HTML / Javas- peur pourra aussi s'y intéresser. ◗ Auteur : collectif cript pour utiliser les fonctionnalités AIR, ses ◗ Prix : 19,90 € API, etc. Très instructif, AIR n’apparaît plus Au cœur de Python Avec la disponibilité des outils de la gamme comme une entité mal identifiée. Prends en version 2.5 Expression, les premiers ouvrages spécialisés compte les différents systèmes supportés. ◗ Difficulté : ** / *** sortent. Celui-ci cible l’outil de création Expres- Une bonne introduction aux applications RDA. ◗ Editeur : CampusPress sion Design. Le but des auteurs est de présen- ◗ Auteur : Wesley J. Chun ter et de décrire l’outil, les principales Design Pattern ◗ Prix : 35 € fonctions, les possibilités : les calques, le texte, la couleur, quelques mots sur XAML. ◗ Difficulté : ** / *** Python est désormais un Pour être plus concret, plusieurs exemples de ◗ Editeur : Eni éditions langage incontournable, réalisations sont décrits à la fin (chapitre tuto- ◗ Auteur : même s’il mériterait une riels). Si ce premier essai est louable, on Laurent Debrauwer plus grande reconnaissance. Cet ouvrage cible aurait aimé une mise en perspective avec les ◗ Prix : 39 € les notions avancées du langage. Tous les autres outils de la gamme, et principalement domaines y sont abordés : base de données, avec Expression Blend. Pour le développeur Le design pattern est désormais une des expression régulière, réseau, clients internet, web qui veut tâter du graphisme, il s’agit d’une meilleures pratiques des plus utilisées par les multithread, interface graphique, les exten- bonne introduction. développeurs. sions du langage, Jpython, intégration avec Ce livre s'adresse aux concepteurs et déve- Office, web services. L’auteur définit chaque Java EE 5 loppeurs en Programmation Orientée Objet. élément avec des exemples concrets de code ◗ Difficulté : ** Vous y trouverez 23 modèles (patterns) fonda- et surtout de nombreuses astuces et précau- ◗ Editeur : Eyrolles mentaux en les illustrant par des exemples tions. Un must pour tout développeur Python ! ◗ Auteur : pertinents et rapides à appréhender. Pour Antonio Goncalves chaque pattern, l'auteur détaille son nom, le ◗ Prix : 36 € problème à résoudre, la solution qu'il appor- Classroom in a book : te, ses domaines d'application et sa structure spécial CS3 (35 €) Java EE 5 renouvelle générique. Le livre s’accompagne d'un considérablement la plate-forme entreprise de exemple concret décrit à la fois en UML et en Adobe a sorti il y a quelque Java. Avec JEE 5, le développeur bénéficie Java, sous la forme d'un petit programme temps la Creative Suite 3. d’un modèle de développement amélioré. Ce complet et exécutable. Adobe Press propose cahier des développeurs vous fera découvrir Pour mieux maîtriser ce livre, des connais- tout naturellement des l’ensemble des nouveautés comme EJB 3, les sances en UML sont préférables. ouvrages de référence : nouvelles piles web services, JSF 1.2, JPA 1.0, - Adobe Flash CS3 Pro- etc. Le livre se veut progressif et pédagogique, XML fessional : découvrez avec des exemples de codes, des astuces. ◗ Difficulté : ** toutes les nouveautés Une bonne approche pour ceux qui veulent se ◗ Editeur : de Flash CS3, que ce soit dans l’outil de mettre à Java EE. Pearson éducation création ou dans le développement avec ◗ Auteur : collectif ActionScript 3.Très didactique, tout en AIR pour ◗ Prix : 26 € couleur, ce livre vous fait découvrir la les développeurs création et le déploiement Flash. Livré javascript XML est le quotidien avec un CD-Rom. des utilisateurs et des développeurs mais fina- - Adobe Dreamweaver CS 3 : le leader ◗ Difficulté : ** / *** lement, on le connaît souvent mal. Les auteurs des outils de développement web revient ◗ Editeur : O’Reilly reviennent sur les principales fonctionnalités dans une version profondément rema- ◗ Auteur : collectif du langage, les grands dérivés et un exemple niée et prenant en compte les nouveau- ◗ Prix : 11 € d’intégration entre XML et PHP. Le premier cha- tés du Web 2, intègre un framework Ajax, AIR n’est encore qu’en version bêta (et sur le pitre expose les principes fondamentaux. Puis un puissant éditeur CSS, l’intégration CD-Rom de ce mois) que déjà les dévelop- on aborde XSLT, les schémas, Relax NG, avec les autres outils d’Adobe, etc. Une peurs peuvent en profiter pour tester et déve- Xpath, etc. Chaque chapitre est enrichi de bonne entrée en matière. lopper les premières applications. Dans cet nombreux exemples et d’exercices intégrale-

        Programmez! - N°102 82 NOVEMBRE 2007 Couv 102 22/10/2007 15:58 Page 83 Couv 10222/10/200715:43Page84 MIC7031-Rome 210x285 1

        ROMEROME NENE S’ESTS’EST PASPAS FAITEFAITE ENEN UNUN JOUR.JOUR. Votre défi : bâtir de grands projets à 300 000 km/s. Vos armes : communiquez et travaillez mieux ensemble VOS DÉVELOPPEURS, EUX, ONT UN MOIS PILE. avec Visual Studio® Team System. VOS DÉVELOPPEURS, EUX, ONT UN MOIS PILE. Plus d’informations sur www.releveztouslesdefi s.com 15/10/07 18:05:02

        © 2007 Microsoft Corporation. Tous droits réservés. Microsoft, Visual Studio, le logo Visual Studio, et « Votre potentiel, notre passion. » sont des marques de Microsoft déposées et/ou utilisées aux États-Unis et/ou dans d’autres pays.