使用JPA Listener设置当前用户

时间:2016-09-09 13:30:17

标签: spring jpa

我目前在使用JPA侦听器更新/保持当前用户更新/创建对象时遇到问题。这是JPAListener的代码

private static UserSession userSession = null;//Scoped-session bean
// yes i know i'm accessing a session stored in HTTP in persistence layer

@PreUpdate
public void preUpdate(AbstractDAOAuditedEntity abstractEntity) {
    abstractEntity.setModificationDate(new Date());
    // use userSession here to set currentUser or system
}

@PrePersist
public void prePersist(AbstractDAOAuditedEntity abstractEntity) {
    // same
}

public static void setUserSession(UserSession userSession) {
    DAOEntityListener.userSession = userSession;
}

如果我在处理HttpRequest时这样做,它可以工作,因为userSession绑定到spring管理的Http会话。

但是现在我有一个新用法,我正在接收来自JmsMessage的数据,这意味着我在没有HttpContext的线程中运行,因此在尝试使用userSession时监听器崩溃。

作为一个非常快速且非常脏的修复,我做了以下事情:

boolean haveUser = true;
try {
    userSession.getUser();
} catch (Exception e) {
    haveUser = false;
}
if (!haveUser) {}

我的问题不是关于如何让它工作,而是我应该如何妥善处理这个问题,无论我是否在HttpContext中?

0 个答案:

没有答案