hibernateTemplate, entityInterceptor с состоянием и потоками - PullRequest
1 голос
/ 26 мая 2011

У меня есть перехватчик для ведения журнала аудита, который в основном устанавливает два поля updated_by и creation_by.Например,

public void update(DomainEntity entity, Integer userId) {
    template.update(audited(entity, userId));
}

private DomainEntity audited(DomainEntity entity, Integer userId) { 
    template.setEntityInterceptor(new AuditInterceptor(userId));
    return entity;
}

Итак, я создаю новый Interceptor с соответствующим userId и устанавливаю его в шаблон для каждой проверяемой DAO-операции.Я обеспокоен тем, что у нее есть проблема с параллелизмом, так как два потока могут установить перехватчик на одном шаблоне, что может испортить все.userId - это состояние, о котором должен знать перехватчик.Любые альтернативные проекты?

Ответы [ 2 ]

1 голос
/ 26 мая 2011

@ Натан представил продвинутый подход.Если вам нужна более простая альтернатива, почему бы не иметь один общий перехватчик, который ищет на основе карты проверяемых классов соответствующий делегат.Все делегаты будут иметь общий интерфейс, о котором знает общий перехватчик.Если вы избегаете состояния в своем общем перехватчике, у вас нет проблем с потоками.Также, как ваш текущий подход, вы можете тестировать перехватчики по отдельности.

1 голос
/ 26 мая 2011

Пусть фильтр сервлетов сохранит идентификатор пользователя в ThreadLocal и позволит перехватчику использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...