Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / websphere Win32 / 7 сообщений из 7, страница 1 из 1
01.12.2004, 17:21
    #32808144
rainbow_demon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
websphere Win32
Есть задача: развернуть WebSphere под Win2k.
Поставил сервер. поставил CBindings.
Теперь пишу на сях простенького клиента, кидающего сообщение в очередь.

Во всех данных примерах вся работа с WebsPhere начинается с ф-ии
mqeSession_initialize.
Естесно все lib-ы b dll-и я подключил.
сперва при запуске программы вываливался error - code 30000, reason 30045
я посмотрел hmq9al_WMQE_C_BindingsProgrammingGuide.pdf , что в комплекте идет. Там (p10) сказано, что нужна Java Vm. Ну я поставил 1.4, что была в комплекте на диске Websphere. Прописал сист. перем. среды PATH к jvm.dll. Там еще про конфиг javа написано. Ну я сделал переменную среды
MQE_VM_OPTIONS_LOCN ,
прописал там путь
d:\MQSeries\IBMJava\java.cfg
на файл с конфигом:
содержимое файла:
#Example configuration file
-Djava.class.path=d:\MQSeries\IBMJava\jre\bin;d:\MQSeries\IBMJava;e:\test projects\MQTest
-Djava.compiler=NONE
В результате, все валится на mqeSession_initialize (unhandled exception).
В чем фишка?

MQ работает. В explorer-e можно сообщения в очередь добавлять.

