Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Как из java достучатся до WebSphereMQ  [new]
Alex3000
Guest
Перечитал разные статьи и мануалы по WebSphereMQ.

Доступ к WebSphereMQ из java приложений можно получить через два интерфейса нативный MQI и сановский JMS. Как написанно в мануалах на сервере нужно сделать следующий набор действий:

1. Создать Queue Manager (делаем через графическое меню в MQ explorer), в месте с Listner Configuration for TCP/IP , например на порт 1415. Назавем например Q_M

2. Создать локальную очередь для этого менеджера (LOCAL QUEUE) например с именем Q1

3. Создать Серверный канал в менеджере (Server-connection channel), назовем например CH


Далее в дирректории установке C:\Program Files\IBM\WebSphere MQ\Tools\Java\base есть утилита проверки java - MQIVP. Запускае ее и вводим запрашиваемые данные IP сервера, порт, канал и менеджер (ранее определенные шаг 1-3).
Проверка показывает не работоспособность указанных настроек (Failure: Attempt to connect to queue manager failed. Reason: MQ Reason code 2195).
При этом если смотреть на состояние канала CH - то он находитсяв состоянии INACTIVE. Попытки стартовать канал, как через MQ explorer, так и через runmqsc , проходят удачно, но состояние канал не меняется (остается в INACTIVE) :

start CHANNEL ('CH')
2 : start CHANNEL ('CH')
AMQ8018: Start WebSphere MQ channel accepted.


В MQ explorer - Overall channel status - Inactive


Кто сталкивался с подобной проблемой, или у кого есть опыт, в корректоном конфигурировании сервера WebSphere MQ для посылки в его очереди сообщений из java, поделитесь опытом... что делаю не так???

Заранее спасибо
19 июн 08, 16:03    [5821697]     Ответить | Цитировать Сообщить модератору
 Re: Как из java достучатся до WebSphereMQ  [new]
NewYear
Member

Откуда: Большой адронный коллайдер
Сообщений: 2203
А вы не напишите сюда что там есть в этой утилите?
20 июн 08, 11:40    [5825158]     Ответить | Цитировать Сообщить модератору
 Re: Как из java достучатся до WebSphereMQ  [new]
Евгений Хабаров
Member

Откуда: Москва
Сообщений: 773
Если у канала тип SVRCONN, т.е. канал для подключения клиентов, то он и будет INACTIVE.
Это нормальное его состояние.
Проверить нужно что слушается порт 1415 (через netstat например).
Если порт слушается, значит проблема скорее всего с самим приложением.
Еще желательно почитать лог сервера MQ и Event Log в Windows.
Проверять работоспособность сервера и канала по моему лучше другими средствами, например rfhutilc из пакета IH03
20 июн 08, 12:50    [5825758]     Ответить | Цитировать Сообщить модератору
 Re: Как из java достучатся до WebSphereMQ  [new]
NewYear
Member

Откуда: Большой адронный коллайдер
Сообщений: 2203
Евгений Хабаров
Если у канала тип SVRCONN, т.е. канал для подключения клиентов, то он и будет INACTIVE.
Это нормальное его состояние.


ну это не совсем так. когда приложение запущено канал активный.
проще всего зарегистрировать локальный менеджер как удалённый в mq explorer и посмотреть на
syste.admin.svrconn.

не хочу только сейчас это делать...
20 июн 08, 14:05    [5826513]     Ответить | Цитировать Сообщить модератору
 Re: Как из java достучатся до WebSphereMQ  [new]
Alex3000
Guest
NewYear
А вы не напишите сюда что там есть в этой утилите?

Да ничего особенного - вообще это класс MQIVP.class находится в каталоге C:\Program Files\IBM\WebSphere MQ\Tools\Java\base.
Вот здесь более подробно
http://www-1.ibm.com/support/docview.wss?doc=aimwmq&rs=171&uid=swg21164356

Предлагает ввести хост, менеджер и канал, а потом пытается тестировать, но виснет.


Установил патч 6.0.2.4. Появилось эксплорере появилось меню JMS Administrated Object... Через него добавил начальный контекст (add initial context) в виде File System. а далее определил обьекты и через код :

try
		{
			
			javax.naming.InitialContext ctx;
			javax.jms.QueueConnectionFactory QCF;
			javax.jms.QueueConnection conn;
			javax.jms.QueueSession session;
			javax.jms.Queue queue_out;
			javax.jms.QueueSender sender;

			
		
			
			java.util.Hashtable env = new java.util.Hashtable();

			env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");

			env.put(javax.naming.Context.PROVIDER_URL, "file:/C:/JNDI-Directory");


			ctx = new InitialContext(env);

			QCF = (QueueConnectionFactory) ctx.lookup("QCF");


			queue_out = (Queue) ctx.lookup("default");

			ctx.close();

			conn = QCF.createQueueConnection();
			conn.start();
			session = conn.createQueueSession(true, QueueSession.AUTO_ACKNOWLEDGE);
			sender = session.createSender(queue_out);

			javax.jms.TextMessage message = session.createTextMessage( "text");
			sender.send(message);
			session.commit();



			session.close();
			conn.close();

			
			
			
			
		} catch (Exception e)
		{
			e.printStackTrace();
		}

