Informix Magazine N°3
Transcription
Informix Magazine N°3
Guide Share France Informix Magazine Septembre 2015 Application mobile IBM Worklight et 4GL Linux m’a tué! Président Eric Vercelletto Editeur Olivier Bourdin Table des matières Contributeurs Editorial: Où va-t-on ? 2 Yoram Benchetrit Informix Roadshow, cuvée Paris 2015: une très bonne année 3 Linux m’a tué ! Votre Linux est-il prêt pour Informix ? 4 Fonctionnalités de suppression de données TimeSeries 6 Application mobile IBM Worklight et webservices 4GL 9 WW Informix L3 Support IBM Analytic Platform Olivier Bourdin WW Informix L3 Support IBM Analytic Platform Eric Fauré Voyage au centre de votre applicaton Informix 4GL 13 Approfondir la configuration SMX 22 Frame – Groupe Feeder Derniers articles 24 Eric Vercelletto Vidéos 24 Liens utiles 24 Informix blogs 24 Linux System Administrator Iris Corporate Jacques Rage Directeur Général BeGoodenIT Consulting Abonnement Cette newsletter est envoyée à des adresses enregistrées. Si vous souhaitez respectivement vous abonner ou vous désabonner, veuillez envoyer un mail avec pour sujet « ABONNER » ou « DESABONNER » à l’adresse email : [email protected] Site Web du GSF Le Groupe LinkedIn Informix France GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 1 Editorial: Où va-t-on ? Par Eric Vercelletto, Président du Guide Share France – Groupe Informix Quand nous nous sommes quittés la dernière fois, la version 12.10 xC5 d’Informix sortait tout juste, coïncidant avec la publication du numéro deux d’Informix Magazine. Un trimestre s’est écoulé depuis, voici donc le moment de faire le point sur la route parcourue dans le monde IBM Informix. Tout en conservant le cap de la fiabilité, la disponibilité et la performance en environnement OLTP, le produit continue de s’enrichir dans des domaines bien définis comme l’axe CLOUD, avec la fonctionnalité de multitenancy ou possibilité de cloisonner plusieurs sous-instances Informix indépendantes, au sein d’une seule « super-instance » Informix, à l’image d’un hyperviseur qui peut contenir plusieurs machines virtuelles cloisonnées. Les avantages de cette solution ne sont pas neutres et tendent à la réduction des coûts aussi bien en matériel qu’en maintenance qui sont une question critique pour certaines implémentations. Un autre axe de développement du produit est l’autonomie d’administration, ou faculté d’autoréglage en temps réel du moteur. A chaque release apparait un lot de paramètres de configuration qui peuvent être déclarés comme auto-réglables. Un des derniers en date est l’autorégulation du BUFFERPOOL. Tous les motifs d’accusation d’administration trop compliquée proférées à l’encontre d’Informix disparaissent un par un à chaque nouvelle release. Ce n’est pas pour rien que l’un des plus importants groupes de grande distribution au monde gère un parc de plus de 25 000 instances avec une équipe de 6 DBA en 24x7x365 ! Enfin le troisième axe est de développement est l’Internet des Objets. Même si nous nous considérons peu concernés, IoT grignote inexorablement les différentes aires de la technologie d’information et devient chaque jour un peu plus omniprésent. Informix adresse ce développement à la croissance brutale avec l’intégration de NoSQL en natif depuis bientôt trois ans, offrant une combinaison unique d’avantages déjà existants que nous connaissons tous avec la flexibilité extrême qu’offre ce mode de programmation. En considérant le fait qu’Informix fonctionne désormais sur Apple IOS et Android (oui, sur votre téléphone!), en plus des plateformes ARM 6 et 7 et Intel Quark, le potentiel est là pour créer des belles architectures dans le monde de l’entreprise, allant du très grand au très petit. C’est donc dans ce contexte que nous publions ce numéro 3 d’Informix Magazine, par lequel nous voulons partager l’information qui nous parait importante pour vous. Il comporte du vrai « bits and bytes », des sujets pour développeurs, des sujets pour DBA ainsi que pour administrateurs-système. N’hésitez-pas à nous faire part de vos suggestions, nous travaillons tous dans le même but. Bonne lecture ! GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 2 Informix Roadshow, cuvée Paris 2015: une très bonne année Par Eric Vercelletto Inlassablement, tous les ans vers le début de l’automne, Informix Roadshow est de retour à Paris, dans les locaux d’IBM à Bois-Colombes. Pour ceux qui n’ont jamais eu l’occasion d’assister à cet évènement, il s’agit tout simplement d’une séance de deux jours pleins (très pleins) de formation sur les dernières fonctionnalités d’IBM Informix, mettant l’accent sur les sujets « bouillants » du moment. Cette année, nous n’avons pas échappé à l’intégration du JSON/BSON comme type de données NATIF dans Informix, bien que cette fonctionnalité ait été intégrée dans Informix depuis maintenant plus de deux ans (12.10 xC2) et que son implémentation soit véritablement éprouvée et approuvée par des sociétés habituées à la qualité Informix. C’est ainsi que l’IBMer Scott Pickett, alias « the Informix GlobeTrotter », nous a fait une longue mais très intéressante présentation sur l’état de la technologie Internet of Things ou Internet des Choses dans la langue de Molière. Il nous a démontré, précisément parce que quand on évolue dans un milieu OLTP, on n’a pas toujours le temps ni la visibilité pour comprendre les véritables enjeux de Iot et les évolutions technologiques qui sont en train de se préparer, en quoi Informix, aujourd’hui et demain, est un outil de choix pour implémenter très efficacement, et même dans de nombreux cas, mieux que les autres, les nouveaux besoins en termes d’applicatifs et d’architecture. Le reste des nouvelles fonctionnalités a été abordé dans le détail, comme le Storage Manager, les paramètres automatiques, NoSql, TimeSeries et autres. Un point à retenir pour l’édition de cette année est la participation en très nette progression par rapport aux dernières années, montrant un clair regain d’intérêt vers cette technologie que les jaloux ou les ignorants n’hésitent pas à déclarer comme moribonde. J’allais oublier : deux des participants ont gagné respectivement un t-shirt et une chemise de l’IIUG, en répondant brillamment à une série de questions techniques. Dans la semaine qui suivait, Scott Pickett partait pour Casablanca au Maroc, où il a rejoué le RoadShow devant un public passionné et avide de nouveautés, qui n’avait pas pu bénéficier de cette présentation depuis de trop nombreuses années. Il a également donné le RoadShow à Londres, où plus de vingt participants ont réclamé une deuxième édition du RoadShow d’ici 6 mois. Faisons en sorte que l’édition 2016 soit encore meilleure que celle de 2015 en égalant le score de nos amis d’outreManche ! GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 3 Linux m’a tué ! Votre Linux est-il prêt pour Informix ? Par Eric Faure, Linux System Administrator, Iris Corporate Ceci est une histoire vécue il y a 4 semaines quelque part en Europe lors d’une migration offplace entre Informix 9.40 avec 2400 utilisateurs connectés, vers un setup Informix DS 12.10 FC4 monté sur RedHat Entreprise Linux 6.x (RHEL), le tout dans un environnement Vmware Vsphere. Nous avons à l’origine configuré la Machine Virtuelle Linux avec 32GB de RAM et 2GB de disque swap, en se disant qu'avec tant de RAM le système linux ne swapperait jamais. Malheureusement, et surtout à notre insu, un des comportements par défaut de Linux consiste à swapper sur disque les pages-mémoire peu utilisées. Après une utilisation très intensive d'Informix (nous avions 4 heures maximum pour déplacer plus de 500 Gb de données et rendre un système opérationnel), Linux a commencé à swapper les pages les moins utilisées, à raison de plusieurs centaines, et ce même si la quantité de RAM disponible était encore très importante (plus de 10 Gb disponibles). De ce fait, 2GB d'espace swap sur le disque était trop peu, et Linux a rapidement rempli tout cet espace. C’est alors qu’entre scène la fonctionnalité linux OOM (Out Of Memory), véritable serial-killer se terrant sournoisement dans kernel Linux, qui lorsqu’il déclare qu’il est en pénurie de ressources-mémoire, cherche à libérer le plus d'espace possible : le processus master d'IDS oninit étant le plus consommateur de mémoire, le sort de la victime était couru d’avance. Bien évidemment, il était 2 heures 45 du matin et nous étions dans les toutes dernières phases de la migration qui était sur le point de réussir, et nous devions rendre la main aux utilisateurs des divers services des cliniques 15 minutes plus tard ! Voici l’acte de décès dûment rempli de l’instance Informix, trouvé dans le online.log, entouré d’un grand mystère car aucune autre explication n’était apportée. 2015-09-09 2015-09-09 2015-09-09 2015-09-09 2015-09-09 2015-09-09 02:45:35 02:45:35 02:45:35 02:45:35 02:45:35 02:45:36 The Master Daemon The Master Daemon The Master Daemon The Master Daemon The Master Daemon PANIC: Attempting Died Died Died Died Died to bring system down Ecœurés, nous avons dû annuler la migration. Nous avons trouvé le lendemain matin la signature du coupable, apparaissant en clair dans le fichier /var/log/messages Out of memory: Kill process 15324 (oninit) score 253 or sacrifice child Sep 9 02:45:11 chvmidb kernel: Killed process 15325, UID 105, (oninit) total-vm:15017352kB, anonrss:80kB, file-rss:464kB Sep 9 02:45:34 chvmidb kernel: oninit invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0 Sep 9 02:45:34 chvmidb kernel: oninit cpuset=/ mems_allowed=0 Sep 9 02:45:34 chvmidb kernel: Pid: 15329, comm: oninit Not tainted 2.6.32-573.3.1.el6.x86_64 #1 Sep 9 02:45:34 chvmidb kernel: Call Trace: Sep 9 02:45:34 chvmidb kernel: [<ffffffff810d6dd1>] ? cpuset_print_task_mems_allowed+0x91/0xb0 Sep 9 02:45:34 chvmidb kernel: [<ffffffff8112a5d0>] ? dump_header+0x90/0x1b0 Et autres injures du même tonneau ! Pour éviter ce phénomène dans un premier temps, nous avons étendu l'espace swap à 32GB. Mais cette seule mesure, même si elle réduit la probabilité de saturation du swap, ne règle pas pour autant le problème dans son entité, et c’est bien là le piège à éviter. Il y a 2 paramètres du kernel importants qui réduisent voire qui empêchent le système Linux de swapper inutilement. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 4 Le premier paramètre est vm.swappiness. Il faut tout d’abord comprendre que sa valeur par défaut de 60 provoquera le swap de pages-mémoire ‘anciennes’ même si le système a encore une quantité très importante de RAM disponible. Nous avons valorisé ce paramètre à 1, ayant pour effet que Linux utilisera le swap uniquement quand le système est réellement à court de mémoire RAM. Le deuxième paramètre est le HugePages (vm.nr_hugepages) qui permet d'utiliser des pages-mémoire de plus grande taille, 2MB au lieu de 4KB, pour les applications qui gèrent ces pages comme Informix, mais surtout le kernel Linux interdit de swapper ces pages mémoires. Il est donc indispensable de bien régler ces deux paramètres du système, tout en configurant la taille du swap à une fois la taille de la RAM, voire plus, sous peine de très mauvaise surprise, bien sûr au moment où il le fallait le moins. Huge pages s’évalue ainsi grep -i huge /proc/meminfo AnonHugePages: 8192 kB HugePages_Total: 4500 HugePages_Free: 205 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB et se modifie avec la commande sysctl sysctl -w vm.nr_hugepages=nombre de page choisi Pour swappiness : cat /proc/sys/vm/swappiness 60 et modifier: sysctl –w vm.swappiness=1 GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 5 Fonctionnalités de suppression de données TimeSeries Par Gerd Kaluzinski et Olivier Bourdin Les séries temporelles (TimeSeries) sont un moyen très efficace de stockage de données. Dans le cas d'une série chronologique régulière, on stocke uniquement la valeur de la mesure sans stocker le timestamp. D'où le gain important en espace de stockage. On retrouve le timestamp par décalage par rapport à la valeur défini dans le paramètre origin lors de la création de la table. Dans le cas d'une série chronologique irrégulière, le timestamp doit être stocké avec la valeur de la mesure. La suppression de valeurs TimeSeries diffère selon que la suppression affecte l'ensemble de la série temporelle (par exemple du point de mesure) avec toutes les valeurs, ou si seulement certaines valeurs doivent être supprimées en fonction d'un critère chronologique. Supprimer la série temporelle peut être réalisé en SQL avec un simple appel du type: DELETE FROM ... WHERE ... De cette façon, toutes les valeurs qui appartiennent à la série temporelle spécifiée seront supprimés. Cela peut autant représenter quelques valeurs à quelques centaines de milliers de de valeurs. La suppression des valeurs en utilisant une table virtuelle créée sur une table avec des données Timeseries, n'est pas possible et un message d'erreur sera retourné lors de l'exécution de la commande delete: 240: Could not delete a row. 12801: An attempt was made to invoke an access_method routine that does not exist. Aussi, la suppression de valeurs individuelles d'une série de temps doit passer par la table virtuelle définit en utilisant des fonctions spécifique à TimeSeries. Pour supprimer les valeurs dans un intervalle, on utilisera l'une des fonctions DelTrim(), DelClip() ou DelRange() , que nous allons présenter dans l’exemple suivant. Pour le test, nous créons le type suivant: create row type sensor_t( tstamp datetime year to fraction(5), value decimal(15,2) ); execute procedure TSContainerCreate('sensor_cont2','datadbs','sensor_t','1024','10240'); create table sensor_ts( sensor_id char(40) primary key, sensor_type char(20), sensor_unit char(6), sensor_values timeseries(sensor_t) ); On définit une table virtuelle comme suit: execute procedure TSCreateVirtualTab('sensor_vt', 'sensor_ts', 'calendar(ts_1min),origin(2015-09-01 08:00:00.00000), container(sensor_cont2),threshold(0),regular'); GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 6 et l'utilisons pour insérer les données suivantes: insert insert insert insert insert insert into into into into into into sensor_data sensor_data sensor_data sensor_data sensor_data sensor_data values values values values values values ("Sensor01", ("Sensor01", ("Sensor01", ("Sensor01", ("Sensor01", ("Sensor01", "Temp", "Temp", "Temp", "Temp", "Temp", "Temp", "C", "C", "C", "C", "C", "C", "20150720 "20150720 "20150720 "20150720 "20150720 "20150720 08:06"::datetime 08:07"::datetime 08:08"::datetime 08:22"::datetime 08:23"::datetime 08:33"::datetime year year year year year year to to to to to to minute, minute, minute, minute, minute, minute, 28.5); 29.6); 31.9); 32.1); 30.2); 29.5); Pour les tests, nous exécutons la requête directement sur la table réelle: > select * from sensor_ts; sensor_id sensor_type sensor_unit sensor_values Sensor01 Temp C origin(2015-09-01 08:00:00.00000), calendar(ts_1min), container( sensor_cont2), threshold(0), regular, [NULL, NULL, NULL, NULL, N ULL, NULL, (28.50 ), (29.60 ), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NUL L, NULL, (31.90 ), (30.20 ), NULL, NULL, N ULL, NULL, NULL, NULL, NULL, NULL, NULL, (29.50 )] Et voici le résultat en utilisant la table virtuelle: > select tstamp, value from sensor_vt; tstamp value 2015-09-01 2015-09-01 2015-09-01 2015-09-01 2015-09-01 08:06:00.00000 08:07:00.00000 08:22:00.00000 08:23:00.00000 08:33:00.00000 28.50 29.60 31.90 30.20 29.50 Maintenant, nous supprimons les valeurs du 1er septembre entre 08h07 et 08h23 en utilisant la fonction DelRange() update sensor_ts set sensor_values = DelRange(sensor_values, "2015-09-01 08:07:00.00000", "2015-09-01 08:23:00.00000") where sensor_id = "Sensor01"; On obtient le contenu suivant: > select * from sensor_ts; sensor_id Sensor01 sensor_type Temp sensor_unit C sensor_values origin(2015-09-01 08:00:00.00000), calendar(ts_1min), container( sensor_cont2), threshold(0), regular, [NULL, NULL, NULL, NULL, N ULL, NULL, (28.50 ), NULL, NULL, NULL, NULL, NULL, NU LL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, (29. 50 )] > select tstamp, value from sensor_vt; tstamp value 2015-09-01 08:06:00.00000 28.50 2015-09-01 08:33:00.00000 29.50 GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 7 Le résultat de l'opération d'effacement est indépendante des fonctions qui ont été utilisés DelClip(), DelRange() ou DelTrim(). La différence entre les trois fonctions réside dans la gestion interne de l'espace utilisé par la série chronologique. DelTrim() supprime les éléments et libère uniquement les pages libres à la fin de la série chronologique. DelClip() maintient l'espace utilisé par les entrées supprimées et les remplit avec des NULL . DelRange() supprime les éléments et libère l’espace quel que soit la localisation des pages libres. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 8 Application mobile IBM Worklight et webservices 4GL Par Jacques Rage, Frame A l'heure où la majorité des entreprises veulent proposer une offre mobile à leurs clients, votre application 4gl peut ouvrir une partie de son code au monde mobile grâce à la technologie web-services. Le processus de développement d'une application mobile est un assemblage de compétences et de moyens : la partie graphique native ou hybride pour la partie émergée, la sécurité, la concentration des résultats des sources de données, la gestion des notifications ...pour la partie middleware mobile. En véritable « chef d'orchestre » IBM Worklight inclus dans l'offre IBM MobileFirst est une plateforme fonctionnant comme un gateway entre les devices mobiles et les applications métiers en silos de l'entreprise. Depuis la version 4GL 7.50 une fonction métier (function … end function ou procedure … end procedure) sans interaction avec un clavier ou un écran ; en clair sans instruction input, display, prompt … peut être un web-service et être utilisée dans une application étrangère à 4GL. IBM Worklight communique avec les données de l'entreprise en utilisant de multiples protocoles : rest, soap sur http, jdbc, jms. Il n'en fallait pas plus pour marier 4GL et IBM Worklight. Mon application 4GL comporte une fonction pour lister les livraisons en cours que j'aimerais appeler depuis mon device mobile. La seule adaptation à effectuer à mon code 4GL est de retourner une chaîne de texte exprimant la liste demandée en XML ou JSON. Ci-dessous un extrait du code de la fonction livraisons qui interroge la table « commandes » entre 2 dates et retourne la chaîne « str » au format JSON. FUNCTION livraisons(d) …. LET sel_stmt= "SELECT * FROM commandes WHERE datec >= to_date(?,'%Y-%m-%d') AND datec <= today"; PREPARE st_id FROM sel_stmt; DECLARE cur_id CURSOR FOR st_id; LET i=1 OPEN cur_id USING d; LET str="[" WHILE sqlca.sqlcode = 0 IF i > 20 THEN EXIT WHILE END IF FETCH NEXT cur_id INTO tabcomm[i].*; IF sqlca.sqlcode = 0 THEN LET str=str clipped||"{\"datec\":\""||tabcomm[i].datec||"\",\"emplacement\":\""||tabcomm[i].emplacement clipped||"\",\"status\":\""||tabcomm[i].status clipped||"\"}," END IF LET i=i+1 END WHILE ... CLOSE cur_id; FREE cur_id; FREE st_id; RETURN str clipped END FUNCTION GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 9 Le répertoire $INFORMIXDIR/demo/soa/en_us/0333 contient préparer notre fonction à l'environnement web-services AXIS. un script i4glsoademo.sh qui peut être utilisé pour L'instruction perl /home/informix/4gl750uc5/bin/w4glc -keep -silent -generate -compile -deploy -force /home/informix/4gl750uc5/soademo.4cf se charge de tout le travail et lance également le serveur web-services axis2_http_server. Pensez à ajouter un chemin vers les librairies : export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/informix/4gl750uc5/AXIS2C/lib On pourra tester que le service lié à la fonction « livraisons » est disponible depuis un navigateur web avec l'url : http://monserveur:9876/axis/services Un outil comme curl ou soapgui pourra être utile pour appeler le web service et le faire fonctionner. La partie IBM Worklight Studio en environnement Eclipse permet de créer un connecteur web-service (l'adapter) qui sera hébergé sur la plateforme IBM Worklight et une application au format binaire android, ios, windows ou blackberry si on a pris la précaution d'installer le « sdk » associé. On crée un nouveau projet IBM Worklight hybride avec la librairie javascript jquerymobile ou dojo pour une meilleure accessibilité aux différents devices mobiles. Une fois validé, l'outil propose la construction de l'écran principal à l'aide d'une palette d'objets à placer par glisser/déposer. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 10 L'étape suivante est de définir l'adaptateur qui sera le connecteur dédié à la connexion du web service 4GL. Le type adapté à notre web-service est http. Ce connecteur est déployé dans la plateforme IBM Worklight. Cette opération génère 2 fichiers : livraisons.xml et livraisons-impl.js qui sont respectivement le fichier de connexion et l'implémentation en javascript pour invoquer le web-service. Dans le fichier de connexion on trouve : l'adresse ip du serveur axis/4gl, le numéro du port 9876 par défaut et dans le cas d'une mise en production le nom du certificat pour sécuriser l'accès au web service. Le fichier implémentation est la seule partie délicate du projet. Elle consiste à écrire la bonne requête soap pour le corps de la requête http. function getLivraisons(datec){ var request='<?xml version="1.0" encoding="UTF-8"?>' +'<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">' +'<Body><commandes_details_request xmlns="http://www.ibm.com/informix/i4glsoa/2010-11/ws_commandes">' +'<d>'+datec+'</d></livraisons_request>' +'</Body></Envelope>'; WL.Logger.debug("SOAP Request " + request); var input = { method : 'post', returnedContentType : 'json', headers: {SOAPAction: 'livraisons'}, path : '/axis2/services/ws_commandes', body : { content: request.toString(), contentType: 'text/xml; charset=utf-8' } }; var result = WL.Server.invokeHttp(input); return result.Envelope.Body.livraisons_response; } ws_commandes représente le nom du service choisi dans le fichier script i4gldemosoa.sh et livraisons le nom de la fonction 4gl à l'aide des variables ARG_SERVICENAME="ws_commandes" et ARG_FUNCTIONNAME="livraisons". Le paramètre « path » est concaténé avec les informations du fichier de connexion xml pour créer l'url vers le serveur de web services. http://monserveur:9876/axis2/services/ws_commandes La fonction javascript getLivraisons(datec) sera appelée par le device mobile en cliquant sur le bouton Recherche : <a href="#" data-role="button" id="Recherche" onclick="getcmds();" datatheme="d">Recherche</a> La fonction javascript getcmds implémentée dans l'application mobile appelle le connecteur « livraisons » et la fonction getLivraisons(datec) avec le paramètre date choisi : GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 11 var invocationdata = { adapter: 'livraisons', procedure: 'getLivraisons', parameters: [dc] }; WL.Client.updateUserInfo(); WL.Client.invokeProcedure(invocationdata,{ onSuccess : successGetConnexion, onFailure : failureGetConnexion }); La fonction javascript « successGetConnexion » obtient la variable « str » 4GL et l'interprète pour la placer dans la liste à l'écran. Voilà un aperçu des étapes pour mettre en œuvre une application mobile compatible 4GL et assurer une transition en douceur vers des applications mobiles avec des équipes de développeurs d'horizons différents. Plus d’information sur IBM Worklight sur http://www.redbooks.ibm.com/abstracts/sg248117.html GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 12 Voyage au centre de votre applicaton Informix 4GL Par Eric Vercelletto Ou comment des développeurs actuels peuvent démystifier une application écrite en Informix 4GL par quelqu’un qui part en retraite dans 6 mois 4GL App Analyser: submersion totale dans vos Applications 4GL: Où en êtes-vous dans la documentation de vos application Informix 4GL Si vous en êtes venu à tomber sur cet article, la raison est probablement que le mot ‘4GL’ possède pour vous une réelle signification, et que sans doute il a été un compagnon fidèle dans votre vie professionnelle. Effectivement, dans les années 80 et 90, Informix 4GL était leader dans le monde des plateformes de développement. Les temps ont changé et un grand nombre de nouvelles plateformes de développement ont pris la place de 4GL soit disant parce qu’ils offrent plus de flexibilité et qu’ils sont plus faciles à utiliser. La question de « est-ce vrai » a déjà été débattue dans un article précédent et ne sera pas abordé aujourd’hui. Une des questions principales avec INFORMIX 4GL est que dans de nombreux cas les applications ont été développées il y a plusieurs dizaines d’années et que, par conséquent, les acteurs du projet sont nombreux. Ceci se traduit souvent par l’adoption de visions différentes sur la documentation du code-source, incluant différents supports pour celle-ci. Cette manière de procéder peut fonctionner de façon acceptable si le chef de projet connait ses applications sur le bout des doigts, mais les choses peuvent se compliquer très vite si ce dernier est indisponible pour quelque raison que ce soit. De plus, dès que l’on évoque le départ en retraite dudit chef de projet, le Directeur Informatique se verra rapidement pris de panique et pourra décider abruptement que cette application partira à la retraite en même temps que son chef de projet. Des changements de direction tels que le développement d’une nouvelle application ou encore l’acquisition GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 13 d’un package applicatif magique qui résoudra bien évidemment tous les besoins de la société, feront alors partie des possibilités à envisager. Face à ces assertions, prenons le temps de faire face à ces questions fondamentales : Les utilisateurs de l’application se sont-ils jamais plaints de cette application, ou alors l’application ne fonctionnaitelle pas sans anicroches, satisfaisant les besoins de la compagnie à un taux de près de 100% ? Est-ce une sage décision que de mettre à la poubelle une application construite par des développeurs qui avaient/ont une connaissance profonde de l’organisation et des pratiques de l’entreprise, justement parce qu’ils ont travaillé dans cette entreprise ? Les nouveaux développeurs vont-ils comprendre le métier de l’entreprise aussi bien que les développeurs 4GL l’ont compris, ou bien vont-ils axer leur esprit sur la partie technique au détriment de la compréhension de l’aspect fonctionnel ? Oui! La documentation d’une application est un poste critique, et ce pour un certain nombre de raisons. Certains diront qu’il y a 20 ans, la documentation des applications n’était pas une priorité, en tâchant de justifier pourquoi la documentation disponible est insuffisante ou périmée. Malheureusement, c’est aujourd’hui monnaie courante, mais se plaindre de cet état de fait ne résoudra pas la question. Si l’on parle de documentation d’application, les points à aborder sont les suivants, sans ordre spécifique: La documentation est le support central pour un travail d’équipe. Sans une documentation adaptée, maintenir une application est difficile, inefficace, coûteux et risqué si les développeurs habituels ne sont pas disponibles et l’application doit être modifiée, une bonne documentation est une condition indispensable pour atteindre l’objectif avec succès et efficacité Certaines compagnies maintiennent une documentation en pdf ou papier (documentation « statique », mais le problème est que celle-ci sera probablement périmée dans les minutes qui suivent son impression. Les modifications d’un programme doivent être transcrites manuellement vers la documentation papier ou pdf: cela prend du temps et présente un risqué de désynchronisation entre la documentation et le code source. Il est très facile d’oublier. La capacité de recherché textuelle est inexistante dans une documentation papier, et limitée dans le code source, principalement parce qu’il est difficile de chercher dans plusieurs fichiers à la fois. Inclure la documentation dans le code source est sans aucun doute la meilleure façon de faire, mais cette documentation ne peut-être accédée que par les personnes autorisées et compétentes : les développeurs. Chefs de projet, Directeurs et autres utilisateurs ne se retrouverons pas dans la lecture du code-source. Insérer manuellement des hyperliens dans la documentation prend du temps, bien que cette pratique contribue grandement à la compréhension du code, donc à la productivité de l’équipe. Même si la documentation explique avec des mots comment l’application fonctionne, rien de vaut un bon diagramme de flux pour aider quiconque n’est pas développeur ou n’est pas familier avec CETTE application, à comprendre rapidement la fonctionnalité de l’application. Et pour terminer, le facteur humain : si maintenir la documentation coûte trop d’efforts et de temps aux développeurs, son contenu et sa fréquence de mise à jour vont tôt ou tard décliner jusqu’à rendre la documentation encombrante et inutilisable. Il n’est donc pas impossible que, un beau jour, votre Directeur vienne vous rendre visite pour vous dire: « désolé, la documentation n’est pas viable: nous ne pouvons plus maintenir cette application parce que nous ne comprenons pas comment elle fonctionne. De plus, l’équipe de nouveaux développeurs ne connait pas le langage 4GL. Nous allons donc devoir abandonner cette application. » Bien sûr vous ne pensez pas qu’abandonner 20 ans de connaissance profonde des processus de votre entreprise, ayant généré une application robuste, performante et parfaitement adaptée, soit une idée acceptable. Mais avouons que les arguments invoqués plus haut sont solides mais très difficiles à combattre. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 14 Faut-il pour autant baisser les bras et abandonner les applications? Certainement pas! Quand une série de problèmes est identifiée et doit être résolue, il faut comprendre les enjeux, réfléchir et agir. Querix Inc. A très intelligemment fait le tour de la question et nous a concocté un produit très sympathique pour résoudre ces problèmes. J’ai eu l’opportunité de tester une bêta-version de Fourgl App Analyser et me suis clairement résolu à partager mon expérience sur ce produit qui pour moi va changer la donne. Fourgl App Analyser©: en quoi celà consiste? Fourgl App Analyser© est à la base un parseur de code conçu pour analyser tous les codes compatibles Informix 4GL©, soit I4GL lui-même, Aubit 4GL©, Querix Hydra©, Querix Lycia©, Genero©, et construire dynamiquement une documentation d’application structurée à partir de cette analyse de code. La double approche: de bas en haut et de haut en bas Fourgl App Analyser identifie, localise et décrit les propriétés des fonctions, reports, variables , formes et tables utilisés dans le code source analysé. En fournissant des informations structurelles et fonctionnelles sur ces éléments, vous comprendrez facilement et rapidement le flux de votre application, mais également quels objets applicationnels sont impliqués. Même sans aucune connaissance d’Informix 4GL, vous découvrirez, en navigant grâce aux diagrammes de flux, en somme en adoptant l’approche de haut en bas. D’autre part, les développeurs ou les équipes de production peuvent avoir besoin d’identifier et localiser un objet applicatif (par exemple le dba découvre un problème avec une table spécifique : où cette table est-elle utilisée?) Avec Fourgl App Analyser©, la documentation peut être exploitée dans les deux sens. Le format de sortie La documentation peut être générée dans un des formats de votre choix, comprenant HTML, LaTex, man page, RTF, XML ou PDF avec hyperliens. Exemple de la vue HTML: la page principale GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 15 Pour un module 4GL, toutes les fonctions sont listées, avec une brève descriptions ainsi que les paramètres entrants. Les autres composantes du menu sont les formes d’écran, une vue du schéma de la BDD, description des records et des variables. Dans une prochaine version, nous verrons une composante-menu dédiée aux tables. En cliquant sur le nom d’une fonction, vous pourrez visualiser la documentation de la fonction en détail, comme le montre l’écran suivant. Exemple de la vue HTML: détail de la documentation d’une fonction. Avantages immédiats, sans autre préparation que le lancement de la génération En tout premier lieu, vous pourrez désormais naviguer et faire des recherches dans votre documentation. Plus besoin de dépenser un temps précieux à définir des hyperliens dans votre document Word, lesquels peuvent disparaître ou devenir périmés à la prochaine modification. La possibilité de naviguer et de rechercher dans la documentation la rendra redoutablement efficace et améliorera de façon notoire laa productivité de l’équipe. De même, le fait de disposer en natif du format HTML implique une consequence directe: la documentation peut être très facilement intégrée dans un site web, accessible par les acteurs du projet applicatif, y compris les utilisateurs finaux et l’équipe de production dans certains cas. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 16 Vous pouvez littéralement naviguer dans votre documentation en manipulant les critères les mieux adaptés suivant les cas de figure: par fonction, par variable, par table…. Une autre fonctionnalité important est la capacité de localiser rapidement à quels endroits les tables sont impactés par l’application, simplement comme ceci: GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 17 Puis en cliquant dans stores_demo.4gl, pour la table customer, vous verrez en détaial comment cette table est manipulée dans l’application, et dans quelles fonctions. Imaginez simplement le scénario où un développeur a réalisé un changement à cette table : dans le temps d’un battement de cils, vous identifierez les modules qui devront être modifiés et/ou recompilés pour s’adapter au changement de schéma. L’Officier de Sécurité des Données peut également être intéressé de savoir s’il existe un quelque ordre DELETE sur la table customer à l’intérieur de l’application, dans les cas où un comportement anormal est observé. Grâce à toutes ces fonctionnalités, vous pourrez acquérir une connaissance approfondie de la structure de votre application, des objets qui la composent, ainsi que des flux fonctionnels, en un temps très court. Ce que les autres systèmes de documentation n’ont pas, et que FGLAA vous offre Avec un système de documentation statique, vous ne pourrez jamais capturer facilement le flux fonctionnel de votre application à moins de lire attentivement le code et de passer du temps à écrire, ou pire, à dessiner le flowchart, qui de toute façon pourra changer dans le futur. FGLAA fournit une fonctionnalité vraiment sympathique qui consiste à intégrer automatiquement les diagrammes de flux dans la documentation, tout simplement comme ceci : Pour le coût de zéro effort, vous disposerez du graphe des appels pour chaque fonction, c’est-à-dire quelles sont les fonctions appelées par cette fonction. Ceci est une fonctionnalité très puissante qui rendra quiconque est capable de lire un diagramme de flux capable de comprendre en quelques secondes ce que fait votre application. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 18 Les diagrammes de flux peuvent être encore plus détaillés, comme suit: En cliquant sur le nom des fonctions, vous vous déplacerez sur la documentation de la fonction cliquée, rendant ainsi aisée la navigation dans les fonctionnalités de celle-ci. L’utilisation des diagrammes de flux peut également constituer un excellent outil pour tracer un comportement erratique de l’application, en ayant une vision claire des séquences de code, des branchements conditionnels etc… Vous noterez également le détail des couleurs affectées à chaque type de commande 4GL, ci-dessus INPUT en vert, MENU en rose. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 19 Cette documentation a l’air d’avoir très peu de littérature descriptive : cette littérature estelle générée par FGLAA Bien évidemment nous adorerions tous cette fonctionnalité, malheureusement, c’est maintenant de prendre votre “plume” pour écrire un peu dans la documentation. Nous avons vu plus haut que toute la documentation structurelle est générée par FGLAA, ce qui apporte déjà les éléments fondamentaux à notre documentation. Mais bien évidemment, une documentation comme il se doit nécessite une bonne quantité de commentaires « humains ». La meilleure pratique est pour nous la rédaction de cette littérature explicative aussi près possible de l’endroit où l’action se passe, à savoir au sein même du code-source. Pour documenter un bloc de code, tel que fonction, report, définition de variables et record, il suffit d’utiliser la séquence « ## », qui est une extension de l’identificateur standard de commentaires d’Informix 4GL, soit répétition de « x » 2 fois ou plus, et d’écrire vos commentaires juste avant la déclaration de la fonction, comme ceci : ############################################################################ # The add_customer function has the ability to add data on one or several customers # \param repeat INTEGER If non-zero value is provided then user will be prompted for customer data repeatedly # \return No value ############################################################################ FUNCTION add_customer(repeat) DEFINE repeat INTEGER CALL clear_menu() Ce qui donnera le résultat suivant: Vous noterez que les paramètres entrants sont automatiquement écrits en rouge, et que les commandes spéciales \param et \return (en jaune), sont utilisées pour décrire les paramètres entrants et les valeurs retournées. Si vous préférez document votre function après sa déclaration dans le code ( FUNCTION xxx (aa,bb,)),vous pouvez utilizer les commandes spéciales \fn , \brief , \param and \return, comme ceci : FUNCTION add_customer(repeat) {! \fn add_customer(repeat) # \brief The add_customer function has the ability to add data on one or several customers # \param repeat INTEGER If non-zero value is provided then user will be prompted for customer data # \return No value } DEFINE repeat ….. INTEGER Cette méthode est très pratique, surtout si avant d’utiliser FGLAA, vous aviez déjà d:ocumenté vos fonctions : il suffit d’ajouter les commandes spéciales cités, et voilà. FGLAA comporte un nombre important de commandes spéciales qui contribueront à améliorer votre documentation, y compris des commandes de gestion de sections, des commandes conditionnelles, des commandes pour cacher les commentaires, manipulation de block ainsi qu’instructions de mise en page, qui donneront à votre documentation un rendu véritablement professionnel. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 20 J’ai déjà rédigé la documentation dans le code-source, est-ce encore compatible avec FGLAA? Si vous avez déjà documenté votre application dans le code-source, vous pourrez tirer un grand parti du travail déjà réalisé en le rendant « prêt pour FGLAA » simplement en rajoutant quelques commandes spéciales afin de parfaire la présentation, et peut-être profiter de l’occasion pour faire un peu de nettoyage du code inactif, ce qui est toujours bon pour le côté lisibilité. Et comme FGLAA travaille exclusivement à partir de code commenté, aucun impact sur la compilation de vos applications ne sera ressenti. Le cadeau caché Vous ne vous y attendez peut-être pas: FGLAA comprend non seulement votre code-source 4GL, mais il comprend également C, C++, Java ainsi que C#, Objective C, PHP, Python et autres. Si votre application 4GL contient également du C ou même du Java, la documentation de ce code non-4GL sera intégrée dans celle de votre application. Vous aurez donc compris que FGLAA peut être utilisé pour documenter des applications non 4GL. Le potentiel caché Dans le cas malheureux où votre entreprise aurait décidé de redévelopper votre application dans un autre langage, la documentation de votre application, si elle est générée avec FGLAA, vous aidera efficacement à gagner un temps précieux lors de la réécriture: avec les diagrammes de flux détaillés, vous avez entre vos mains plus de 80% des instructions pour réécrire le code dans un autre langage. Je ne parlerai pas de la possibilité d’utiliser les données de ces flux pour construire le nouveau code à partir d’un générateur de code sachant interpréter ces flux. Conclusion Fourgl App Analyser© est une fois de plus un petit bijou de technologie provenant des laboratoires de Querix Inc. Audelà d’un simple analyseur de que beaucoup de gens ont pu développer à la maison(dont moi-même d’ailleurs), ils ont mis beaucoup d’intelligence en intégrant les standards de l’industrie et les fonctionnalités universellement reconnues, en réalisant un produit qui était attendu depuis longtemps, et qui pourrait bien changer la manière d’aborder les applications Informix 4GL. La même philosophie est appliquée dans Querix Lycia©, qui est également fondé sur une intégration astucieuse de technologies open-source reconnues, fournissant un système de développement et un environnement de runtime qui répond véritablement aux besoins d’aujourd’hui. Ayant une tarification très raisonnable, FGLAA construira une documentation applicative professionnelle, utile et toujours à jour, tout en faisant réaliser à votre entreprise des économies de plusieurs fois le montant investi, et ce dans un laps de temps très réduit. Une documentation de qualité constituera la base solide de vos futurs développements, et peut-être le point de départ d’une conversion progressive, si votre entreprise désire vraiment abandonner le langage 4GL, de votre code 4GL vers Java, C# ou un autre langage. Un indice : parce qu’il utilise la technologie LLVM, Querix Lycia© offre la possibilité d’intégrer dans un même environnement d’exécution différents langages comme C, C#, Java et autres, ce qui pourrait changer votre manière d’aborder le futur… FGLAA peut être téléchargé depuis le Website Querix. Vous aurez à disposition une période de test de 30 jours. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 21 Approfondir la configuration SMX Par Yoram Benchetrit Nous avons évoqué dans l’article précédent le protocole SMX à travers la possibilité d’améliorer les performances réseaux grâce au paramètre SMX_NUMPIPES. Dans cet article nous allons voir qu’il est possible d’aller plus loin dans la prise en main de la configuration SMX à l’aide des paramètres SMX_COMPRESS, SMX_PING_INTERVAL et SMX_PING_RETRY. ONCONFIG : SMX_COMPRESS Le paramètre SMX_COMPRESS spécifie le niveau de compression que le serveur Informix utilise avant d’envoyer les données du serveur source, vers le serveur cible. Cette compression permet d’optimiser la bande passante du réseau, en particulier sur les réseaux à bas débits, et utilise davantage de ressource CPU pour compresser et décompresser les données. La valeur des paramètres SMX_COMPRESS des serveurs source et cible sont comparée afin de déterminer le niveau de compression. Les valeurs possibles de SMX_COMPRESS sont : -1 : Le serveur source ne compresse pas les données, quelques soit la valeur du paramètre sur le serveur cible. 0 : Le serveur source compresse les données seulement si le serveur cible attend des données compressées. C’est la valeur par défaut. 1 : Le serveur produit une compression minimale. 9 : Le serveur produit une compression maximale. Il est nécessaire de modifier le paramètre SMX_COMPRESS dans le fichier ONCONFIG et redémarrer le serveur Informix afin de prendre en compte sa valeur, ou bien modifier le paramètre dynamiquement à l’aide de la commande « onmode –w[f/m] » Les systèmes disposant de suffisamment de ressource CPU et d’une faible bande passante réseau bénéficieront davantage de l’utilisation de ce paramètre. Exemple: SMX_COMPRESS 0 ONCONFIG: SMX_PING_INTERVAL et SMX_PING_RETRY Le paramètre SMX_PING_INTERVAL spécifie le nombre de secondes utilisées dans un intervalle de timeout, pendant lequel le serveur secondaire attend une production d’activité de la part du serveur primaire au sein d’une connexion SMX. Les valeurs possibles de SMX_PING_INTERVAL sont : 0 : Attendre indéfiniment [1 – 60 ] : Un entier positif compris entre 1 et 60 déterminant le nombre de secondes dans l’intervalle de timeout Le paramètre SMX_PING_INTERVAL est utilisé conjointement avec le paramètre SMX_PING_RETRY. Lors de l’utilisation de ces 2 paramètres, si le serveur secondaire ne reçoit pas de message pendant la durée spécifiée par le paramètre SMX_PING_INTERVAL, et après le nombre de tentatives spécifiées par le paramètre SMX_PING_RETRY, le serveur secondaire écrit un message dans le fichier online.log et termine la connexion SMX. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 22 Ces paramètres s’appliquent uniquement aux serveurs secondaires. Si ceux-ci sont positionnés sur le serveur primaire, ils ne deviendront effectifs que si le serveur primaire devient un serveur secondaire. Il est nécessaire d’éditer le fichier ONCONFIG et redémarrer le serveur Informix afin de prendre en compte la valeur des paramètres SMX_PING_INTERVAL et SMX_PING_RETRY, ou bien modifier les paramètres dynamiquement à l’aide de la commande « onmode –w[f/m] » Exemple: SMX_PING_INTERVAL SMX_PING_RETRY 30 6 Le serveur secondaire attend pendant une durée de 30*6=180 secondes, une activité provenant du serveur primaire. S’il n’y a pas d’activité provenant du serveur primaire pendant ces 180 secondes, le serveur secondaire termine la connexion SMX et écrit un message d’erreur dans le fichier online.log. GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 23 Groupe LinkedIn N’oubliez pas de vous inscrire, si ce n’est pas déjà fait, à notre groupe de discussions linkedin GUIDE Share France Groupe INFORMIX. Ce groupe de discussion, qui comporte dorénavant plus de 130 membres, est le vecteur de communication de notre communauté. Il serait dommage de ne pas en profiter. Derniers articles Informix largement en tête dans un sondage de satisfaction client: voir l’article IBM Informix reçoit un software award de la part de Cisco: voir l’article IBM Informix réapparait dans le top 10 des SGBD à prendre au sérieux: voir l’article Vidéos The basics of getting up and running with Informix by Tom Beebe: voir la vidéo Intel-IBM Informix Building Automation Demo: voir la vidéo Programming Informix SQL/4GL: A Step-By-Step Approach (Bk/CD) (2nd Edition) : voir la vidéo Informix 4GL to Genero - bring your code into the future: voir la vidéo Install & Configure Informix Warehouse Accelerator (IWA) : voir la vidéo IBM Informix helps Deister SA improve their client business: voir la vidéo CMO of of Pronto Software on what makes IBM and Informix a great partnership for Pronto: voir la vidéo Connecting IBM Cognos BI 10.2.2 to an IBM Informix 12.10 database: voir la vidéo Pronto Software leverages IBM Informix for high-volume OLTP as well as for analytical reporting: voir la vidéo Oracle to Informix Database Migration Demo: voir la vidéo Liens utiles Informix Developper Works : http://www.ibm.com/developerworks/data/products/informix/ IBM Redbook : http://www.redbooks.ibm.com/portals/data IBM Data Management magazine: http://www.ibm.com/developerworks/data/dmmag/ IIUG : http://www.iiug.org/index.php Informix sur facebook: http://www.facebook.com/IBM.Informix Informix on dBforums: http://www.dbforums.com/forumdisplay.php?82-Informix Informix blogs Art Kagel: http://informix-myview.blogspot.fr/ Andrew Ford: http://www.informix-dba.com/ Ognen Orel: http://ifmx.wordpress.com/ Fred Ho: https://www.ibm.com/developerworks/community/blogs/fredho66/?lang=en Fernando Nunes: http://informix-technology.blogspot.com/ Eric Vercelletto : Le village Informix http://levillageinformix.blogspot.com/ Bruce Weed: http://bruceweed.wordpress.com/ GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 24 Guide Share France – Groupe Informix Magazine Informix Septembre 2015 GUIDE SHARE FRANCE – GROUPE INFORMIX SEPTEMBRE 2015 – PAGE 25
Documents pareils
Newsletter User Group Informix France
Technical Tip: Nouvelles fonctionnalités en 11.70.xC5 ..................................................................... 5 Technical Tip: Nouvelle fonctionnalité IFX_BATCHEDREAD_INDEX .............
Plus en détailNewsletter User Group Informix France
Technical Tip: L'authentification interne des utilisateurs Avec la 11.70.xC2, la gestion des utilisateurs subit des changements importants. Grâce à l’authentification interne des utilisateurs, il n...
Plus en détail