JTA требует новых не работает в том же классе инъекций - PullRequest
0 голосов
/ 03 мая 2018

Ну, у меня есть класс, введенный CDI, как показано ниже:

@Named
@RequestedScoped
public class MyClass{
   @Transactional
   public void start(){
     for(int i = 0; i < 100;i++){
        //do some logic
        forceSave();//should save immediately
      }
   }

   @Transactional(value = Transactional.TxType.REQUIRES_NEW)
   public void forceSave(){

   }
}

Несчастен, это не работает. ForceSave () работает в той же транзакции, что и метод start (). Мне нужно создать другой класс, поместите forceSave () в этот другой класс, и все будет работать так:

 @Named
    @RequestScoped
    public class MyClass{
       @Inject
       private MyClassTwo two;
       @Transactional
       public void start(){
         for(int i = 0; i < 100;i++){
            //do some logic
            two.forceSave();//should save immediately
          }
       }

    }

@Named
@RequestScoped
public class MyClassTwo{
 @Transactional(value = Transactional.TxType.REQUIRES_NEW)
       public void forceSave(){

       }
}

Это второе решение работает отлично, но очень уродливо. Мне нужно всегда создавать другой класс, чтобы использовать новую транзакцию. Есть еще один способ это исправить?

...