Можно ли вызвать транзакционный метод из самого EJB с отслеживанием состояния? Чтобы говорить более ясно:
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Stateless
public class MyService {
@Resource
SessionContext ctx;
public void myMethod() {
// do something...
// invoke method from the same class
// As expected - this doesn't work as it's a regular local-call,
// it's not aware of EJB nature of this call.
save();
// Doesn't work (although it worked with SLSB)
ctx.getBusinessObject(MyService.class).save();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void save() {
// do something...
}
}
Теперь я хочу позволить пользователю вызывать myMethod (); Я хочу быть уверен, что этот метод выполняется без транзакции JTA. После этого вызова я хочу вызвать save (); метод, который будет запущен в транзакции.
Если я использую метод ctx.getBusinessObject (-), я получаю:
ПРЕДУПРЕЖДЕНИЕ. Системное исключение произошло во время вызова метода EJB MyService public void com.test.MyService.save () javax.ejb.IllegalLoopbackException: Illegal Reentrant Access: Попытка выполнить обратный вызов метода ' public void com.test.MyService.save () для сеансового bean-компонента с сохранением состояния MyService
Внутренние вызовы не поддерживаются для SFSB?
Я использую Glassfish 3.1.1.