2014-05-24 12 views
6

Wiosną mamy adnotację @Transactional, którą można określić na kontrolerze, więc wszystko dzieje się w ramach metody kontrolera jest traktowane jako jedna transakcja. Jednak w dropwizard, możemy mieć transakcję na poziomie DAO przez wdrożenie Transactional<DAOclass>. Ale jeśli używam dwóch obiektów DAO w jednej metodzie zasobów, jest to traktowane jako dwie różne transakcje.W jaki sposób wymuszamy transakcję poziomu zasobów (kontrolera) w Dropwizard przy pomocy jdbi?

Załóżmy, że dwa DAOs

Dao1.java

public abstract class Dao1 implements Transactional<Dao1>{ 
    @sqlQuery(//somequery) 
    public abstract void insertIntoArticles(); 
    } 

Dao2.java

public abstract class Dao2 implements Transactional<Dao2>{ 
    @sqlQuery(//somequery) 
    public abstract void insertIntoArticlesChildren(); 
    } 

ArticleResource.java

@POST 
    @PATH("/articles") 
    public void insertArticleAndItsChildren(Integer articleId){ 
    try{ 
     dao1.begin(); 
     dao2.begin(); 
     dao1.insertIntoArticles(); 
     dao2.insertIntoArticlesChildren(); 
     dao1.commit(); 
     dao2.commit(); 
    }catch(Exception e){ 
    dao1.rollback(); 
    dao2.rollback(); 
    } 
} 

W powyższym przykładzie dao1 i dao2 mieć dwie różne transakcje. Ale potrzebuję czegoś w ramach jednej transakcji Czy istnieje sposób określania granic transakcyjnych na poziomie zasobów?

Odpowiedz

Powiązane problemy