powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MQ Series вопросы куда постить?
13 сообщений из 13, страница 1 из 1
MQ Series вопросы куда постить?
    #34544217
Что такое Application Identity field (APPLIDENTITYDATA) of the message descriptor(MQDM)? И как к нему правильно доступиться из Java?

На всякий случай кусок кода подготовки сообщения, но без вышеуказанного MQDM-а

Код: 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.
	private static void sendRequestToMQSeries(String text) throws MQException, IOException {
		String queueName = _conf.getString("MQEnvironment.SmartLoanRequestQueue");
		MQQueue inq = _qMgr.accessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT);
		try {
			MQMessage msg = new MQMessage();
			//
			msg.format = MQC.MQFMT_STRING;
			//
			if (_conf.containsKey("MQEnvironment.replyToQueueName")) {
				String value = _conf.getString("MQEnvironment.replyToQueueName");
				if (StringUtils.isNotBlank(value)) {
					msg.replyToQueueName = value;
				}
			}
			if (_conf.containsKey("MQEnvironment.replyToQueueManagerName")) {
				String value = _conf.getString("MQEnvironment.replyToQueueManagerName");
				if (StringUtils.isNotBlank(value)) {
					msg.replyToQueueManagerName = value;
				}
			}
			//
			msg.writeString(text);
			//
			MQPutMessageOptions options = new MQPutMessageOptions();
			//
			inq.put(msg, options);
		} finally {
			inq.close();
		}
	}
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34544718
Документация:
http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic=/com.ibm.mq.branding.doc/help_home_wmq.htm
Описание назначения полей можно найти в разделе
Application Programming Ref->Data Type Descriptions->MQMD->Fields

Как работать с полем из Java смотри здесь

Раздел Using Java->Package com.ibm.mq->MQMD->Fields

Поле applicationIdData типа java.lang.String
MQMessage является потомком MQMD, поэтому наследует все эти поля.
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34544721
msg.format = MQC.MQFMT_STRING
наверно примерно также должно быть и с APPLIDENTITYDATA, поле из той же структуры, что и format
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34546388
А как заставить вызываться SecurityExit на стороне получателя?

Насколько я понял то надо добавить MQC.MQOO_SET_IDENTITY_CONTEXT при открытии Queue и добавить MQC.MQPMO_SET_IDENTITY_CONTEXT для MQPutMessageOptions.options?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
		MQQueue inq = _qMgr.accessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_SET_IDENTITY_CONTEXT);
...
			String userId = _conf.getString("MQEnvironment.UserID");
			String password = _conf.getString("MQEnvironment.Password");
			//
			msg.applicationIdData = userId + password;
			//
			MQPutMessageOptions options = new MQPutMessageOptions();
			//
			options.options = MQC.MQPMO_SET_IDENTITY_CONTEXT;
			//
			inq.put(msg, options);
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34546653
dehgrhtj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exit нужно прописать в свойствах канала.

Насколько я понял то надо добавить MQC.MQOO_SET_IDENTITY_CONTEXT при открытии Queue и добавить MQC.MQPMO_SET_IDENTITY_CONTEXT для MQPutMessageOptions.options?

надо. ну можно ставить MQPMO_SET_ALL_CONTEXT.
еще надо добавить пользователя в группу mqm


msg.applicationIdData = userId + password
это в какой кодировке поле получится-то? не UTF?

оно будет конвертиться при передачи между менеджерами, как бы чего не вышло.
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34546736
Да конвертнул msg.applicationIdData = в ASCII на всякий случай.

Можно поподробнее про SecurityExit? Вот его код. Как мне его протестировать? Что мне надо сделать на стороне отправителя и где что бы он вызвался на стороне получателя?

Код: 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.
/* standard headers */
#include <stdio.h>
#include <string.h>
#include "..\include\cmqc.h" /* For MQI datatypes */
#include "..\include\cmqxc.h" /* For MQI exit-related definitions */

__declspec(dllexport) void MQStart() {
} 

