Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2416 connectés 

  FORUM HardWare.fr
  Programmation

  Il y en a qui travaille avec IBM MQSeries ici ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Il y en a qui travaille avec IBM MQSeries ici ?

n°99158
JWhy
je peux plier (héhé)
Posté le 11-02-2002 à 23:01:16  profilanswer
 

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 !
 
 :jap:


---------------
www.alliancefrancophone.org ... Home is where the heart is
mood
Publicité
Posté le 11-02-2002 à 23:01:16  profilanswer
 

n°99195
antp
Super Administrateur
Champion des excuses bidons
Posté le 11-02-2002 à 23:42:11  profilanswer
 

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  :gun:
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]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°99215
JWhy
je peux plier (héhé)
Posté le 12-02-2002 à 00:07:34  profilanswer
 

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 :
  1. function MQPut(AQManager, AQName, ACorrelId, AMessage: string; var AMQSession : TMQSession): boolean;
  2. var
  3.   mqQueueManager : TMQQueueManager;
  4.   mqQueue        : TMQQueue;
  5.   mqMessage      : TMQMessage;
  6.   mqPutMessageOptions : TMQPutMessageOptions;
  7. begin
  8.   result := false;
  9.   mqQueueManager      := TMQQueueManager.Create(nil);
  10.   mqQueue            := TMQQueue.Create(nil);
  11.   mqMessage          := TMQMessage.Create(nil);
  12.   mqPutMessageOptions := TMQPutMessageOptions.Create(nil);
  13.   try
  14.     AMQSession.ClearErrorCodes;
  15.     mqQueueManager.ConnectTo(AMQSession.DefaultInterface.AccessQueueManager(AQManager) as IMQQueueManager500);
  16.     try
  17.       mqQueue.ConnectTo(mqQueueManager.DefaultInterface.AccessQueue(AQName,
  18.                                              MQOO_OUTPUT
  19.                                             or MQOO_INPUT_AS_Q_DEF
  20.                                             or MQOO_FAIL_IF_QUIESCING,
  21.                                             emptyparam, emptyparam, emptyparam) as IMQQueue500);
  22.       try
  23.         mqMessage.ConnectTo(AMQSession.DefaultInterface.AccessMessage as IMQMessage500);
  24.         try
  25.           mqPutMessageOptions.ConnectTo(AMQSession.DefaultInterface.AccessPutMessageOptions as IMQPutMessageOptions500);
  26.           try
  27.             mqPutMessageOptions.Options := mqPutMessageOptions.Options
  28.                                                 or MQPMO_SYNCPOINT;
  29.             mqMessage.CorrelationId     := ACorrelId
  30.                                           + StringOfChar(' ',24 - Length(ACorrelId));
  31.             mqMessage.MessageData := AMessage;
  32.             mqQueue.Put(mqMessage.DefaultInterface,
  33.                         mqPutMessageOptions.DefaultInterface);
  34.             result := true;
  35.           finally
  36.             mqPutMessageOptions.Disconnect;
  37.           end;
  38.         finally
  39.           mqMessage.Disconnect;
  40.         end;
  41.       finally
  42.         mqQueue.Disconnect;
  43.       end;
  44.     finally
  45.       mqQueueManager.Disconnect
  46.     end;
  47.   finally
  48.     mqPutMessageOptions.free;
  49.     mqMessage.free;
  50.     mqQueue.free;
  51.     mqQueueManager.free;
  52.   end;
  53. end;


 
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 :
  1. FMQSession.Connect;
  2. try
  3.   result := MQPut('QM.TEST', 'Q.TEST', 'IDduMsg', 'ContenuDuMsg', FMQSession)
  4. finally
  5.   FMQSession.Disconnect;
  6. end;


 
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 :
  1. mqQueueManager.ConnectTo(AMQSession.DefaultInterface.AccessQueueManager(AQManager) as IMQQueueManager500)


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 :jap:

 

[jfdsdjhfuetppo]--Message édité par JWhy--[/jfdsdjhfuetppo]


---------------
www.alliancefrancophone.org ... Home is where the heart is
n°99296
antp
Super Administrateur
Champion des excuses bidons
Posté le 12-02-2002 à 10:14:59  profilanswer
 

unexpected error :sweat:
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...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°99459
JWhy
je peux plier (héhé)
Posté le 12-02-2002 à 16:20:08  profilanswer
 

vivement ce soir  :bounce:  
 :jap:


---------------
www.alliancefrancophone.org ... Home is where the heart is
n°99608
JWhy
je peux plier (héhé)
Posté le 12-02-2002 à 22:57:55  profilanswer
 

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 :jap: )

 

[jfdsdjhfuetppo]--Message édité par JWhy--[/jfdsdjhfuetppo]


---------------
www.alliancefrancophone.org ... Home is where the heart is
n°99618
JWhy
je peux plier (héhé)
Posté le 12-02-2002 à 23:23:14  profilanswer
 

f*ck ... ca marche pas  :(  :cry: :(


---------------
www.alliancefrancophone.org ... Home is where the heart is
n°99623
antp
Super Administrateur
Champion des excuses bidons
Posté le 12-02-2002 à 23:30:24  profilanswer
 

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 :D)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°99624
JWhy
je peux plier (héhé)
Posté le 12-02-2002 à 23:35:37  profilanswer
 

si si c'est clair :d
 
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 :(


---------------
www.alliancefrancophone.org ... Home is where the heart is
n°99664
JWhy
je peux plier (héhé)
Posté le 13-02-2002 à 01:06:25  profilanswer
 

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  :sweat:  
 
j'ai reessayé mon "gros" programme avec les QM_TEST*/Q_TEST* nouvellement créés  
 
et ca marche  :sweat:  
 
c'est vraiment n'importe quoi...  :sweat:  :gun:

 

[jfdsdjhfuetppo]--Message édité par JWhy--[/jfdsdjhfuetppo]


---------------
www.alliancefrancophone.org ... Home is where the heart is
mood
Publicité
Posté le 13-02-2002 à 01:06:25  profilanswer
 

n°99979
JWhy
je peux plier (héhé)
Posté le 13-02-2002 à 16:22:09  profilanswer
 

bon en fait c'etait pas ca le pb... mais j'ai trouvé maintenant [:veryfree]
 
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 !  :crazy:

 

[jfdsdjhfuetppo]--Message édité par JWhy--[/jfdsdjhfuetppo]


---------------
www.alliancefrancophone.org ... Home is where the heart is

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Il y en a qui travaille avec IBM MQSeries ici ?

 

Sujets relatifs
Contenu de IBM WebSphere Studio ???cherche personne ayant deja travaillé avec les dll de lame/azid/vStrip
[JAVA] KKun aurait le JDK 1.3 d'IBM pour LINUX en TAR ?transformation tif en jpg je travaille avec php!
COBOL ET GROS SYSTEME IBM ETC... 
Plus de sujets relatifs à : Il y en a qui travaille avec IBM MQSeries ici ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)