All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.payneteasy.mysql.scheduler.guice.SchedulerModule Maven / Gradle / Ivy

package com.payneteasy.mysql.scheduler.guice;

import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.inject.binder.AnnotatedBindingBuilder;
import com.googlecode.jdbcproc.daofactory.DAOMethodInfo;
import com.googlecode.jdbcproc.daofactory.guice.InitJdbcProcModule;
import com.googlecode.jdbcproc.daofactory.guice.StoredProcedureDaoProvider;
import com.googlecode.jdbcproc.daofactory.impl.dbstrategy.ICallableStatementSetStrategyFactory;
import com.googlecode.jdbcproc.daofactory.impl.dbstrategy.impl.CallableStatementSetStrategyFactoryIndexImpl;
import com.payneteasy.mysql.scheduler.dao.ISchedulerDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionInterceptor;

import javax.sql.DataSource;

import static com.google.inject.matcher.Matchers.annotatedWith;
import static com.google.inject.matcher.Matchers.any;

public class SchedulerModule extends AbstractModule {

    private static final Logger LOG = LoggerFactory.getLogger(SchedulerModule.class);

    @Override
    protected void configure() {

        install(new InitJdbcProcModule() {
            @Override
            protected void bindCallableStatementSetStrategyFactory(AnnotatedBindingBuilder aBuilder) {
                aBuilder.to(CallableStatementSetStrategyFactoryIndexImpl.class);
            }
        });

        install(new DataSourceModule());

        PlatformTransactionManager transactionManager = new GuiceDataSourceTransactionManager();

        requestInjection(transactionManager);

        TransactionInterceptor interceptor = new TransactionInterceptor(transactionManager,new AnnotationTransactionAttributeSource());

        bindInterceptor(annotatedWith(Transactional.class), any(), interceptor);
        bindInterceptor(any(), annotatedWith(Transactional.class), interceptor);

    }

    @Provides
    JdbcTemplate provideJDBCTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Provides
    @Singleton
    ISchedulerDao provideCompanyDao(JdbcTemplate jdbcTemplate, DAOMethodInfo daoMethodInfo) {
        return new StoredProcedureDaoProvider(ISchedulerDao.class, jdbcTemplate, daoMethodInfo).get();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy