Message Driven Bean吞下java.lang.Error

时间:2012-10-29 17:19:21

标签: java java-ee glassfish ejb-3.1 jboss-mdb

这是一个非常奇怪的行为:我有一个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期间从未收到异常?

Application Server:Glassfish 3.1.1

0 个答案:

没有答案