2015-09-29 2 views
2

Я не уверен, если я получаю this правильно:jOOQ DSLContext: Correct с весной автоматического связывание

"... Конфигурация jOOQ является не обязательно THREADSAFE, и запросы„привязываются“к их построению DSLContext. "

Я реализация Repository Pattern так я могу autowire в DSLContext как это для всех моих репозиториев?

public abstract class AbstractRepository { 

    private DSLContext ctx; 

    public AbstractRepository(DSLContext ctx) { 
     this.ctx = ctx; 
    } 

    public DSLContext getCtx() { 
     return ctx; 
    } 
} 

public class UserRepositoryImpl implements UserRepository { 
    public UserRepositoryImpl(DSLContext ctx) { super(ctx); } 
} 

public class LoginService eextends AbstractService { 

    public UserRepository userRepository ; 

    @Autowired 
    public LoginService(DSLContext ctx) {  
     this.userRepository = new UserRepositoryImpl(ctx); 
    } 

    @Transactional 
    public UserDTO login(String username, String password) { 
     // Check if password is correct .. 
     return userDto; 
    } 
} 

Есть ли причина, почему я не стал бы назначать один и тот же экземпляр DSLContext для всех моих репозиториях

<bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

<bean id="transactionAwareDataSource" 
    class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"> 
    <constructor-arg ref="dataSource" /> 
</bean> 

<bean class="org.jooq.impl.DataSourceConnectionProvider" name="connectionProvider"> 
    <constructor-arg ref="transactionAwareDataSource" /> 
</bean> 

<bean id="dsl" class="org.jooq.impl.DefaultDSLContext"> 
    <constructor-arg ref="config" /> 
</bean> 

<bean class="org.jooq.impl.DefaultConfiguration" name="config"> 
    <constructor-arg index="0" ref="connectionProvider" /> 
    <constructor-arg index="1"><null /></constructor-arg> 
    <constructor-arg index="2"><null /></constructor-arg> 
    <constructor-arg index="3"><null/></constructor-arg> 
    <constructor-arg index="4"><null /></constructor-arg> 
    <constructor-arg index="5"><value type="org.jooq.SQLDialect">POSTGRES_9_4</value></constructor-arg> 
    <constructor-arg index="6"><null /></constructor-arg> 
    <constructor-arg index="7"><null /></constructor-arg> 
</bean> 

<!-- BEGIN Services --> 

<bean id="loginService" class="com.mz.server.web.service.LoginService"> 
    <constructor-arg> 
     <ref bean="dsl" /> 
    </constructor-arg> 
</bean> 

<!-- END Services --> 

, но вместо того, чтобы создать для каждого репозитория новый экземпляр?

+0

Мне кажется, у нас нет полной картины. Не могли бы вы предоставить полную проводку для всех репозиториев? – luboskrnac

+0

@luboskrnac Привет! Здесь речь идет не о полной картине. Мой вопрос здесь в основном, если это потокобезопасно. Но я добавил службу, которую я хотел бы использовать с помощью 'DSLContext'. – displayname

+0

Получил ваш момент и создал ответ. – luboskrnac

ответ

2

Ваша конфигурация прекрасна, потому что в конфигурационных объектах, которые вы настроили, нет чувствительного состояния.

В частности, ConnectionProvider делегаты связи обращения к весне, которая решает вещи через ThreadLocal, чтобы гарантировать, что Connection ссылки, возвращенные из источника транзакций осведомленные данные прокси не разделяться между потоками/транзакций.

Это ...

Конфигурация jOOQ является не обязательно потокобезопасна

... просто означает, что реализаторы (например, из ConnectionProvider) не требуется, чтобы обеспечить Потокобезопасную реализации, которые затем средство что Configuration не может гарантировать безопасность нити.

+0

Хорошо, получилось :) Я знаю, что в последнее время я задаю много вопросов, но мне нужно учиться быстро, так как мое время становится ограниченным, поскольку следующий семестр начинается - так что я могу пригласить вас принять посмотрите на этот вопрос относительно [jOOQ и Spring] (http://stackoverflow.com/questions/32871216/jooq-spring-transaction-provider-transactional-not-working)? – displayname

+1

@StefanFalk: Не стоит беспокоиться. Пока вы просите публично, другие получат прибыль. Я рассмотрю этот другой вопрос позже. –

+0

Хорошо, спасибо! :) – displayname