Il y en a qui travaille avec IBM MQSeries ici ? - Programmation
Marsh Posté le 11-02-2002 à 23:42:11
j'ai joué avec ça pendant mon stage de l'année passée...
haaa combien d'heures j'ai passé avec la doc d'IBM et leurs exemples avec des bugs bien cachés
mais bon je sais pas si je me souviens de tout et surtout si je saurais répondre à tes questions...
[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]
Marsh Posté le 12-02-2002 à 00:07:34
ouais pareil... j'en chie comme c'est pas permis et y'a pas un pet de doc... que ca soit chez IBM ou meme sur Google... a croire que personne n'utilise ca...
bon j'y vais:
avec Delphi 6 (etonnant, non ? ) j'utilise les objets COM+ fournis (depuis la v.5.2) par la DLL MQAX200.DLL: TMQSession, TMQQueueManager, TMQQueue, TMQMessage, TMQPutMessageOptions pour mettre un message (texte) dans une queue..
ce sont de simples wrapper autour des interfaces: IMQSession200, IMQQueueManager500, etc...
au final, ca donne qqchose comme ca:
Code :
|
donc tout un tas de try..finally pour matcher les connect/disconnect et qq lignes de codes pour effectivement mettre un message...
la fonction qui appelle MQPut a cette tete la:
Code :
|
FMQSession etant declare comme un TMQSession
Donc mon pb:
en fait, ca marche bien quand j'appelle la fonction 1 fois... mais si jamais j'ai le malheur de l 'appeler une seconde fois, ca me lance une Exception MQ a la ligne:
Code :
|
l'exception en question etant:
MQAX200.MQSession::AccessQueueManager CompletionCode = 2, ReasonCode = 2195, ReasonName = MQRC_UNEXPECTED_ERROR
comme toujours les msgs de MQSeries sont super explicites
donc si jamais tu as une idée
[jfdsdjhfuetppo]--Message édité par JWhy--[/jfdsdjhfuetppo]
Marsh Posté le 12-02-2002 à 10:14:59
unexpected error
toujours le message génial qui ne dit absolument pas pourquoi ça foire
Moi j'avais fait ça en C++, mais le look était pas trop différent je pense...
À première vue je ne vois pas ce qui foire, mais je vais regarder ce soir chez moi si je retrouve du code de mon stage...
Marsh Posté le 12-02-2002 à 16:20:08
ReplyMarsh Posté le 12-02-2002 à 22:57:55
Bon... je crois que j'ai reussi a faire un truc qui marche...
en fait il semblerait qu'il faille avoir les "memes" objets MQ pour les 2 Put...
donc j'ai cree les mq* en dehors de la procedure Put, et j'ai cree un autre objet qui a comme propriete une Session, un QManager, une Q, etc... et une methode Put(QManagerName, QName)
Je l'instancie, j'assigne les proprietes (les mq* crées "en dehors" ) et j'appelle la fonction Put... je rappelle Put une deuxieme fois ... et ca a l'air de marcher...
j'ai du aussi virer les disconnect... il doit gerer ca en interne je pense...
m'enfin c'est pas super clair comme truc, quand meme !
(si tu as d'autres infos/conseils/remarques, n'hesite pas a les poster )
[jfdsdjhfuetppo]--Message édité par JWhy--[/jfdsdjhfuetppo]
Marsh Posté le 12-02-2002 à 23:23:14
ReplyMarsh Posté le 12-02-2002 à 23:30:24
hum je trouve plus les sources de mon travail de stage... vais devoir chercher plus.
je me souviens qu'un des trucs pour lesquels j'ai cherché longtemps, c'est qu'à un moment on devait créer un objet (ou une structure) à passer à un objet, mais même après l'appel on ne pouvait pas détruire cet objet.
moi j'avais un truc du genre:
if .... un truc
{
creation/declaration de la structure
appel d'une fonction en passant en param la structure
des trucs
}
// ici la structure existe plus, puisque hors du if
appel d'une autre fonction
// et la tout plantait, pcq la structure qu'on lui avait donné plus haut existait plus, et il l'utilisait telle quelle au lieu de copier les données. C'était tiré directement d'un exemple d'IBM, qui fonctionnait car c'etait un tout petit prog. Dans le prog queje faisais, c'etait plus gros, et la memoire etait probablement reutilisee, donc la structure plus valide, donc ca plantait
(il est tard, ce post est peut etre incompréhensible )
Marsh Posté le 12-02-2002 à 23:35:37
si si c'est clair
c'est ce que je pensais aussi et c'est pour ca que j'avais créér des objets MQ "globaux" et les avais passé a la fonction mais il veut pas non plus
Marsh Posté le 13-02-2002 à 01:06:25
bon laisse tomber...
j'ai recréé un petit programme (que j'allais envoyé a IBM pour qu'ils me disent ce qui deconnait) qui appelle la meme fonction... la seule difference et que j'ai recréé des nouveaux Queue Managers / queues de test (QM_TEST1/Q_TEST1 et QM_TEST2/Q_TEST2)....
et ca marche
j'ai reessayé mon "gros" programme avec les QM_TEST*/Q_TEST* nouvellement créés
et ca marche
c'est vraiment n'importe quoi...
[jfdsdjhfuetppo]--Message édité par JWhy--[/jfdsdjhfuetppo]
Marsh Posté le 13-02-2002 à 16:22:09
bon en fait c'etait pas ca le pb... mais j'ai trouvé maintenant
en fait si je fais un GET d'un QM 'qm_1' puis un PUT dans un 'qm_2' et encore un PUT dans le 'qm_1' ca me crashe a la figure...
par contre, si je fais un GET d'un QM 'qm_1' puis un PUT dans le meme 'qm_1' et qu'apres je fais le PUT dans le 'qm_2' ca marche...
on dirait qu'il n'aime pas trop que je change de Queue Manager pour y revenir apres
m'enfin, j'ai modifié le code pour faire tout ce que j'ai a faire dans le meme QM avant de passer au suivant et maintenant ca marche !
[jfdsdjhfuetppo]--Message édité par JWhy--[/jfdsdjhfuetppo]
Marsh Posté le 11-02-2002 à 23:01:16
pasque j'ai plein de problemes lors des Put/Get de messages donc plutot qu'exposer mes soucis pendant 3h et ce, peut-etre, dans le vent, je prefererai etre sur qu'il y ai qq'un pour me repondre !
---------------
www.alliancefrancophone.org ... Home is where the heart is