mdb 内で例外を処理するにはどうすればよいですか? try catch ブロックの後に例外が発生するというおかしな感じがするので、それをキャッチしてログに記録できません。Glassfish v3 は、メッセージ全体を繰り返すことを決定します。無限ループに陥り、ハードドライブに大量のログファイルを書き込みます。
私は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.
}
}