__declspec(dllexport) void MQENTRY MQCHLSEC( 
		PMQCXP pChannelExitParams,
		PMQCD pChannelsDefinition,
		PMQLONG pDataLength,
		PMQLONG pAgentBufferLength,
		PMQBYTE pAgentBuffer,
		PMQLONG pExitBufferLength,
		PMQPTR pExitBufferAddr
		)
{
	pChannelExitParams->ExitResponse = MQXCC_OK;
	pChannelExitParams->Feedback =  0 ;

	switch ( pChannelExitParams-> ExitReason ) {

	case MQXR_INIT:
		break;

	case MQXR_INIT_SEC:
		break;

	case MQXR_SEC_MSG:

		*pDataLength =  20 ;
		pChannelExitParams->ExitResponse = MQXCC_SEND_SEC_MSG;

		strncpy_s( (char *)pAgentBuffer, *pAgentBufferLength, pChannelExitParams->ExitData, min( 20 , strlen(pChannelExitParams->ExitData)) );
	break;

	case MQXR_TERM:
		break;

	default:
		break;
	} /* switch */
} /* END OF void MQENTRY MQCHLSEC( */
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34546823
вапацркер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
потестить -- разве что печатать в файл.

нужно собрать dll экспортировать функцию MQCHLSEC
скопировать dll в ExitPath (свойства Queue манагера можно посмотреть в эксплорере или в реестре)

в свойствах канала sender (на передаче) и receiver (на приёме)
на вкладке Exits
в поле Security Exit Name написать 'dllname(entry_point_name)'
например myExit(MQCHLSEC)
и перестартовать канал.

тогда exit будет вызываться
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34546841
Тоесть один и тот же SecurityExit должен быть установлен с "обоих" сторон канала? На сендере и ресивере?

Может мне проще перезвонить?
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34546862
то где какой ексит должен быть установлен -- это вопрос прикладной
главное что он так вызовется.

к тому же что делает в прикладном смысле приведенный код я не понял.
на первый взляд,

кроме этой непонятной строчки
strncpy_s( (char *)pAgentBuffer, *pAgentBufferLength, pChannelExitParams->ExitData, min(20, strlen(pChannelExitParams->ExitData)) );
это просто заготовка, которая ничего не делает. (не знаю что такое pAgentBuffer)


если нужно на стороне получателя, значить настраивать канал на стороне получателя, на sender ничего не делать.
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34547016
Код получает userID+пароль как параметер "Security exit user data" (первые 20 символов). Альтернативно можно было бы и закодировать.

Так кто инициирует вызов SExit-а? Я так понимаю что то на стороне сендера должно быть сконфигурировано что бы вызвать SE на другом конце.
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34547675
Максим РагозинА как заставить вызываться SecurityExit на стороне получателя?
Насколько я понял то надо добавить MQC.MQOO_SET_IDENTITY_CONTEXT при открытии Queue и добавить MQC.MQPMO_SET_IDENTITY_CONTEXT для MQPutMessageOptions.options?

Почитать документацию однако : Security Exits

Security exits normally work in pairs; one at each end of a channel. They are called immediately after the initial data negotiation has completed on channel startup. Security exits can be used to provide the security services described in the following sections.

Java-клиент может использовать как Java-экзиты, так и скомпилированные (non-Java): Using channel exits
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34547803
вафвавфы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так кто инициирует вызов SExit-а? Я так понимаю что то на стороне сендера должно быть сконфигурировано что бы вызвать SE на другом конце

канальный агент (MCA)
...
Рейтинг: 0 / 0
MQ Series вопросы куда постить?
    #34548081
вафвавфыТак кто инициирует вызов SExit-а? Я так понимаю что то на стороне сендера должно быть сконфигурировано что бы вызвать SE на другом конце
канальный агент (MCA)
Ну неужели сложно документацию почитать?
Channel security exit programs
Там и схемы приведены.

Если совсем коротко, то модуль Exit-а нужно зарегистрировать в свойствах канала.
На стороне сервера это одно из свойств канала, на стороне клиента это берется или из таблицы каналов, или в случае Java задается через MQEnvironment.
Кстати говоря, даже если на стороне клиента нет SE, но он есть на стороне сервера, это тоже вариант.
из документацииpassword

public static java.lang.String

The password used to verify the identity of the WebSphere MQ Client. It is equivalent to the MQEnvironment variable MQ_PASSWORD .

If a security exit is not defined for this client, the value of password is transmitted to the server and is available to the server security exit when it is invoked.

The default value is "" (empty string).
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MQ Series вопросы куда постить?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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