привязать пользовательский объект к JMS MapMessage - PullRequest
3 голосов
/ 02 февраля 2012

Есть ли стандартный способ для меня добавить свой собственный объект на карту и затем правильно распределить его в MapMessage? В настоящее время я получаю сообщение Invalid Object Type. Я заметил, что у WebSphere есть решение, но я ищу что-то, что не связано с конкретной AS, если такого метода нет, может быть, что-то, поддерживаемое JBoss, будет работать.

Как это сделать в WebSphere: http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic=/com.ibm.websphere.wesb.doc/ref/rwesb_jmscustombindings.html

Ответы [ 2 ]

6 голосов
/ 02 февраля 2012

Карта сообщения JMS-карты поддерживает только примитивы и строки (и их массивы) в качестве значений. Из Javadoc :

Имена - это строковые объекты, а значения - примитивные типы данных. на языке программирования Java.

Вам лучше использовать ObjectMessage и записать ваши сериализованные объекты на карту, а затем отправить карту в качестве полезной нагрузки ObjectMessage. Таким образом, вы все равно можете иметь стиль доступа к карте имя / значение, но без ограничения типов.

1 голос
/ 08 октября 2013

С JsmTemplate весной (2.5, 3.1), если вы хотите отправить от Map до jmsTemplate.convertAndSend(), где Карта содержит непримитивный объект, вы можете разыграть Карту Serializable и звоните send(MessageCreator). Сюда:

//...some previous code here

final Map myMap = createYourSerializableMapHere();

jmsTemplate.send(new MessageCreator(){

    @Override
    public Message createMessage(Session session) throws JMSException {
        ObjectMessage objectMessage = session.createObjectMessage((Serializable) myMap);

        return objectMessage;
    }
});

Таким образом jmsTemplate будет работать с картой как Serializable и отправит ObjectMessage по проводам.

Обратите внимание, что сообщения, принимающие слушателя, должны будут прочитать ObjectMessage и затем снова преобразовать его в Map. Помните, что у вас должны быть соответствующие классы с обеих сторон провода, и, конечно, объекты внутри карты должны быть сериализуемыми!

...