JavaEE7で開発しています。
デッドロックが検出された場合、SQLTransactonRollbackExceptionがスローされることは分かっているのですが、これを捕まえてトランザクションをリトライする方法が分かりません。

トランザクション制御には、@Transactionalを使っています。
ただ、@Transactionalのついたクラス(またはメソッド)の中でロールバックされた場合、再びそのメソッドを呼ぶと、TransactionRequiredExceptionが発生してしまいます。

トランザクションの外側(呼び出し側)のコードのイメージは↓こんな感じです。
(リトライ回数の制御とか、かなり省いていますが)

@RequestScoped
public class SomeFacade {
  @Inject
  private SomeTran someTran;

  public void run()
    try {
      this.someTran.execute();
    } catch (SQLTransactonRollbackException ex) {
      this.someTran.execute(); // -> TransactionRequiredException
    }
  }
}

SomeTranクラスに@RequestScoped@Transactionalが付いています。

@RequestScoped
public class SomeTran {
  @Transactional
  public void execute() {
      ...
  }
}

1回のリクエストで、トランザクションを2度実行することはできないのでしょうか?
(そんなことは無いと思いますが・・・)