Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework



Documents pareils
Architectures Web Services RESTful

NOTE: Pour une meilleure sécurisation, nous vous recommandons de faire l installation des outils web à l intérieur d un serveur virtuel.

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Application web de gestion de comptes en banques

Open Source Job Scheduler. Installation(s)

Serveur d'archivage 2007 Installation et utilisation de la BD exist

TUTORIEL: INSTALLATION D'UN SERVEUR LOCAL SOUS WINDOWS 7 POUR APPINVENTOR version du 06/04/2013

Héritage presque multiple en Java (1/2)

Généralités sur le Langage Java et éléments syntaxiques.

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

Plateforme PAYZEN. Définition de Web-services

Création d une application JEE

Web Tier : déploiement de servlets

Open Source Job Scheduler

Initiation à JAVA et à la programmation objet.

Architecture de la plateforme SBC

La base de données XML exist. A. Belaïd

Bee Ware. Cible de Sécurité CSPN. Validation Fonctionnelle Validation Fonctionnelle Bon pour application AMOA BEEWARE BEEWARE

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

AJAX. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

La démarche SOA et l interopérabilité applicative

RMI le langage Java XII-1 JMF

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

GUI Client in HomeSIP Project

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Projet gestion d'objets dupliqués

ALOHA LOAD BALANCER MISE EN ŒUVRE DU SSL FRONTEND

Tutoriel Création d une source Cydia et compilation des packages sous Linux

Manipulation 4 : Application de «Change».

4. SERVICES WEB REST 46

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Plan du cours. Historique du langage Nouveautés de Java 7

Installation de SQL Server Reporting Services avec l intégration dans un site Windows SharePoint Services V3

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Architectures en couches pour applications web Rappel : Architecture en couches

Définition des Webservices Ordre de paiement par . Version 1.0

Dis papa, c est quoi un bus logiciel réparti?

Chapitre 2. Classes et objets

Installation UpdatEngine serveur (CentOs apache2 / MySQL)

API Web Service TéléAlerte

Introduction aux Machines Virtuelles avec VMKit

Alfstore workflow framework Spécification technique

Alexandre Buge Epitech 5 Promo Soutenance de stage du 01/03/2004 au 31/08/2004

Augmenter la disponibilité des applications JEE grâce au clustering : Le projet open source JShaft

Le Client/Serveur avec Enterprise Miner version 4

Notes de mise à jour. 4D v11 SQL Release 3 (11.3) Notes de mise à jour

Diagramme de déploiement

Procédure d installation d AMESim 4.3.0

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Programmer en JAVA. par Tama

ArcGIS 10.1 for Server

CAHIER DES CHARGES D IMPLANTATION

Application de lecture de carte SESAM-Vitale Jeebop


titre : CENTOS_CUPS_install&config Système : CentOs 5.7 Technologie : Cups Auteur : Charles-Alban BENEZECH

Déploiement d'une application Visual Studio Lightswitch dans Windows Azure.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

GOUTEYRON ALEXIS. SIO2 N candidat: UEpreuve E4. USituation professionnelle 2. serveurs de fichiers. Uen haute disponibilité

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

SSL. Secure Socket Layer. R. Kobylanski janvier version 1.1 FC INPG. Protocole SSL Application avec stunnel

DirXML License Auditing Tool version Guide de l'utilisateur

PROCEDURE D'INSTALLATION OPENREPORTS

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

25 septembre Migration des accès au Registre national en protocole X.25 vers le protocole TCP/IP, pour les utilisateurs du Registre national

Stratégie de sécurité grâce au logiciel libre. Frédéric Raynal Cédric Blancher

Plan. Présentation du logiciel Sympa Architecture La gestion des hôtes virtuels Listes avec inclusion des abonnés Les modules d authentification

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

INTRODUCTION AUX TESTS DE PERFORMANCE ET DE CHARGE

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Un serveur web léger et ouvert

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Direction des Systèmes d'information

ECLIPSE ET PDT (Php development tools)

Linux embarqué: une alternative à Windows CE?

Corrigé de l'atelier pratique du module 5 : Analyse de SQL Server

Le stockage local de données en HTML5

1/ Présentation de SQL Server :

Installation FollowMe Q server

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

Documentation technique OpenVPN

Programme de formation

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

Présentation, mise en place, et administration d'ocs Inventory et de GLPI

contact@nqicorp.com - Web :

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Tutorial pour une application simple

Conférence SIG 2011 Versailles 5-6 Octobre 2011 Atelier Technique ArcGIS for Server en 10.1

Installation d'un serveur FTP géré par une base de données MySQL

Transcription:

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework Gaël de Chalendar CEA LIST / LIC2M Journée de Présentation des Technologies WebContent INSTN 14/12/2009

Présentation de gsoap Plan Architecture de WebContentC++Framework Tutoriel

