【问题标题】:bind a custom object to a JMS MapMessage将自定义对象绑定到 JMS MapMessage
【发布时间】:2013-10-08 05:56:55
【问题描述】:

我是否有一种标准方法可以将我自己的自定义对象添加到 Map 中,然后将其正确编组到 MapMessage 中?目前我收到无效的对象类型消息。我注意到 WebSphere 有一个解决方案,但我正在寻找不绑定到特定 AS 的东西,如果没有这样的方法,也许 JBoss 支持的东西会起作用。

如何在 WebSphere 中做到这一点: http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic=/com.ibm.websphere.wesb.doc/ref/rwesb_jmscustombindings.html

【问题讨论】:

    标签: java jboss jms


    【解决方案1】:

    JMS 映射消息的映射仅支持原语和字符串(及其数组)作为值。 来自javadoc

    名称是字符串对象,值是原始数据类型 在 Java 编程语言中。

    您最好使用ObjectMessage 并将您的序列化对象写入映射,然后将映射作为 ObjectMessage 的有效负载发送。这样,您仍然可以拥有名称/值映射访问样式,但不受类型的限制。

    【讨论】:

      【解决方案2】:

      在 Spring(2.5、3.1)中使用 JsmTemplate,如果您想通过 jmsTemplate.convertAndSend() 发送一个 Map,其中 Map 包含非原始对象,您可以将 Map 转换为 Serializable 并调用 @ 987654326@。这边走:

      //...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 将使用可序列化的地图,并通过网络发送ObjectMessage

      请注意,使用消息的侦听器必须能够读取 ObjectMessage,然后再次将其转换为 Map。请注意,您必须在线路的两侧都有相应的类,当然,Map 中的对象必须是可序列化的!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-27
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 2014-07-30
        相关资源
        最近更新 更多