2011-12-14 18 views
3

webservice内でコンテナ管理トランザクションを使用しようとしていますが、トランザクションが作成されていません。私はそのようなものがあります:私は、このメソッドを呼び出すとJAX-WS、weblogicのコンテナ管理トランザクション

@WebService(...) 
@Stateless 
@TransactionManagment(TransactionManagmentType.CONTAINER) 
public class ExampleService { 

    // EntityManager and other fields 

    @TransactionAttribure(TransactionAttributeType.REQUIRED) 
    public void test(String s){ 
    // persist something with EntityManager 
    } 
} 

を、私はjavax.persistence.TransactionRequiredExceptionを得る:メソッドpublic抽象ボイドのjavax.persistence.EntityManager.persist(java.lang.Object上位)に呼び出さなければなりませんトランザクションのコンテキスト

私は間違っていますか? ありがとう!

+1

persistence.xmlの永続性単位がtransaction-type = "JTA"に設定されていますか? – Puce

+0

Puce、それは役に立ちません –

答えて

1

「TransactionAttributeType.REQUIRED」は、トランザクションが現在のスレッド(つまり、 'トランザクションのコンテキストで呼び出されました')に対してすでに進行中の場合にのみ呼び出されることを意味します。誰かがあなたの場合に取引を開始するかどうかは明らかではありません。誰もあなたが得ている例外は完璧な意味ではありません。

現在、どのようにしてWebサービスコール全体でトランザクションを伝播することが現状で可能かわかりません。私はこれが特に可能な場合でもそうすることをお勧めしているとは思わない。

おそらく、あなたのケースでTransactionAttributeType.REQURES_NEWが必要なので、コンテナはトランザクションを開始してアノテーション付きメソッドに制御を渡しますか?

+0

しかし、お返事ありがとうございます。http://docs.oracle.com/javaee/6/api/javax/ejb/TransactionAttributeType.html#REQUIRED新しいトランザクションを開始する必要があります。正確には、メソッドが呼び出されたときに新しいトランザクションを取得したいと思います。 –

+0

@Transactional(value = Transactional.TransactionFlowType.MANDATORY、 version = com.sun.xml.ws.api.tx.at .Transactional.Version.WSAT10) – maximdim

+0

ここを参照してください:http://metro.java.net/guide/Using_Web_Services_Atomic_Transactions.html – maximdim

関連する問題