Как мы форсируем транзакцию на уровне ресурса (контроллера) в Dropwizard с помощью jdbi?

Весной у нас есть аннотация @Transactional, которую можно указать в контроллере, поэтому все, что происходит внутри метода контроллера, рассматривается как одна транзакция. Однако в dropwizard мы можем иметь транзакцию на уровне DAO, реализовав Transactional<DAOclass>. Но если я использую два DAO в одном методе ресурсов, это рассматривается как две разные транзакции.

Скажем, у меня есть два DAO

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();
   }

СтатьяResource.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();
    }
}

В приведенном выше примере dao1 и dao2 имеют две разные транзакции. Но мне нужно все в рамках одной транзакции. Так есть ли способ указать границы транзакций на уровне ресурсов?


person Preethi    schedule 24.05.2014    source источник


Ответы (1)


Взгляните на этот пост https://groups.google.com/forum/#!topic/jdbi/O5rxzwmlwjM

@CreateSqlObject кажется ответом.

person radu-c    schedule 25.05.2014