2011-08-10 8 views
0

私は、スマック(イベントベースのJavaライブラリ)を介してIQスタンザを処理するアプリケーションを持っています。我々は今、バニラのTomcatからglassfish 3.1に切り替えると、私はejb 3.1に切り替えたいと思う。EJB 3.1トランザクション、EntityManager

@Stateless 
public class DispatchIQService { 
    private static Logger log = Logger.getLogger(DispatchIQService.class); 

    @PersistenceContext(unitName="hq") 
    private EntityManager em; 

    .... 

    public void process(XMPPConnection connection, IQ rawRequest) { 
    log.debug("Raw Provider IQ: " + rawRequest.toXML()); 

    RawResponse answer = null; 

    try{ 
     StateWrapper state = new StateWrapper(em, connection, rawRequest); 

     // parsing raw xml from request 
     rawRequest.parse(); 
     // processing action 
     answer = rawRequest.dispatchAction(state); 

イベントベースのライブラリのため、私はそれぞれの要求に対して正しいオブジェクトを取得します。 StateWrapperは、メッセージ処理を通じてem、要求、および接続を渡す古い構造体です。私はejbsと依存性注入によってこれをできるだけ早く取り除きたい。

rawRequest.dispatchAction(状態)では、リクエストオブジェクトにコントロールを渡してファサードサービスを検索し、ビジネスロジックから開始します。

@Override 
public RawResponse dispatchAction(StateWrapper state) { 
    ModelFacade modelFacade = Core.lookup(ModelFacade.class); 
    return modelFacade.listModels(state, childElement.getIds()); 
} 

Core.lookupは、必要なBeanを取得するためにjndiルックアップを作成するだけです。この豆で私はそれらを注入することができます。

私の質問です:これはDispatchIQServiceのemのような同じトランザクションを実行していますか? どうすれば確認できますか?彼らの住所?

よろしく メートル

答えて

1

限り、あなたは同じトランザクションにいるように、両方のインスタンスで注入されたEntityManagerが同じ「JPAのトランザクションコンテキスト」を参照してくださいます。コンテナは通常、トランザクション・スレッド・コンテキストを調べ、トランザクションごとのEntityManagerに再ディスパッチすることによって、各メソッドを実装するEntityManagerプロキシを注入することによって、これを実装します。 DispatchIQServiceでエンティティを更新し、ModelFacadeでエンティティを再クエリして更新がまだ存在することを確認することで、自分のアサーションをテストできます。

+0

これは良いアイデアです!私は同じ取引にいると確信していますが、私が正しいかどうか聞いてみたかったのです。 – mkuff

+0

もし私が間違っていないのであれば、EntityManagerプロキシはその永続コンテキストを "トランザクションスレッドコンテキスト"ではなく見ます。 EntityManagerがトランザクションに参加すると、永続コンテキストはdbにフラッシュ(同期)されます。 –

+0

@MikeArgyriou「永続性コンテキスト」を見るのはどういう意味ですか?私の経験では、これはTransactionSynchronizationRegistry(つまり、トランザクションスレッドコンテキスト)を使用することを意味します。また、トランザクションコミットのbeforeCompletionステップまでエンティティマネージャが(明示的に行われない限り)フラッシュされるとは思わない。 –

関連する問題