У меня есть следующая EJB сессионный компонент:Как я могу получить транзакцию изоляции на EJB?
@Stateless
public class FacadeBean implements FacadeBeanRemote {
@PersistenceContext(unitName = "ejercicio7PU")
private EntityManager em;
@Override
public void insertar(final long id) {
Record r = new Record();
r.setId(id);
em.persist(r);
}
@Override
public void insertarTres(final long id1, final long id2, final long id3) {
Logger.getLogger(FacadeBean.class.getName()).log(Level.INFO, "Insertando registros");
insertar(id1);
insertar(id2);
insertar(id3);
}
}
И сущность записи следующее:
@Entity
public class Record implements Serializable{
private static final long serialVersionUID = 1L;
@Id
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String toString() {
return "Record{" + "id=" + id + '}';
}
}
Я зову удаленный метод на отдельном приложении Java для вставки три числа:
ejb.insertarTres(1l, 2l, 3l);
Теперь, когда я снова вызываю удаленный метод со следующими номерами:
ejb.insertarTres(4l, 5l, 3l);
Числа 4 и 5 сохраняются, даже если исключение происходит по номеру 3.
Я попытался установить метод вставки с
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
, но он не работает для моего
Упс забыл что-то добавить к этому предыдущему комментарию, я имею в виду его отдельно, везде, где вы вызываете insertarTres(). – Gimby
Возможный дубликат [Почему не совершает транзакцию Requires \ _New?] (Http://stackoverflow.com/questions/29487285/why-does-not-commit-transaction-of-requires-new) – Gimby
Вам нужно получить ссылка на EJB, потому что только вызов метода не будет использовать соответствующий транзакционный контекст. См. Предложенный ответ в ссылке @Gimby – Sergio