2017-02-09 27 views
0

Jboss EAP 7インスタンスで実行されているJTAとCDIの処理方法を理解するのには苦労しています。私は、コンテナから来るUserTransactionオブジェクトを注入することによってトランザクションを手作業で得ることができますが、メソッドを@Transactionalで注釈を付けると、利用可能なトランザクションに関する例外が発生します。設定がありませんか?私は簡単にそれを動作させるために自分自身のインターセプタを作成する必要がありますが、一貫した例は見つかりませんでした...Jboss EAP 7 CDI JTA @Transactional

+0

データベース接続でアプリケーションを設定する方法の完全なJEEチュートリアルよりも、この質問の詳細が十分ではないように感じます。それはStackOverflowの範囲を超えています。おそらくあなたの問題を絞り込めますか?例えば、実際にどのような設定をしているのかを言わずに、「設定がありませんか?」という質問をします。または、あなたが正しくやっていると言っていることをしているかどうかを教えてくれるコードを貼り付けてください。 – Deltharis

+0

自動取引を無効にしたことはありますか? –

+0

@Transactionalアノテーションをどこに配置したのかを知る必要があります。あなたのコードを共有してください。 '@Transactional'はすでにインターセプタバインドであるため、インターセプタは必要ありません。 – Rouliboy

答えて

0

デフォルトのJEEコンテナ管理環境では、エンタープライズBean(通常@Stateless beans使用される)はトランザクションである。外部からこのようなBeanを入力すると、トランザクションが開かれます。 @javax.transaction.Transactionalアノテーションを使用すると、トランザクションの動作を制御できますが、デフォルトの場合は必要ありません。

例豆:あなたが(例えば、REST経由)サーブレットからMyBean.withinTransactionを呼び出す場合(ない既に存在する場合)

@Stateless 
public MyBean { 
    public void withinTransaction() { 
    System.out.println("i'm running within a transaction"); 
    } 
    @Transactional(TxType.NOT_SUPPORTED) 
    public void outsideTransaction() { 
    System.out.println("no transaction available..."); 
    } 
} 
  • 、新しいトランザクションが作成されます。
  • MyBean.outsideTransactionに電話すると、トランザクションは作成されません。あなたはwithinTransactionからthis.outsideTransaction()を呼び出す場合インターセプタがあるので、(あなたがoutsideTransactionからthis.withinTransaction()を呼び出す場合
  • は、新しいトランザクションが作成されません(インターセプターは専用Beanの境界にバインドされているので)、あなたはまだoutsideTransactionで利用可能なトランザクションを持っています
  • 唯一outsideTransactionが第二のBean AnotherBean@InjectMyBeanの一部となる場合
  • )豆の境界にバインドされ、そしてあなたは、MyBean.withinTransactionを呼び出して、新しいトランザクション)が存在していない場合(作成されます。あなたはAnotherBean.outsideTransactionMyBean.withinTransactionの間の豆の境界を横断するからです。
関連する問題