Я не могу сделать приложение MDB для удаления из очереди каждого сообщения после успешного использования .
В настоящее время кажется, что несколько сообщений потребляются в одной транзакции , которая фиксируется, когда я закрываю приложение MDB.
В результате информация об очереди (DEQ_TIME, DEQ_UID и т. Д.) В таблице очередей устанавливается для всех потребляемых сообщений только тогда, когда я закрываю приложение MDB. Все удаленные сообщения получают один и тот же DEQ_TIME, даже если они были использованы в разное время.
Кроме того, если выдается какое-то исключение во время выполнения, все незафиксированные, но обработанные сообщения повторно отправляются и обрабатываются повторно.
Конфигурация Weblogic 12c: XAQueueConnectionFactory для фабрики соединений.
Моя конфигурация MDB: (по умолчанию используются управляемые контейнером транзакции):
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "connectionFactoryLookup",
propertyValue = "jms/my-service-qcf"),
@ActivationConfigProperty(propertyName = "destinationLookup",
propertyValue = "jms/MyQueue"),
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
})
public class ReceiveController implements MessageListener, TransportListener {
@Override
public void onMessage(Message message)
{
if (message instanceof TextMessage) {
log.info("---------- Got text message ----------");
sendEmail((TextMessage)message);
} else {
log.severe("Invalid message type (TextMessage expected)");
}
}