Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MQ Series вопросы куда постить? / 13 сообщений из 13, страница 1 из 1
23.05.2007, 07:30
    #34544217
MQ Series вопросы куда постить?
Что такое 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
23.05.2007, 11:00
    #34544718
MQ Series вопросы куда постить?
Документация:
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
23.05.2007, 11:00
    #34544721
MQ Series вопросы куда постить?
msg.format = MQC.MQFMT_STRING
наверно примерно также должно быть и с APPLIDENTITYDATA, поле из той же структуры, что и format
...
Рейтинг: 0 / 0
23.05.2007, 16:56
    #34546388
MQ Series вопросы куда постить?
А как заставить вызываться 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
23.05.2007, 18:01
    #34546653
dehgrhtj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MQ Series вопросы куда постить?
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
23.05.2007, 18:31
    #34546736
MQ Series вопросы куда постить?
Да конвертнул 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
23.05.2007, 19:21
    #34546823
вапацркер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MQ Series вопросы куда постить?
потестить -- разве что печатать в файл.

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

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

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

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

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

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


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

Так кто инициирует вызов SExit-а? Я так понимаю что то на стороне сендера должно быть сконфигурировано что бы вызвать SE на другом конце.
...
Рейтинг: 0 / 0
24.05.2007, 10:27
    #34547675
MQ Series вопросы куда постить?
Максим РагозинА как заставить вызываться 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
24.05.2007, 10:54
    #34547803
вафвавфы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MQ Series вопросы куда постить?
Так кто инициирует вызов SExit-а? Я так понимаю что то на стороне сендера должно быть сконфигурировано что бы вызвать SE на другом конце

канальный агент (MCA)
...
Рейтинг: 0 / 0
24.05.2007, 11:45
    #34548081
MQ Series вопросы куда постить?
вафвавфыТак кто инициирует вызов 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
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MQ Series вопросы куда постить? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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