gpt4 book ai didi

java - 数据库异常后 MDB 中没有消息重新传递

转载 作者:行者123 更新时间:2023-12-01 12:02:07 25 4
gpt4 key购买 nike

场景:

在我的 MDB 的 onMessage 方法中,我基本上这样做:

  • 打印标签
  • 更新数据库:“标签已打印”

发生的情况是(由于某种原因)我有一个内部数据库异常,因此在我看来事务被回滚,消息被重新传递,并且我有一个无限循环,其中打印标签(无限打印)。

我想要的不是重新发送消息。

在发布此问题之前,我阅读了这些文章:

我正在使用 Glassfish 2.1、ActiveMQ、EclipseLink,方法 onMessage 包含 try/catch 子句,我在其中记录异常

片段代码:

@MessageDriven(mappedName = JMSConstants.COMMAND_SPOOL_TOPIC_JNDI, activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
@ActivationConfigProperty(propertyName = "clientId", propertyValue = "PrinterCommandSpoolMessageBean"),
@ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "PrinterCommandSpoolMessageBean"),
@ActivationConfigProperty(propertyName = "messageSelector", propertyValue = JMSSelector.PRINT_COMMAND_SELECTOR)
})
public class PrinterCommandSpoolMessageBean implements MessageListener {

private final static Logger LOGGER = Logger.getLogger(PrinterCommandSpoolMessageBean.class.getName());

@EJB
private CoreServiceRemote coreService;

@Override
public void onMessage(Message message) {

LOGGER.info("********************* message arrived ********************");
if (message instanceof MapMessage) {

CommandSpool cs = null;
try {
MapMessage mapMessage = (MapMessage) message;

//missing code

if (actualCopies >= copies) {
coreService.updateCommandSpool(cs.getId(), CommandSpoolStatus.EXECUTED);
coreService.setSensorIssued(ps.getSensorUUID());
} else {
coreService.updateCommandSpool(cs.getId(), CommandSpoolStatus.NOT_EXECUTED);
}

} catch (Exception ex) {
LOGGER.log(Level.WARNING, "Exception", ex);
if (cs != null) {
coreService.resetCommandSpool(cs.getId());
}

}
}
}

最佳答案

您确定 coreService.resetCommandSpool(cs.getId()) 不会引发另一个异常吗?

鉴于您捕获了所有异常,您是否希望您的 MDB 是事务性的?您始终可以在 ejb 方法上启动新事务。

关于java - 数据库异常后 MDB 中没有消息重新传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com