如何處理mdb中的異常?我有一種有趣的感覺,那就是try catch塊之後發生異常,所以我無法捕獲並記錄它。 Glassfish v3決定重複整個消息。它運行到一個無限循環,並在硬盤上寫入很多日誌文件。消息驅動Bean(MDB)中的捕獲異常
我使用Glassfishv3.01 +的EclipseLink 2.0.1
public class SaveAdMessageDrivenBean implements MessageListener {
@PersistenceContext(unitName="QIS")
private EntityManager em;
@Resource
private MessageDrivenContext mdc;
public void onMessage(Message message) {
try {
if (message instanceof ObjectMessage) {
ObjectMessage obj = (ObjectMessage)message;
AnalyzerResult alyzres = (AnalyzerResult)obj.getObject();
save(alyzres);
}
} catch (Throwable e) {
mdc.setRollbackOnly();
log.log(Level.SEVERE, e);
}
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
private void save(AnalyzerResult alyzres) throws PrdItemNotFoundException {
Some s = em.find(Some.class, somepk);
s.setSomeField("newvalue");
// SQL Exception happens after leaving this method because of missing field for ex.
}
}
非常感謝,我該如何「將信息傳遞給一個毒藥隊列」? –
你的想法很好,謝謝了很多 –
@HananTuncay澄清了'毒素隊列部分',我不確定它是因爲中毒來源於'編程'錯誤,這裏的日誌應該足夠了,所以簡單地省略'mdc.setRollbackOnly();' –