1

これは非常に奇妙な動作です。NoSuchMethodException(コンパイルライブラリとランタイムライブラリのバージョンが一致しなかったため)があり、コンテナがそれを飲み込んだため、キャッチする機会がありませんでした。このコードを見てください:

@MessageDriven(...)
public class NotificationReceiver implements MessageListener {
@Override
public void onMessage(Message message) {
    try {
        String textMessage = ((TextMessage) message).getText();
        logger.debug("NOTIFICATION RECEIVED: " + textMessage);
        ...
        String string = rootNode.get("id").asText();
        logger.debug("ID: " + string);

    } catch (Throwable e) {
        logger.debug("ERROR", e);
    }
}

このコードは、JSON形式のテキストメッセージを聞くことを目的としていますが、受信するたびにポイントIDを取得することはありません。

DEBUG [p: thread-pool-1; w: 12] NotificationReceiver - NOTIFICATION RECEIVED: {"name":"X","id":"123"}

この時点以降、ログを受信しませんでした...

後で、このコードを@Asynchronousメソッド内の別のステートレスEJBに移動し、MDBから呼び出しました。それから私は例外を受け取りました:

DEBUG [Ejb-Async-Thread-10] NotificationReceiverAsync - NOTIFICATION RECEIVED: {"name":"X","id":"123"}
DEBUG [Ejb-Async-Thread-10] NotificationReceiverAsync - ERROR java.lang.NoSuchMethodError: org.codehaus.jackson.JsonNode.asText()Ljava/lang/String;

MDBにいる間、例外を受け取らなかったのはなぜですか?

アプリケーションサーバー:Glassfish 3.1.1

4

0 に答える 0