Présentation de gsoap Open source sous licences GPL et gsoap Public Licence (type BSD). De plus, une licence commerciale est disponible. Pour Windows et Linux. Fournit des outils pour créer des Web services utilisant SOAP/XML avec des clients/serveurs C ou C++. L'utilisation des outils gsoap est assez complexe WebContentC++Framework simplifie le développement de Web services en C++ Architecture pour créer des serveurs multithread performants Bibliothèques pour traiter des documents WebContent Bibliothèques facilitant l'interfaçage avec des applications existantes

Architecture de WebContentC++Framework ifférents paramètres influent sur le.h généré Un processus principal n threads qui écoutent chacun sur un port (1 par.h annoté. service) p threads de traitement en fonction des requêtes reçues - Types complexes définis dans les XSD déclarés dans le.wsdl sous forme de classe. - Structures de données des paramètres des opérations. - Prototypes de fonctions définissant les opérations des différents services. Non compilable directement par gcc/g++!!

Architecture Application dépendante de gsoap au minimum : couplage faible. Serveur multi-thread (gsoap est thread-safe) Utilisation d'une Factory (singleton) pour gérer les instantiations d'objet : Objets instantiables identifiés par un ID unique sous forme de string Objets instantiables enregistrés auprès de la Factory au lancement de l'application. Création d'une nouvelle instance en passant l'id de l'objet à la Factory. Utilisation du Design Pattern Bridge pour découpler interfaces et implémentations Les classes d'interface délèguent les appels de fonctions à leur objet membre, pointeur vers une implémentation abstraite. Les méthodes publiques de l'implémentation abstraite délèguent l'appel aux fonctions virtuelles pures, implémentées par les classes concrètes dérivées.

