Guice - 每个事务使用相同连接的多个持久性提供程序

时间:2014-12-31 05:39:12

标签: java persistence guice jooq

我有两个我想使用的持久性提供程序 - 我自己的JDBC方法(DBAccess)和jooq(DSLContext)。可以使用Connection和一些配置详细信息创建DSLContext和我的DBAccess。我正在尝试将项目转换为使用Guice,并且想要创建一个能够在一个事务中使用两者的DAO,例如。

class ThingDAO {
    final DBAccess dbAccess;
    final DSLContext dslContext;

    @Inject
    ThingDAO(DBAccess dbAccess, DSLContext dslContext) {
        this.dbAccess = dbAccess;
        this.dslContext = dslContext;
    }

    Thing getThingForId(int id) {
        return dslContext.select().from(OBJECT)....
    }

    void save(Thing t) {
        dbAccess.save(t);
    }

    Stuff joinThingToStuffTableAndGetStuff(Thing t) {
    // the Stuff I get may depend on what has been saved so far, so I need 
    // the dslContext and dbAccess operating on the same connection

        dslContext....
    }
}

然后我可以按照

的方式使用
@Transactional
doTheThings(int id, int[] data) {
    ThingDAO dao = thingDaoProvider.get();
    Thing t = dao.getThingForId(id);
    t.doTheThings(data);
    dao.save(t);
    Stuff s = dao.joinThingToStuffTableAndGetStuff(t);
    ....
}

我一直在关注this guice extension for jooq,这让我觉得我想要一个UnitOfWork的东西,它从我的数据源获取连接以便提供给DBAccess和DSLContext,但我是不确定这是否正确或如何进行,即使它是。

0 个答案:

没有答案