4

これは本当に JMS で POJO を受け取る方法ですか?

public void onMessage(Message msg) {
     ObjectMessage objMsg = (ObjectMessage) msg;
     if(objMsg.getObject() instanceof <<sometype>>) {
        //do something 
     }
 }

ObjectMessage にキャストする必要がありますか。実際には、msg が ObjectMessage にもキャスト可能かどうかを確認する必要があります。

または私は何かが恋しいですか?

どうも

4

3 に答える 3

1

JMS Spring Docから例を引用すると、例からわかるように、メッセージが TextMessage タイプであるかどうかを確認する必要があるため、同様に、あなたの場合、キャストを確認するか、オブジェクトがメッセージタイプのインスタンスであるかどうかを確認する必要があります。そのため、2 つのアプローチがあります。これで問題が明確になることを願っています。

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class ExampleListener implements MessageListener {

    public void onMessage(Message message) {
        if (message instanceof TextMessage) {
            try {
                System.out.println(((TextMessage) message).getText());
            }
            catch (JMSException ex) {
                throw new RuntimeException(ex);
            }
        }
        else {
            throw new IllegalArgumentException("Message must be of type TextMessage");
        }
    }
}
于 2012-05-21T17:33:32.610 に答える
1

はい、いくつかの例外を確認したい場合があります。ただし、Spring (および apache camel などのフレームワーク) を使用すると、あるクラスのオブジェクトを単純に処理する Bean を簡単に接続できます。これは、コードを簡素化するためのオーバーヘッドと追加の構成の複雑さに見合う価値がある場合とない場合があります。

説明については、この記事の数ページを参照してください: http://www.wmrichards.com/mdp.pdf

于 2012-05-21T17:43:38.720 に答える
1

私の知る限り、それだけです。ただし、1 つの宛先 (キューまたはトピック) で、異なるメッセージ タイプとメッセージ内の異なるオブジェクト タイプを混在させることはほとんどありません。そのため、SomeType オブジェクトを含む ObjectMessages のみが予期されることがわかっている場合は、instanceof チェックをスキップできます。

于 2012-05-21T17:35:02.987 に答える