Обновление сущностей с помощью currentUser-ID - PullRequest
2 голосов
/ 28 декабря 2011

Я пытаюсь обновить каждую сущность своим @EntityListeners({ ModelListener.class }). ModelListener реализует @PrePersist с помощью метода, подобного этому:

@PrePersist
protected void prePersist(final ModelBase modelBase) {
    modelBase.setUpdatedBy(currentUser);}

У меня вопрос как получить текущего пользователя. Я уже пробовал несколько вещей:

1) передать информацию по EJB

    @EJB
private UserModul userModul;

userModul всегда равен нулю, когда вызывается prePersist. Кажется, EJB-контекст недоступен.

2) Заполнить статический поток локальный

static ThreadLocal<User> currentUser = new ThreadLocal<User>();

Из-за статического атрибута каждый загрузчик классов (каждый запрос на веб-серверах) содержит свой собственный экземпляр. Я попытался с @WebFilter, чтобы заполнить ThreadLocal. Но, похоже, у меня нет контекста лиц.

public void doFilter(final ServletRequest request, ...){
    FacesContext.getCurrentInstance();} //always null

Также в запросе (com.sun.enterprise.web.pwc.connector.coyote.PwcCoyoteRequest) Я не нахожу никакой информации вошедшего в систему пользователя.

Какой самый распространенный способ сохранения информации о пользователе?

...