Достучался до очереди...

Но очень странно получается... Тот же код не работает в версии 6.0, где соответственно нет графического определения через эксплорер JNDI, а все делается через JMSAdmin.... Хотя после добавления initial context через эксплорер, увидл свои ранее определенные обьекты через JMSAdmin в версии 6.0 до наката патча...
20 июн 08, 14:25    [5826679]     Ответить | Цитировать Сообщить модератору
 Re: Как из java достучатся до WebSphereMQ  [new]
NewYear
Member

Откуда: Большой адронный коллайдер
Сообщений: 2203
Alex3000
NewYear
А вы не напишите сюда что там есть в этой утилите?

Да ничего особенного - вообще это класс MQIVP.class находится в каталоге C:\Program Files\IBM\WebSphere MQ\Tools\Java\base.
Вот здесь более подробно
http://www-1.ibm.com/support/docview.wss?doc=aimwmq&rs=171&uid=swg21164356

Предлагает ввести хост, менеджер и канал, а потом пытается тестировать, но виснет.


В самом деле хрень какая-то


C:\mqm\Tools\Java\base>ls
MQIVP.class mqjcivp_es.properties mqjcivp_pt.properties
mqjcivp.properties mqjcivp_fr.properties mqjcivp_zh_CN.properties
mqjcivp_de.properties mqjcivp_it.properties mqjcivp_zh_TW.properties
mqjcivp_en.properties mqjcivp_ja.properties mqjmsapi.jar
mqjcivp_en_US.properties mqjcivp_ko.properties MQSample.java

C:\mqm\Tools\Java\base>java MQIVP.class
Exception in thread "main" java.lang.NoClassDefFoundError: MQIVP/class

C:\mqm\Tools\Java\base>java MQIVP
Websphere MQ for Java Installation Verification Program
5724-B4 (C) Copyright IBM Corp. 2002. All Rights Reserved.
===========================================================

Please enter the IP address of the MQ server :127.0.0.1
Please enter the port to connect to : (1414)
Please enter the server connection channel name :REXX.SVRCONN
Please enter the queue manager name :RAHN
MQJE001: ?«???¬?« ??¬??????? MQException: ?«? ?????????? 2, »?????? 2195
MQJE020: ???????????«? «??????® ?? »«?????????? ?????® CCSID
MQJE001: ?«???¬?« ??¬??????? MQException: ?«? ?????????? 2, »?????? 2195
MQJE020: ???????????«? «??????® ?? »«?????????? ?????® CCSID
Failure: Attempt to connect to queue manager failed.
Reason: MQ Reason code 2195
Action: Consult Websphere MQ Application Programming Reference for explanation.

C:\mqm\Tools\Java\base>runmqsc
5724-H72 (C) Copyright IBM Corp. 1994, 2004. ALL RIGHTS RESERVED.
Starting MQSC for queue manager RAHN.


ALTER QMGR CCSID(1252)
1 : ALTER QMGR CCSID(1252)
AMQ8005: WebSphere MQ queue manager changed.
END
2 : END
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.

C:\mqm\Tools\Java\base>java MQIVP
Websphere MQ for Java Installation Verification Program
5724-B4 (C) Copyright IBM Corp. 2002. All Rights Reserved.
===========================================================

Please enter the IP address of the MQ server :127.0.0.1
Please enter the port to connect to : (1414)
Please enter the server connection channel name :REXX.SVRCONN
Please enter the queue manager name :RAHN
Success: Connected to queue manager.
Success: Opened SYSTEM.DEFAULT.LOCAL.QUEUE
Success: Put a message to SYSTEM.DEFAULT.LOCAL.QUEUE
Success: Got a message from SYSTEM.DEFAULT.LOCAL.QUEUE
Success: Closed SYSTEM.DEFAULT.LOCAL.QUEUE
Success: Disconnected from queue manager


Tests complete -
SUCCESS: This MQ Transport is functioning correctly.
Press Enter to continue ...


ну предлагаю на это забить. конечно это баг но догадаться было несложно....

а вот про JINDI я вам ничего не скажу к сожалению...
20 июн 08, 14:37    [5826787]     Ответить | Цитировать Сообщить модератору
 Re: Как из java достучатся до WebSphereMQ  [new]
Евгений Хабаров
Member

Откуда: Москва
Сообщений: 773
Вот, есть простенький примерчик, писал по случаю.
В архиве:
подкаталог context хранит .bindings, который создается командой jms_admin_add.cmd, на основе команд из файла jms_commands.txt
Сама программа запускается start_sender.cmd. Лог ведется в файл sender_log.txt, при нормальном финале он будет пустым.
Предполагается что классы MQ присутствуют в глобальном CLASSPATH, rроме того, глобальный CLASSPATH должен содержать текущий каталог "." чтобы взялся класс Sender.

Проверялось на MQ 6.0.2.3

Порядок действий:
1. Стереть .bindings из подкаталога context
2. Поправить jms_commands.txt
3. Выполнить jms_admin_add.cmd, проверить лог jms_admin_add.log
4. Выполнить start_sender.cmd

К сообщению приложен файл (mq_jms_test.zip - 3Kb) cкачать
20 июн 08, 17:17    [5828283]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить