Позвоните setRollbackOnly()
на SessionContext
, если вы находитесь в EJB.
Вы можете ввести SessionContext
так:
public MyClass {
@Resource
private SessionContext sessionContext;
@Transactional(propagation = Propagation.REQUIRED,
isolation = Isolation.DEFAULT,
readOnly = false)
public int saveAll(){
//do stuff;
if(oops == true) {
sessionContext.setRollbackOnly();
return;
}
}
setRollbackOnly()
является членом EJBContext
. SessionContext
расширяет EJBContext
:
http://java.sun.com/j2ee/1.4/docs/api/javax/ejb/SessionContext.html Обратите внимание, что он доступен только в сессиях EJB.
@Resource
- это стандартная аннотация Java EE, поэтому вам, вероятно, следует проверить свои настройки в Eclipse. Вот пример того, как внедрить SessionContext, используя @Resource
.
Я подозреваю, что это, вероятно, не ваше решение, поскольку кажется, что вы, возможно, не работаете с EJB - объясняя, почему Eclipse не находит @Resource
.
В таком случае вам нужно будет напрямую взаимодействовать с транзакцией - см. Шаблон транзакции.