Мое приложение использует Hibernate как поставщик JPA и JBOSS 6.1.0-final как сервер. И транзакция CMT (тип транзакции в моем persistence.xml - JTA). Как показывает большинство руководств. транзакция в методе ejb будет автоматически зафиксирована, если она закончится без каких-либо исключений. Однако в моем приложении, если я не использую flush()
, транзакция не будет выполнена, когда метод ejb завершится успешно (например, вставка записи никогда не вставляет данные в базу данных). Это тот же результат как в фазах без состояния, так и в состоянии stateful.EJB Транзакция не совершена, если не используется EntityManger # flush()
Я стараюсь использовать @TransactionAttribute(TransactionAttributeType.REQUIRED)
, но результат тоже тот же. Даже использование аннотации MANDATORY
не вызывает никаких исключений, которые предполагают, что мой метод ejb использует транзакцию, управляемую контейнером.
Код Fragement:
@Stateful
@Local
public class TransactionTest implements ITransactionTest {
@PersistenceContext(unitName="Table")
private EntityManager manager;
public void generateRecord(int i) throws RuntimeException{
Record record = new Record();
record.setId(i+"");
record.setStatus(1);
manager.persist(record);
manager.flush(); //without this, it won't commit
}
}
Итак, почему мой метод EJB не может совершать сделки автоматически?
Можете ли вы обновить свое сообщение соответствующим кодом. –
Здесь я добавляю образец кода. – Kajelas