メッセージをMDB のキューに入れるjavax.ejb.TimedObjectがあります...
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 メッセージは非同期で送信されませんか?
- これは構成の問題でしょうか、それともこれがどのように機能するはずですか?