IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AS/400 Discussion :

Restore librairie et IASP


Sujet :

AS/400

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut Restore librairie et IASP
    Bonjour,
    Nous avons 4 IASP tous les 4 contenant la même librairie 'MYLIB' (ce qui est le but de nos IASP: 4 environnements de développement indépendants).
    Avec un GO SAVE 21 ils sont tous sauvés sur la tape.
    Comment faire, lors d'un restore pour choisir sur la tape la librairie 'MYLIB' d'un IASP en particulier?
    En faisant DSPTAP on voit les 4 numéros de séquence des 4 sauvetage de 'MYLIB', et on "devine" qu'elles sont dans "l'ordre" des IASP, mais y a-t-il un moyen plus sûr, par exemple en utilisant le nom ou le numéro de l'IASP dans un des paramètres de la comande de restore?
    Merci,
    Fred
    P.S. le paramètre à utiliser pour indiquer l'IASP ou on veut faire le restore lui on l'a bien trouvé

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Avec RSTLIB tu as deux paramètres :
    - SEQNBR = N° séquence sur la bande
    - RSTASP = N° ASP de restauration.

    Ces paramètres se retrouvent dans d'autres commandes de restauration.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Je pense qu'il faut BRMS pour connaître l'iASP d'origine.
    Ce qui est certain, Lorsqu'on fait une sauvegarde complète (option 21) ou des données utilisateur (option 23), les iASPs sont sauvegardés par ordre alphabétique. En le sachant, c'est plus facile pour restaurer.

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 149
    Points : 149
    Points
    149
    Par défaut sauvegarde 21
    Bonjour,

    nous avons rencontré le problème et notre façon de le résoudre a été des plus simples :

    Il suffit de creer un objet dans chaque bibliothèque qui donne le nom de l'environnemt pa exemple une datara (APRD) (ADEV) (ARCT)
    ou alors chaque environnement a ces bibliothèques propres EXPLOITDEV EXPLOITPRD EXPLOITRCT EXPLOIxxx.

    cela implique lors de la restore de rechercher le premier objet de la bibliothèque ou un type d'objet particulier, mais après la restore est simple..


    cordialement

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Citation Envoyé par rcordonnier Voir le message
    Bonjour,
    nous avons rencontré le problème et notre façon de le résoudre a été des plus simples :
    Il suffit de creer un objet dans chaque bibliothèque qui donne le nom de l'environnemt pa exemple une datara (APRD) (ADEV) (ARCT)
    ou alors chaque environnement a ces bibliothèques propres EXPLOITDEV EXPLOITPRD EXPLOITRCT EXPLOIxxx.
    cela implique lors de la restore de rechercher le premier objet de la bibliothèque ou un type d'objet particulier, mais après la restore est simple..
    Ok, merci, on va faire cela.

    Tiens 2 mots sur la raison de l'existence de la même librairie dans différents iASP, pourquoi nous ne développons pas (plus) sur DTEST, DDEV, DQUALIF, DPROD, ... mais que ce sont les iASP qui jouent ce rôle avec le même nom de librairie: c'est parce que tous nos programmes sont des SQL stored procedures. Dans ces procedures les statements SQL sont statiques non qualifiés => cela permet de les compiler dans une lib au choix, mais une fois compilés ils sont qualifiés (PRTSQLINF le montre). Et donc cela ne marche pas de restaurer l'environnement de prod en test si le nom de la librairie change.
    Le problème existe aussi avec les vues: si on restaure la librairie X comme Y, les vues de X sont restaurées dans Y mais pointant sur les tables de X... ce qui n'est pas ce qu'on veut.
    Bref pour simplifier tout cela: le même nom de librairie dans chaque environnement (test1, test2, qualif, ...) mais séparer par iASP. Du coup ma question du backup/restore.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    @frfancha

    Dans ton CREATE PROCEDURE s'il s'agit d'un RPGLE, tu mets directement

    EXTERNAL NAME MONPROG
    (sans quotes, guillemets, et bibliothèque)
    au lieu de
    EXTERNAL NAME 'MABIB/MONPROG'

    ainsi, il utilisera la *LIBL, tu veux le voir en interrogeant SYSPROCS

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Citation Envoyé par K2R400 Voir le message
    @frfancha
    Dans ton CREATE PROCEDURE s'il s'agit d'un RPGLE
    Ok merci mais ce sont des SQL Stored procedures pas du RPG.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par frfancha
    Ok merci mais ce sont des SQL Stored procedures pas du RPG.
    Dans ce cas, utilise la *CURLIB.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut ok mais *curlib est nouveau pour moi
    Intéressant, mais comment ca marche?

    Prenons librairie A et B.
    Nous avons ODBC A avec "default SQL library"=A et ODBC B avec "default SQL library"=B.

    Soit la stored procedure:
    create testproc(in ini int, inout inoutn) language sql begin
    select n into inoutn from testtable where i = ini;
    end;

    Pour le moment on compile testproc dans A et une autre fois dans B.

    Connection ODBC vers A, appel (non qualifié!) de testproc => on lit la table a.testtable
    Connection ODBC vers B, appel (non qualifié!) de testproc => on lit la table b.testtable.

    Comme je l'ai dit ce qui ne fonctionne pas dans ce scénario c'est restore de a.testproc comme b.testproc au lieu de recompile en b, car alors connecté à odbc b et call de b.testproc on lit la table a.testtable.

    Je ne vois pas très bien comment arranger ce scénario avec *CURLIB?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Oulaaaaa... il ne faut pas confondre l'appel de la procédure et l'accès aux données dans la procédure.

    Quand tu créés ta procédure, utilises-tu la convention *SQL ou *SYS ?
    Car si tu utilises *SYS il va rechercher automatiquement les données dans la *LIBL !!!!!

    En ce qui concerne une vue, c'est normal qu'elle pointe toujours vers sa (ou ses) table(s) comme le ferait un index.
    Sur l'IBM i une vue ou un index sont représentés comme des fichiers logiques.

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Citation Envoyé par K2R400 Voir le message
    Oulaaaaa... il ne faut pas confondre l'appel de la procédure et l'accès aux données dans la procédure.
    Sorry, petit problème dans ma manière d'expliquer alors, mais nous utilisons exclusivement SQL sur l'i5 (et avant Orable et DB2 Windows) et je peux t'assurer que je comprends parfaitement ce que sont l'appel de la procédure et l'accès aux données dans la procédure.
    Citation Envoyé par K2R400 Voir le message
    Quand tu créés ta procédure, utilises-tu la convention *SQL ou *SYS ?
    Car si tu utilises *SYS il va rechercher automatiquement les données dans la *LIBL !!!!!
    Nous utilisons uniquement *SQL.
    Le tout tourne sur i5, mais le but est d'être indépendant de cette machine et d'avoir uniquement du code qui compile tel quel (ou presque) sur DB2 linux/windows ou autre pour être indépendant du choix de la machine.

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    A propos de la CURLIB.

    Il faut que tu aies au moins 3 bibliothèques :
    1. une bibliothèque réservée aux Procédures Stockées (PS). Cette bibliothèque sera désormais la bibliothèque réservée à la création des PS et rien d'autre
    2. une bibliothèque pour les fichiers de production
    3. une bibliothèque pour les fichiers de test.


    Tu ne qualifies rien dans les PS. Le nom des bibliothèques ne doit apparaître nulle part dans le code.
    Quand tu crées ou compiles les PS, mets d'abord la bibliothèque des PS dans la CURLIB de ton travail et compiles avec l'option NAMING(*SYS) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CHGCURLIB CURLIB(Biblio des PS)
    Les PS seront alors créées dans cette bibliothèque.

    Au niveau du client (ce que tu appelles "Connection ODBC"), tu vas alors jouer de nouveau sur la *CURLIB.

    Par exemple, si tu veux exécuter les PS avec la bibliothèque de production en ligne, tu fais, en amont et avant tout accés aux PS, au niveau de ce que tu appelles "Connection ODBC",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CHGCURLIB CURLIB(Biblio de production)
    et places la bibliothèque des PS dans la *USRLIBL du travail avec par ex. un ADDLIBLE. Comme la *CURLIB est toujours placée en tête, donc AVANT la *USRLIBL, tu alimenteras la BDD de la bibliothèque de production.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CURLIB  =  BDDProd
    USRLIBL =  QTEMP
               BibPS
    Même principe avec la bibliothèque de test.

    NB : si tu es appelé à modifier/tester une PS, il faut évidemment mettre la PS à tester dans une bibliothèque placée entre la CURLIB et la bibliothèque des PS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CURLIB  =  BDDTest
    USRLIBL =  QTEMP
               TestPS
               BibPS
    Est-ce + clair maintenant ?

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Citation Envoyé par Mercure Voir le message
    Il faut que tu aies au moins 3 bibliothèques :
    1. une bibliothèque réservée aux Procédures Stockées (PS). Cette bibliothèque sera désormais la bibliothèque réservée à la création des PS et rien d'autre
    2. une bibliothèque pour les fichiers de production
    3. une bibliothèque pour les fichiers de test.
    Ouais pas tout à fait car certaines PS sont changées en quelif / devel par rapport à la prod, mais tu en parles après.

    Citation Envoyé par Mercure Voir le message
    Tu ne qualifies rien dans les PS. Le nom des bibliothèques ne doit apparaître nulle part dans le code.
    Ca c'est bien clair et c'est ce que nous avons toujours fait. Le souci c'est que au moment de l'exécution du statement 'create procedure ...' l'i5 qualifie pour nous avec les options que nous utilisons actuellement en run sql script.

    Citation Envoyé par Mercure Voir le message
    Quand tu crées ou compiles les PS, mets d'abord la bibliothèque des PS dans la CURLIB de ton travail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CHGCURLIB CURLIB(Biblio des PS)
    Les PS seront alors créées dans cette bibliothèque.
    Ok comment ce CHGCURLIB CURLIB se traduit-il en terme d'option run sql scripts?

    Citation Envoyé par Mercure Voir le message
    Au niveau du client (ce que tu appelles "Connection ODBC")
    Ce n'est pas seulement une appellation, les applications utilisateurs sont des écrans windows qui se connecte via ODBC.

    Citation Envoyé par Mercure Voir le message
    , tu vas alors jouer de nouveau sur la *CURLIB.
    Par exemple, si tu veux exécuter les PS avec la bibliothèque de production en ligne, tu fais, en amont et avant tout accés aux PS, au niveau de ce que tu appelles "Connection ODBC",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CHGCURLIB CURLIB(Biblio de production)
    et places la bibliothèque des PS dans la *USRLIBL du travail avec par ex. un ADDLIBLE. Comme la *CURLIB est toujours placée en tête, donc AVANT la *USRLIBL, tu alimenteras la BDD de la bibliothèque de production.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CURLIB  =  BDDProd
    USRLIBL =  QTEMP
               BibPS
    Même principe avec la bibliothèque de test.
    Ok mais comment cela se traduit-il en terme d'option dans la config ODBC?

    Citation Envoyé par Mercure Voir le message
    NB : si tu es appelé à modifier/tester une PS
    C'est ce que les développeurs font tous les jours ;-)

    Citation Envoyé par Mercure Voir le message
    , il faut évidemment mettre la PS à tester dans une bibliothèque placée entre la CURLIB et la bibliothèque des PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CURLIB  =  BDDTest
    USRLIBL =  QTEMP
               TestPS
               BibPS
    Ben même question, comment cela se traduit-il en terme d'option dans la config ODBC?

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Citation Envoyé par frfancha Voir le message
    Ca c'est bien clair et c'est ce que nous avons toujours fait. Le souci c'est que au moment de l'exécution du statement 'create procedure ...' l'i5 qualifie pour nous avec les options que nous utilisons actuellement en run sql script.
    C'est ce que je t'explique, au moment de ton CREATE PRODEDURE assures-toi d'exécuter le script avec la convention *SYS au lieu de *SQL.

    Par quel moyen exécutes-tu tes scripts ?

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par frfancha
    ...quelif / devel...
    J'ai un peu de mal à comprendre...
    Citation Envoyé par frfancha
    comment ce CHGCURLIB CURLIB se traduit-il en terme d'option run sql scripts?
    dans le script, exécute en premier lieu la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CL: CHGCURLIB CURLIB(...)
    et choisis l'option de naming *SYS, pas *SQL.

    Citation Envoyé par frfancha
    comment cela se traduit-il en terme d'option dans la config ODBC?
    Tu ajoutes les biblio concernées dans l'ordre que j'ai indiqué au paramètre "DEFAULT COLLECTION" dans la chaîne de connexion ODBC. Lire ceci attentivement.
    NB : un petit script VB ferait sans doute mieux l'affaire pour établir la chaîne de connexion ODBC et pouvoir jouer plus commodément sur la liste des bibliothèques.

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut *sys
    Desole, cela va peut etre vous sembler bizarre mais nous voulons du code indépendant de l'i5, qui tourne tel quel (ou quasi moyenant des changements syntaxiques minimes realisables automatiquement), donc pas d'utilisation de *SYS ici, seulement *SQL.
    Fred

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Citation Envoyé par frfancha Voir le message
    Desole, cela va peut etre vous sembler bizarre mais nous voulons du code indépendant de l'i5, qui tourne tel quel (ou quasi moyenant des changements syntaxiques minimes realisables automatiquement), donc pas d'utilisation de *SYS ici, seulement *SQL.
    Fred
    Celà n'a rien à voir avec la façon de coder ! et ça ne remet pas en cause les standards. Bref, alors courage avec tes iASPs

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Mais justement, toutes les procédures stockées sont TOTALEMENT INDEPENDANTES de la plate-forme et de l'OS sur lesquels elles tournent.

    Leur code ne contient aucun nom de bibliothèque. Le fait de jouer sur la convention de dénomination *SYS et sur la liste des bibliothèques est fonction de l'OS sur lequel elles tournent mais cela n'altère en rien leur code ou leur intégrité. A priori, ces mêmes procédures tourneraient aussi bien sur par ex. LUW telles qu'elles sont écrites.

    De surcroît, imposer une dénomination *SQL est pire car, tu l'as dit toi-même, les scripts SQL sont alors automatiquement qualifiés et c'est ce que tu ne veux pas. Alors ?

  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Citation Envoyé par K2R400 Voir le message
    Celà n'a rien à voir avec la façon de coder !
    Ben si énormément. Puisque dans les autres DB les concepts de library list et curlib n'existent pas, il est exclu de baser le design là-dessus.

    Sinon pour les iASP jusqu'à présent cela fonctionne parfaitement, cela nous permet d'avoir plusieurs environnements complètement identiques (y compris libl et curlib ;-) ) et de passer de l'un à l'autre sans soucis, et d'avoir plusieurs développements en parallèle dans chacun des iASP.
    La seule chose qu'on ne peut pas faire c'est tester des PTF's dans un iASP et pas dans l'autre, mais bon les iASP sont sur la machine de test et elle est là pour cela.

    D'ailleurs samedi c'est le grand jour! Mise en prod de nos 2 nouveaux 720 (1 de test/dev, 1 de prod)!
    Au fond si quelqu'un est intéressé par un 520 et un 800...

    Et merci à tous pour l'aide apportée sur ce forum.

    Fred

  20. #20
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Citation Envoyé par Mercure Voir le message
    Leur code ne contient aucun nom de bibliothèque. Le fait de jouer sur la convention de dénomination *SYS et sur la liste des bibliothèques est fonction de l'OS sur lequel elles tournent mais cela n'altère en rien leur code ou leur intégrité. A priori, ces mêmes procédures tourneraient aussi bien sur par ex. LUW telles qu'elles sont écrites.
    Ben cela est déjà vrai aujourd'hui. D'ailleurs une (petite) partie d'entre elles vient encore de la migration de DB2 windows vers i5 en 2003.
    Migration pednant laquelle un seul changement fut nécessaire:
    en DB2 windows c'était:
    create procedure truc (
    ...params...
    )
    specific truc
    language sql
    begin
    ...
    et en DB i5 il faut (en tout cas en V5R2 à l'époque) inverser specific et language:
    create procedure truc (
    ...params...
    )
    language sql
    specific truc
    begin
    ...

    Et dans cette migration les applications ODBC qui tournaient vers DB2 Windows ont tourné telle quelle sans aucune adaptation/recompilation vers l'i5 (sans ajouter de concept tel que curlib ou autre).

    Fred

Discussions similaires

  1. [librairies standard]slang.h et curses.h
    Par miss8 dans le forum Réseau
    Réponses: 13
    Dernier message: 27/12/2002, 10h14
  2. inclure une librairie *.lib
    Par darkbm dans le forum C
    Réponses: 2
    Dernier message: 16/12/2002, 22h48
  3. Réponses: 5
    Dernier message: 09/12/2002, 22h23
  4. [GTK]PB Librairie GTK+ sous dev-c++
    Par wozzy dans le forum Dev-C++
    Réponses: 15
    Dernier message: 05/11/2002, 14h55
  5. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo