Я изучаю использование JAX-RS для какой-то спокойной разработки api и имею проблему в отношении моих классов ресурсов.
Я понимаю, что мой класс ресурсов должен быть RequestScoped, однако, когда это RequestScoped мой вызов метода persist-метода сущности, он генерирует исключение TransactionRequiredException.
Если я изменю свой класс ресурсов на "Без гражданства", тогда все будет в порядке, и менеджер объектов может сохраняться без каких-либо проблем.
Я все еще новичок в JavaEE и хотел бы знать, почему это происходит и что делает аннотация @Stateless, которая позволяет контексту персистентности правильно вводить. Я также хотел бы знать, есть ли какие-либо проблемы с классами ресурсов JAX-RS, являющимися апатридами вместо RequestScoped, поскольку большинство обучающих программ, которые я видел, имеют их.
Я привел пример кода ниже, чтобы проиллюстрировать.
@Path("Things")
//@Stateless //works just fine when em.persist() is called
@RequestScoped //throws transactionrequiredexception when em.persist() is called
public class ThingsResource{
@PersistenceContext(unitName = "persistenceUnitName")
EntityManager em;
public ThingsResource() { }
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response postThing(ThingDTO thing){
ThingEntity newThing = new ThingEntity(thing);
em.persist(newThing);
em.flush();
return Response.created(new URI("/" + newThing.getId()).build();
}
}