package todowizard.core.guice;
import static com.google.inject.matcher.Matchers.*;
import java.util.Objects;
import org.aopalliance.intercept.MethodInterceptor;
import org.seasar.doma.jdbc.Config;
import org.seasar.doma.jdbc.tx.TransactionManager;
import com.google.inject.AbstractModule;
import com.google.inject.matcher.Matchers;
/**
* Dropwizard, Guice, Doma を連携して便利に使う上で必要な共通の設定を行うモジュールクラス。
*
* @author t_endo
*/
public class CommonModule extends AbstractModule {
private final Config domaConfig;
public CommonModule(Config domaConfig) {
this.domaConfig = domaConfig;
}
/**
* {@inheritDoc}
*/
@Override
protected void configure() {
Objects.requireNonNull(domaConfig, "domaConfig");
bind(Config.class).toInstance(domaConfig);
// トランザクションマネージャ
bind(TransactionManager.class).toInstance(
domaConfig.getTransactionManager());
// トランザクション AOP
MethodInterceptor interceptor = new DomaLocalTxInterceptor();
requestInjection(interceptor);
bindInterceptor(annotatedWith(DomaTransactional.class), any(),
interceptor);
bindInterceptor(Matchers.any(), annotatedWith(DomaTransactional.class),
interceptor);
}
}