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?