Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2007, 15h17   #1
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
Par défaut Stored Procedure sur AS400

Bonjour,

J'ai un problème à l'exécution d'une procédure (invoquée par un prepareCall en java). Le programme (CLP) est bien appelé, le problème est lié au contexte d'exécution du programme...
Il semble que les modifications de la liste des bibliothèques ne soient pas prisent en compte (ou du moins partiellement) parce que l'exécution d'un QMQRY (en l'occurrence un "delete from NomTable") se plante avec "NomTable" n'est pas trouvée dans la bibliothèque du programme appelant (hors aucune bibliothèque n'a été spécifiée là, et la liste des bibliothèque a été modifiée pour contenir celle qu'il faut ).

Bref, si quelqu'un a une idée...

A+
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2007, 16h06   #2
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Bonjour.
C'est curieux !!
AMHA il faut vérifier qu'il n'y a pas de qualif. explicite dans la QM. Vérifier que les overrides sont bons, sinon les supprimer avant. (des remanences).

Cordialement
Hédhili Jaïdane
- - - - - - - - -
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2007, 17h22   #3
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
Pour être curieux, c'est curieux

J'ai peut-être une piste avec le schema...

Ce pourrait-il que le schema (établit ou non lors de la création de la connection JDBC) soit prioritaire sur les changements de bibliothèques dans la liste des bibliothèques fait par le programme (une forme de cloisonnement) ?
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2007, 18h06   #4
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Désolé, je n'ai pas beaucoup de pratique avec les shémas et je n'ai pas d'AS/400 en ce moment pour regarder plus loin.
HJ
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 12h40   #5
Membre du Club
 
Inscription : février 2007
Messages : 56
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 56
Points : 56
Points : 56
Bonjour,

Si j'ai bien compris, dans ta Procédure stockée tu appelles un CLP qui fait un STRQMQRY ?
Dans cette commande, as tu vérifié la pramètre Convention de nommage (SQL ou SYS) ? En convention de nommage SLQ, la LIBL n'est pas utilisé : on travaille à la mode DB2 UDB, c'est à dire, recherche dans un schéma dont le nom est identique à l'ID de connexion, puis dans les LIBs système (QSYS, QSYS2, ..)

C.
clalevee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 13h06   #6
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
il y a des chances pour que ce soit le schéma.
Un schéma sous SQL correspond à une bibliothèque sous l'AS/400.
Aucun schéma ne devrait être référencé dans les instructions lors de l'exécution.
Supprime donc toute mention au schéma ou qualification dans tes instructions et refais un essai.
Si tu n'arrives toujours pas à faire fonctionner ta prosto, colle ici le CL et le CREATE PROCEDURE correspondant pour qu'on puisse t'aider au mieux.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 10h39   #7
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
Bon, désolé pour le retard, mais voici les derniers avancements...

Le CLP qui fait le STRQMQRY utilise bien la convention de nommage *SYS, cependant, il n'en tient pas compte (??? )

J'ai testé en modifiant les paramètres de la connexion comme suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
...
Statement stmt = connection.createStatement();
stmt.execute("SET CURRENT SCHEMA = AUDDLIB");
stmt.execute("SET CURRENT PATH =  AUDDLIB, ALCLEMESSY , AUDPLIB, GENPLIB, MVXBENV, QGPL, IRH61SPCLI,
IRH61FCLI, IRH61FX, STORIA, REPEMP, ECLDLIBCY");
 
CallableStatement cs = connection.prepareCall ("{call
QGPL.INITDATA()}");
cs.execute ();
cs.close ();
...
Au résultat, certaines choses fonctionnent mais il semble qu'il utilise toujours le schema par défaut pour la résolution des tables

Donc, ça suppose de qualifier toutes les tables dans les requêtes ce qui est gênant (encore que, ça évite des fois de modifier une table à la place d'une autre... mais là, ce n'est pas moi qui décide )

Bref, si quelqu'un a une idée pour que les requêtes utilisent la liste des bibliothèques, je suis preneur...

Merci
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 12h32   #8
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Je me demande si la liste des bibliothèques prise en compte ne serait pas plutôt celle associée à la JOBD (ou au profil) d'exécution du programme CL.
Il a bien fallu se signer d'une façon ou d'une autre sur l'AS400 pour pouvoir accéder aux données. Or, chaque travail sur l'AS400 a besoin d'une JOBD pour fonctionner. Reste à voir si la *LIBL prise en compte ne serait pas la liste qui est associée profil de signature ?

Je ne connais pas et donc n'ai pas utilisé Java dans un contexte C/S mais en revanche j'ai pratiqué VBA et Windev-Webdev. Je me rappelle avoir géré la liste des biblio. avec les commandes CHGCURLIB et CHGLIBL dans les scripts Webdev ou VBA juste avant d'invoquer par un CALL SQL la procédure RPG IV stockée sur DB2/400.

Evidemment, on a toujours l'ultime ressource de mettre la liste des biblio. au début du programme CL INITDATA avec la commande CHGLIBL par exemple. Mais, bon ! c'est pas terrible pour la maintenance mais je pense c'est toutefois moins pire que de qualifier le nom des tables avec la biblio. puisque toutes les biblio. sont localisées et rassemblées sur une seule commande en début de traitement dans le CL initial.

Tiens-nous au courant quand même.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 13h35   #9
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Salut.

Regarde aussi dans les jobd associées au profil de connexion et celles associées aux profils QUSER et QSYS (divers serveurs de connexions, ...). C'est peut être une piste.

Cordialement
Hédhili Jaïdane
- - - - - - - - -
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 13h55   #10
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
Citation:
Envoyé par Mercure Voir le message
Evidemment, on a toujours l'ultime ressource de mettre la liste des biblio. au début du programme CL INITDATA avec la commande CHGLIBL par exemple.
C'est justement ce que fait le CL, mais pour une raison que j'ignore, il n'en tient pas compte pour les tables

Sûr que si je trouve un truc, je vous tiens au courant...
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 14h50   #11
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Est-ce que chaque requête établie sur le client ne générerait pas un job chaque fois différent sur l'AS400, par hasard ? Et comme les requêtes ne passeraient pas par le CL initial, tu te retrouverais avec la liste des biblio d'origine, donc ton problème actuel de liste des biblio...
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 16h45   #12
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 064
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 064
Points : 5 655
Points : 5 655
Bon, ça y est, j'ai trouvé

Pour ceux que ça intéresse, voici la "subtilité" du 400 au travers de JDBC

Pour créer la connection, il faut passer par un fichier de propriétés comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
Class.forName (AS400_DRIVER) ;
Properties prop = new Properties () ;
prop.put ("user", AS400_USERNAME) ;
prop.put ("password", AS400_PASSWORD) ;
prop.put ("prompt", "false") ;
prop.put ("errors", "full") ;
prop.put ("naming", "system") ;
// prop.put ("libraries", "*LIBL") ;

Connection connection = DriverManager.getConnection ("jdbc:as400://AS400_ADDRESS/", prop);
Attention, subtilité 2 : si l'url de connexion contient un schéma, ça by-pass la liste des bibliothèques (même celle qui pourrait être positionnée par prop.put ("libraries", "*LIBL") ;

(bonjour le truc de dingue ...)

Voilà, merci à ceux qui ont essayer de m'aider...

A+
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 17h08   #13
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Encore un coup tordu à la IBM... Comme quoi, Java et IBM ne font pas bon ménage, surtout après l'infecte publicité qui a été publiée il y a qq années genre : "Si tu ne veux pas te plier à Java, alors tu ferais mieux d'aller faire des hamburgers chez Mac Donald's".
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h50.


 
 
 
 
Partenaires

Hébergement Web