Architecture Un service WebContent se décompose en plusieurs niveaux: Niveau gsoap : Implémentation des fonctions prototypées par soapcpp2. Instantiation du module soap associé au service à l'aide de son ID. Instantiation de la structure du paramètre de sortie si nécessaire. Niveau soap : Conversion des paramètres typées gsoap en types indépendants de gsoap. Instantiation du module core associé au service à l'aide de son ID. Niveau core : Interface entre le serveur SOAP et la couche Métier (e.g. LIMA). Peut faire appel à une couche intermédiaire dans certains cas (e.g. Si le paramètre en entrée est un document XML formatté selon le modèle d'échange WebContent). Appel des fonctions métier. Niveaux intermédiaires selon les services (parseur XML...). Niveau métier : Exécute la requête et retourne si besoin est les résultats. Cas particulier de la gestion des documents XML au format WebContent : L'API générée par gsoap à partir des WSDL est assez complexe à manipuler Pour un document de type WebContent, le parcours du document sous forme d'objet est moins aisé que sous forme XML native (string). Conversion de l'objet de type Document en XML Utilisation d'un parser XML SAX / DOM par événements pour le parcours du document XML.

Contenu de la Distribution (LGPL) https://gna.org/projects/thewebcontent/ Bibliothèque common Bibliothèques génériques pour Factories: instanciation à la demande d'objets nommés Traitement du XML Gestion des threads Gestion du RDF Gestion des fichiers de configuration Implémentations par défaut XML (tinyxml) Threads (pthread) RDF (redland) Config

Contenu de la Distribution (LGPL) https://gna.org/projects/thewebcontent/ Gsoap-copy (Copie( de gsoap-2.7.12) Accès au nom du service Accès au WSDL du service Autres modifications pour l'implémentation du serveur multithread soapserver et webcontentserver Implémentation du serveur multithread Support du SSL (authentification par certificat) Services stateless ET statefull FASTCGI possible

Contenu de la Distribution (LGPL) https://gna.org/projects/thewebcontent/ webcontentlimaservices Partie LGPL de l'implémentation des services du CEA LIST Exemples de traitement du format WebContent qwebserviceclient Un client de Web services pratique pour tester les services Interface graphique en Qt (C++)

Tutoriel Hypothèse: on dispose d'une application d'annotation d'entités nommées capable d'annoter les noms des membres de l'équipe de France de rugby de l'automne 2009 Cette bibliothèque possède une fonction analyse qui Prend un texte (std::string) en entrée Renvoie en sortie la liste des positions/longueurs des noms reconnus Nous allons développer un service WebContent qui Instancie l'interface Analyser Prend en entrée un document WebContent Rend en sortie le même document enrichi d'annotations Les codes de la bibliothèque et du service sont disponibles dans la distribution

Initialisation (1) Installer les prérequis (redland, redland-devel,...) Télécharger WebContentC++Framework svn co http://svn.gna.org/svn/thewebcontent/trunk/webcontentc++framework Télécharger le modèle http://weblab-project.org/core/devkit2.1/schemas/schemas.zip Déployer l'archive schemas.zip dans WebContentC++Framework/ Sources/webcontentlimaservices/src/wclimaservices/soap/wsdl Modifier setenv.sh pour affecter le chemin du dossier de téléchargement à la variable WCCPP_HOME Définir les variables d'environnement: source setenv.sh Construire common: cd Sources/common./cbuild.sh À ne faire qu'une fois

Initialisation (2) Installer gsoap-copy cd Sources/gsoap-copy./cbuild.sh Construire soapserver cd Sources/soapserver./cbuild.sh Construire webcontentserver cd Sources/webcontentserver./cbuild.sh Construire webcontentconfiglimalibs: cd Sources/webcontentconfiglimalibs./cbuild.sh À ne faire qu'une fois

L'Application à Publier en tant que WS Construire wccppneetutorial cd wccppneetutorial./cbuild.sh std::map< int, int > WCCPPNEETutorial::analyse(const std::string& text) { std::map< int, int > result; std::vector<std::string> entities; // here the other player names entities.push_back("maxime Médard"); entities.push_back("damien Traille"); } std::vector<std::string>::const_iterator eit, eit_end; eit = entities.begin(); eit_end = entities.end(); for (; eit!= eit_end; eit++) { const std::string& player = *eit; int position = text.find(player); while (position!= std::string::npos) { result.insert(std::make_pair<int,int>(position, position+player.size())); position = text.find(player, position+1); } } return result;

Fonctionnement du Web service

Construction du Web Service Éditer Makefile.gsoap dans WebContentC+ +Framework/Sources/webcontentlimaservices/src/wclimaservices/s oap pour ne conserver que NamedEntitiesExtractionTutorial dans la variable WSDL_LIST Construire webcontentlimaservices: cd Sources/webcontentlimaservices./cbuild.sh

Dernières Étapes Création des liens cd dist mkdir implementations cd implementations ln -s../lib/libwccpppthreadimpl.so ln -s../lib/libwccpptinyxmlimpl.so cd.. mkdir services cd services À ne faire qu'une fois ln -s../lib/libnamedentitiesextractiontutorialservice.so

Configuration du Service Edit services.conf configuration file set service-libs-path create or edit the NamedEntitiesExtractiontutorialAnalyserSOAPBindingService map <group name="services-global-config"> <param key="service-libs-path" value="...webcontentc++framework/dist/lib" /> <list name="active-services"> <item value="namedentitiesextractiontutorialanalysersoapbindingservice" /> </list> </group> <group name="services-config"> <!-- name : servicename --> <map name="namedentitiesextractiontutorialanalysersoapbindingservice"> <entry key="config-group" value="errorcodes-config" /> <entry key="lib-name" value="libnamedentitiesextractiontutorialservice.so" /> <entry key="implid" value="default" /> <entry key="port" value="10001" /> <entry key="use-session" value="true" /> <entry key="session-timeout" value="5000000" /> </map> </group>

Start webcontentserver [2009-12-10 16:15:03] [2009-12-10 16:15:03] ******************************* [2009-12-10 16:15:03] Reading server configuration : [2009-12-10 16:15:03] ******************************* [2009-12-10 16:15:03] Nb. processing threads : 30 [2009-12-10 16:15:03] Server read timeout : 60 [2009-12-10 16:15:03] Server send timeout : 60 [2009-12-10 16:15:03] Max. pending requests : 100 [2009-12-10 16:15:03] Bind hostname : localhost [2009-12-10 16:15:03] Use SSL : no [2009-12-10 16:15:03] [2009-12-10 16:15:03] ******************************* Lancement du Serveur [2009-12-10 16:15:03] [2009-12-10 16:15:03] ********************************* [2009-12-10 16:15:03] Reading services configuration : [2009-12-10 16:15:03] ********************************* [2009-12-10 16:15:03] Services Library path : '/home/gael/projets/webcontent/workshopexterne/webcontentc++frameworktutorial/webcontentc++framework/dist/lib' [2009-12-10 16:15:03] - NamedEntitiesExtractionTutorialAnalyserSOAPBindingService : Port -> '10001' - ImplID -> 'Default' - lib. name -> 'libnamedentitiesextractiontutorialservice.so' [2009-12-10 16:15:03] [2009-12-10 16:15:03] ********************************* [2009-12-10 16:15:03] [2009-12-10 16:15:03] *************************** [2009-12-10 16:15:03] Starting active services : [2009-12-10 16:15:03] *************************** [2009-12-10 16:15:03] Service 'NamedEntitiesExtractionTutorialAnalyserSOAPBindingService' =>[2009-12-10 16:15:03] Use session cookie : true - Session timeout : 5000000 [2009-12-10 16:15:03] --> Load [2009-12-10 16:15:03] [OK] [2009-12-10 16:15:03] --> Instantiate [2009-12-10 16:15:03] [OK] [2009-12-10 16:15:03] --> Bind to port 10001 [2009-12-10 16:15:03] [OK] [2009-12-10 16:15:03] [2009-12-10 16:15:03] *************************** [2009-12-10 16:15:03].: Server up and running... :.

Appel du Service