Общий код таков:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
	MQeExceptBlock errorBlock;
	MQERETURN rc;	

	// Initialize a session 
   rc = mqeSession_initialize(&errorBlock);      //здесь все падает

   if (MQERETURN_OK == rc) {
   	MQeQueueManagerHndl hQMgr;
      MQeStringHndl hQStore;
      MQeStringHndl hQueueManager;

      MQeFieldsHndl hInitFields;

      // Setup
      rc = mqeString_newChar8(&errorBlock,&hQueueManager,TEST_QUEUE_MANAGER);
      if (MQERETURN_OK == rc) {
         // set up a paramter fields
         rc = createInitFields(&errorBlock,&hInitFields, hQueueManager);
         if (MQERETURN_OK == rc) {
            // create a queue store path string 
            rc = mqeString_newChar8(&errorBlock, &hQStore, MSG_LOG ":" TEST_QUEUE_MANAGER "\\Queues\\");
            if (MQERETURN_OK == rc) {
               // create a queue manager
               rc = createQueueManager(&errorBlock,&hQMgr,hInitFields,hQStore);
               if (MQERETURN_OK != rc) {
                  displayError("Queue manager creation error", &errorBlock);
               }
...
...
Рейтинг: 0 / 0
01.12.2004, 18:49
    #32808349
rainbow_demon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
websphere Win32
я в конфиге прописал вообще все пути к jar-м...
конфиг стопудово хватается. Если конфига нет - вылезает нормальный (handled) exception, про то, что java VM not initialized...

а так все валится глобально, причем ошибка (fatal) возникает в HMQ_чего-то там.dll (в одной из подключенных dll-ей, вроде бы HMQBindings.dll).

юзаю MS VC++ 6.0

Такое ощущение, что валится java. Я думаю не комп ли виноват? У меня Pentium4. Помню в Oracle - все падало, даже patch на java специальный с metalink-a ставили...
...
Рейтинг: 0 / 0
15.12.2004, 16:41
    #32828940
rainbow_demon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
websphere Win32
И?
...
Рейтинг: 0 / 0
15.12.2004, 18:30
    #32829226
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
websphere Win32
что "И ?" ?

ты на чем-то таком пишешь, что я не знаю. и даже нет ничего в доках по wmq. что это такое?

простенький клиент, кидающий в очередь MQSeries на С++.





Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
// read text file and put each line in MQSeries;
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <ctype.h>
#include <cmqc.h>

void hint(char * argv0) {
  cerr << "usage: \n" 
	  << argv0 << " -q queue "
                  "[-m manager]"
                  "[-tm manager]"
				  "[-f file]"
				  "[--ccsid=CCSID]"
				  "[--ingroup]"
				  << flush;
}
int main(int argc, char *argv[])
{
char szQueue[ 50 ] = {  0  };
char szFile[ 50 ] = {  0  }; 
char szManager[ 50 ] = {  0  };
char szTManager[ 50 ] = {  0  };
int  CCSID =  0 ;
int ingroup =  0 ;
for(int xx= 1 ; xx<argc; ++xx) {
   if ( !strcmp( argv[xx], "-q") )  {
	   ++xx;
	   if( !(xx<argc)) {
	      hint(argv[ 0 ]);
		  return  1 ;
	   }
	   strcpy(szQueue, argv[xx]);
	   continue;
   }
   if ( !strcmp( argv[xx], "-f") )  {
	   ++xx;
	   if( !(xx<argc)) {
	      hint(argv[ 0 ]);
		  return  1 ;
	   }
	   strcpy(szFile, argv[xx]);
	   continue;
   }
   if ( !strcmp( argv[xx], "-m") )  {
	   ++xx;
	   if( !(xx<argc)) {
	      hint(argv[ 0 ]);
		  return  1 ;
	   }
	   strcpy(szManager, argv[xx]);
	   continue;
   }
   if ( !strcmp( argv[xx], "-tm") )  {
	   ++xx;
	   if( !(xx<argc)) {
	      hint(argv[ 0 ]);
		  return  1 ;
	   }
	   strcpy(szTManager, argv[xx]);
	   continue;
   }
   if( !strncmp(argv[xx],"--ccsid=",  8  )) {
	   for(int zz =  8 ;argv[xx][zz];++zz) {
			if (isdigit(argv[xx][zz])) {
			} else {
				hint(argv[ 0 ]);
				return  1 ;			
			}
	   }
      CCSID = atoi(argv[xx]+ 8 );
      continue;
   }
    if( !strcmp(argv[xx],"--ingroup" )) {
     ++ingroup;
    continue;
   }

				hint(argv[ 0 ]);
				return  1 ;			

}
if(!szQueue[ 0 ]) {
    hint(argv[ 0 ]);
	return  1 ;
}
MQHCONN  Hcon; 
{
	MQLONG CC;
	MQLONG RC;
	MQCONN(szManager,&Hcon,&CC,&RC);
    if(CC==MQCC_FAILED) {
       cerr << "cannot connect to manager '" << szManager << "'\n" << flush;
	   cerr << "reason code: " << RC << endl << flush;
       return  1 ;
	}
}
MQHOBJ   Hobj;
{
   MQLONG O_options = MQOO_OUTPUT + MQOO_FAIL_IF_QUIESCING;
   MQLONG CC;
   MQLONG RC;
   MQOD   Od = {MQOD_DEFAULT};
   strncpy(Od.ObjectQMgrName, szTManager , (size_t)MQ_Q_NAME_LENGTH );
   strncpy(Od.ObjectName, szQueue, (size_t)MQ_Q_NAME_LENGTH);
   MQOPEN(Hcon, &Od, O_options, &Hobj, &CC, &RC); 
   if(CC==MQCC_FAILED) {
      cerr << "cannot open queue: " << szQueue << endl << flush;
	  cerr << "reason code: " << RC << endl << flush;
	  return  1 ;
   }
}

if(szFile[ 0 ]) {

  ifstream *xx = new ifstream(szFile , ios::nocreate   );
  if ( 1 )  {
//  if (xx->is_open())  {
	  cin = *xx;
  } else {
      cerr << "Cannot open file " << szFile << endl;
	  return  1 ;
  }
}

MQMD     md1 = {MQMD_DEFAULT};
MQPMO   pmo1 = {MQPMO_DEFAULT};

if(ingroup) {

	memcpy(md1.MsgId, MQMI_NONE, sizeof(md1.MsgId) );
	memcpy(md1.CorrelId, MQCI_NONE, sizeof(md1.CorrelId) );
	memcpy(md1.Format, MQFMT_STRING, (size_t)MQ_FORMAT_LENGTH);
	if (CCSID)	{
		md1.CodedCharSetId = CCSID;
	}
	md1.Version = MQMD_VERSION_2;
	md1.MsgFlags =  8 ; 
    pmo1.Version = MQPMO_VERSION_2;
    pmo1.Options += MQPMO_LOGICAL_ORDER;
}

char szLine[ 65536 ];
while(!cin.eof()) {
	szLine[ 0 ] = '\0';
    cin.getline(szLine,  65536 , '\n');
	if(!szLine[ 0 ]) continue;
	int xx = strlen(szLine);
	MQLONG CC;
	MQLONG RC;
	if(!ingroup) {
		MQMD     md = {MQMD_DEFAULT};
		MQPMO   pmo = {MQPMO_DEFAULT};
		MQLONG CC;
		MQLONG RC;
		memcpy(md.MsgId, MQMI_NONE, sizeof(md.MsgId) );
		memcpy(md.CorrelId, MQCI_NONE, sizeof(md.CorrelId) );
		memcpy(md.Format, MQFMT_STRING, (size_t)MQ_FORMAT_LENGTH);
		if (CCSID)	{
			md.CodedCharSetId = CCSID;
		}
		MQPUT(Hcon, Hobj,  &md, &pmo, xx, szLine, &CC, &RC);
	} else {
        if(cin.eof())  	md1.MsgFlags =  16 ; 
		MQPUT(Hcon, Hobj,  &md1, &pmo1, xx, szLine, &CC, &RC);
	}
	if(CC==MQCC_FAILED) {
	  cerr << "MQPUT failed with reason code: " << RC << endl << flush;
	  break;
	}
}
{
		MQLONG CC;
		MQLONG RC;
MQCLOSE(Hcon, &Hobj,  0 , &CC, &RC);

if(CC==MQCC_FAILED) {
   cerr << "MQCLOSE failed with reason code: " << RC << endl << flush;
}
MQDISC(&Hcon, &CC, &RC); 
if(CC==MQCC_FAILED) {
   cerr << "MQDISC failed with reason code: " << RC << endl << flush;
}

}
return  0 ;
}

...
Рейтинг: 0 / 0
22.12.2004, 17:22
    #32839979
rainbow_demon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
websphere Win32
Да MS Visual C++ - все под ней...
...
Рейтинг: 0 / 0
22.12.2004, 17:26
    #32839998
rainbow_demon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
websphere Win32
вообще все из примера взято...
ладно. не так важно.
Есть другой вопрос callback-и (С++, VB) на очереди есть какие-нить (чтоб отлавливать события прихода сообщений в очередях).
написано, что для этой цели есть триггеры, но чего к чему?

и еще...
какие-то средства для фильтрации сообщенией есть в c++, VB?
чтоб написать типа
topic like ...
ну вместо топика replysubject, e.g.
...
Рейтинг: 0 / 0
22.12.2004, 19:41
    #32840318
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
websphere Win32
callback - и это что-то не от сюда. есть exit-ы, но они совершенно для других целей.

триггеры в самом деле чтобы отлавливать приход сообщения.

в простейшем приближении, когда приходит сообщение в очередь, возникает триггерное событие. оно проявляется тем, что в специальную инициализрующую очередь Queue Manager кладет специальное триррегное сообщение. специальный процесс -- триггерный монитор -- читает это триггергое сообщение и может как-то на него отреагировать, обычно запустить какой - то обработчик сообщений. вот и все.

на самом деле для того, чтоб возникло триггерное событие нужно чтоб были соблюдены 12 (вроде) условий, ну не важно.




>и еще...
>какие-то средства для фильтрации сообщенией есть в c++, VB?
>чтоб написать типа
>topic like ...
>ну вместо топика replysubject


в MQSerirs в mqmd есть поля MsgId, CorrelId. по ним можно выбирать сообщения, больше никак.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / websphere Win32 / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]