Задача: посылать messagе из JMS приложения в легаси систем, которая о никаком JMS и слыхом не слыхивала. Все конечно через MQ Series.
Проблема: MQ снабжает все JMS мессаджи своими JMS заголовками.
Как можно заставить MQ не включать JMS заголовок?
Аппликейшн не должен при этом использовать ничего кроме JMS.
Зараннее, супер-спасибо!!!!
Как послать не JMS message через JMS?
-
- Уже с Приветом
- Posts: 1300
- Joined: 30 Jun 2002 17:50
- Location: IA -> CT -> NJ
-
- Уже с Приветом
- Posts: 525
- Joined: 01 May 2002 20:29
- Location: CT->MA->TX->UT
Все ИМХО, так как я небольшой спец по MQSeries. По аналогу с Oracle AQ. Ключевое слово - transformation. Существует два способа - 1 Организовать transformation при enqueueing JMS message в non-JMS queue. 2 Организовать 2 queues - JMS and non-JMS и организовать propagation между этими двумя queues с использованием transformation.
-
- Уже с Приветом
- Posts: 1300
- Joined: 30 Jun 2002 17:50
- Location: IA -> CT -> NJ
-
- Уже с Приветом
- Posts: 525
- Joined: 01 May 2002 20:29
- Location: CT->MA->TX->UT
Brat wrote:Спасибо!!!
А можно ли обойдить без создания промежуточной queue? Может можно как-то заставить MQ клиента не включать JMS headers?
Опять таки ИМХО - заголовки опредляются типом queue и не зависят от клиента. Попробуйте найти пример, как enqueue JMS message into non-JMS queue. Хотя помоему так сделать нельзя в силу архитектуры любого queue менеджера.
-
- Уже с Приветом
- Posts: 1300
- Joined: 30 Jun 2002 17:50
- Location: IA -> CT -> NJ
Для входящих сообщений MQ client сам распознает что пришло - обычное MQ сообщение или JMS. Для JMS приложения это прозрачно. Это позволяет
легаси системз и Java JMS аппликейшинам писать в одну и ту же Queue, которую читает мое JMS аппликейшн.
Однако ПОСЫЛАЯ сообщения в Queue, которая ничего не знает о JMS, я получаю все тот же JMS заголовок.
легаси системз и Java JMS аппликейшинам писать в одну и ту же Queue, которую читает мое JMS аппликейшн.
Однако ПОСЫЛАЯ сообщения в Queue, которая ничего не знает о JMS, я получаю все тот же JMS заголовок.
-
- Уже с Приветом
- Posts: 228
- Joined: 18 Jul 2002 18:14
- Location: FL
...if you send a message from a JMS Client
application to a traditional MQSeries application which has no knowledge of
MQRFH2 headers... administrator indicates that the JMS Client is communicating with such an
application by setting the MQSeries Destination’s TargetClient value to
JMSC.MQJMS_CLIENT_NONJMS_MQ. This indicates that no MQRFH2 field is to
be produced. Note that if this is not done, the receiving application must be able to
handle the MQRFH2 field.
Грубо говоря, либо очередь должна быть сконфигурирована с учетом типа клиента (non-JMS), либо этот клиент должен уметь выбрасывать MQRFH2 из тела сообщения. Не помню, как получить размер этого заголовка, но наверняка это возможно. Ищите спасение в Redbooks...
Банзай!!!
-
- Уже с Приветом
- Posts: 1102
- Joined: 16 Sep 2003 04:41
- Location: Out Of Blue
Re: Как послать не JMS message через JMS?
Brat wrote:Задача: посылать messagе из JMS приложения в легаси систем, которая о никаком JMS и слыхом не слыхивала. Все конечно через MQ Series.
Проблема: MQ снабжает все JMS мессаджи своими JMS заголовками.
Как можно заставить MQ не включать JMS заголовок?
Аппликейшн не должен при этом использовать ничего кроме JMS.
Зараннее, супер-спасибо!!!!
You could cast your queue to MQQueue
((com.ibm.mq.jms.MQQueue)queue).setTargetClient(1);
However it's not a pure jms anymore. The code snippet above make your app vendor specific.
It's better to create jndi bindings for your queues with all the properties you want
(create q(jms/YourQueueBinding) queue(PHYSICAL.QUEUE.NAME) tc(MQ))
either with JMSAdmin tool or with websphere app server admin console
and use jndi lookup to get the queue
javax.jms.Queue q = (javax.jms.Queue) ctx.lookup("jms/YourQueueBinding");
-
- Уже с Приветом
- Posts: 1300
- Joined: 30 Jun 2002 17:50
- Location: IA -> CT -> NJ