我目前在使用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中?