У нас есть javax.ejb.TimedObject , который ставит сообщения в очередь на MDB, например, так ...
ctx = new InitialContext();
QueueConnectionFactory qCF = (QueueConnectionFactory) ctx
.lookup("java:comp/env/jms/queueconnfactory");
Queue q = (Queue) ctx.lookup("java:comp/env/jms/queue");
conn = qCF.createQueueConnection();
session = conn.createQueueSession(true,
Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(q);
TextMessage txtMsg = session.createTextMessage();
txtMsg.setLongProperty(JobMonitorUtil.JOB_REFERENCE_ID, filingId);
txtMsg.setLongProperty(JobMonitorUtil.JOB_ID, jobId);
txtMsg.setLongProperty(JobMonitorUtil.JOB_RUN_SID, jobRunSId);
sender.send(txtMsg);
session.close();
conn.close();
Когда я отлаживаю это (в Weblogic 10.3.1.0), я выполняю шагчерез линию sender.sent (txtMsg), и я ожидаю, что моя точка останова onMessage будет достигнута почти мгновенно.Он не достигнет моей точки останова, пока я не позволю запустить ejbTimeout (на самом деле, когда я выйду из TimerImpl.timerExpired).Очередь сообщений находится на том же сервере, который генерирует сообщения.
Мне это кажется странным.
- Разве сообщения MDB не отправляются асинхронно?
- Может ли это быть проблемой конфигурации или это так должно работать?