Я использую Java EE 7 + GlassFish и мне нужно выполнить некоторые операции с несколькими сущностями JPA из bean-компонента без сохранения состояния.
@Stateless
public class JobRunner
{
public void do()
{
for (Entity entity:facade.findAll())
{
///do some work against entity
}
}
}
Этот компонент JobRunner внедряется в сервлет, и я вызываюМетод do () из веб-интерфейса.
Проблема заключается в том, что все сущности меняются в одной транзакции, поэтому при сбое все откатывается, что нежелательно.Есть ли способ запустить и закрыть новую транзакцию для каждой сущности (то есть для каждой итерации цикла)?
Я могу написать внешний клиент и сделать там цикл, вызывающий компонент без состояния для каждой сущности, но этоне то, что полностью работает для меня, так как я предпочитаю сохранять приложение монолитным.Можно ли как-то управлять формой транзакции внутри контейнера?
Может быть, JMS поможет?Если я реализую исполнителя в качестве прослушивателя сообщений и буду отправлять сообщение для каждой сущности, начнется ли новая транзакция для каждой?
@Stateless
public class JobRunner
{
public void do()
{
for (Entity entity:facade.findAll())
{
sendMessageToRealDoer(entity);
}
}
}