barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком IBM. Показать все сообщения
Показаны сообщения с ярлыком IBM. Показать все сообщения

среда, 5 августа 2015 г.

WSO2 ESB и IBM WebSphere MQ: "Имя свойства 'Content-Type' не является верным идентификатором Java(tm)"

Сделал простейший прокси-сервис HTTP-> JMS (в качестве JMS-провайдера используется IBM WebSphere MQ 7.5), при его вызове получаю ошибку в логах:
TID: [0] [ESB] [2015-08-05 13:10:28,219] ERROR {org.apache.axis2.transport.jms.JMSSender} -  Error creating a JMS message from the message context {org.apache.axis2.transport.jms.JMSSender}
com.ibm.msg.client.jms.DetailedMessageFormatException: JMSCC0049: Имя свойства 'Content-Type' не является верным идентификатором Java(tm).
Указанное имя свойства не соответствует разрешенному формату, описанному в спецификации JMS.
Причина в том, что с точки зрения спецификации JMS имя свойства не может содержать символов "-". WSO2 же пытается пробросить в качестве свойства JMS-сообщения пришедший во входящем вызове HTTP-заголовок. Решение:
<property action="remove" name="TRANSPORT_HEADERS" scope="axis2"/>
<property action="set" name="transport.jms.ContentTypeProperty" value="CONTENT_TYPE" scope="axis2"/>
В данном случае тип контента будет записан в JMS-свойство "CONTENT_TYPE".

вторник, 4 августа 2015 г.

WSO2 ESB 4.8.1 + IBM WebSphere MQ 7.5: "Unable to continue server startup as it seems the JMS Provider is not yetstarted. Please start the JMS provider now"

Проблема

Настроил взаимодействие WSO2 ESB 4.8.1 и IBM WebSphere MQ 7.5, следуя примеру https://docs.wso2.com/display/ESB481/Configure+with+IBM+WebSphere+MQ. Пришлось немного отступить в части библиотек, т.к. состав библиотек, поставляемых с MQ 7.5 несколько отличается от приведенного в примере. В моем случае я поместил в %WSO2_HOME%/repository/components/lib следующие библиотеки, взяв их из /java/lib директории установки MQ:
  • fscontext.jar
  • providerutil.jar
  • com.ibm.mqjms.jar
  • com.ibm.mq.jmqi.jar
После этого шина стала успешно стартовать, инициализируя JMSSender и JMSReceiver. Однако, при попытке задеплоить прокси-сервис, слушающий JMS-очередь, я получал в логе:

[2015-08-04 12:27:55,477] ERROR - JMSListener Unable to continue server startup as it seems the JMS Provider is not yetstarted. Please start the JMS provider now.
[2015-08-04 12:27:55,480] ERROR - JMSListener Connection attempt : 1 for JMS Provider failed. Next retry in 20 seconds
[2015-08-04 12:28:15,505] ERROR - JMSListener Unable to continue server startup as it seems the JMS Provider is not yet
started. Please start the JMS provider now.
[2015-08-04 12:28:15,508] ERROR - JMSListener Connection attempt : 2 for JMS Provider failed. Next retry in 40 seconds
[2015-08-04 12:28:55,538] ERROR - JMSListener Unable to continue server startup as it seems the JMS Provider is not yet
started. Please start the JMS provider now.
[2015-08-04 12:28:55,543] ERROR - JMSListener Connection attempt : 3 for JMS Provider failed. Next retry in 80 seconds
...
Решение

Удалить библиотеки com.ibm.mqjms.jar и com.ibm.mq,jmqi.jar из components/lib (а также из components/dropins, куда их скопировала шина при установке). Далее я скопировал все содержимое папки /java/lib с машины MQ в папку %WSO2_HOME%/mq, после чего добавил в стартовый скрипт wso2 (wso2server.bat для Win) следующие строки:
rem --- FOR IBM MQ
set CARBON_CLASSPATH=.\mq\com.ibm.mq.jar;.\mq\com.ibm.mqjms.jar;.\mq\com.ibm.mq.jmqi.jar;%CARBON_CLASSPATH%

после строчки set CARBON_CLASSPATH=.\lib;%CARBON_CLASSPATH%. 
Прокси-сервис, слушающий JMS-очередь, заработал.

суббота, 9 февраля 2013 г.

WSO2 ESB + IBM WebSphere MQ: ошибки при передаче больших сообщений

Вот пара ошибок, которые могут возникнуть на WSO2 ESB при попытке положить большое сообщение в MQ:

1) MQRC_MSG_TOO_BIG_FOR_Q:
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ2007: Failed to send a message to destination 'xxx'. JMS attempted to perform an MQPUT or MQPUT1; however WebSphere MQ reported an error. Use the linked exception to determine the cause of this error.
        at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:608)
....
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2030' ('MQRC_MSG_TOO_BIG_FOR_Q').
Тут все понятно - сработало ограничение на максимальный размер сообщения, установленное для очереди. Меняем ограничение на большее, радуемся.

2) MQRC_DATA_LENGTH_ERROR:
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ2007: Failed to send a message to destination 'wso2test2'. JMS attempted to perform an MQPUT or MQPUT1; however WebSphere MQ reported an error. Use the linked exception to determine the cause of this error.
        at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:608)
...
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2010' ('MQRC_DATA_LENGTH_ERROR').

Причина этой ошибки менее очевидна и кроется в ограничении на максимальный размер сообщения, установленном для канала соединения с сервером. Увеличиваем:


и обязательно перезапускаем канал.
Также есть еще третье ограничение - ограничение на максимальный размер сообщения, устанавливаемое для администратора очередей.