我们正在我们的数据库审计项目中实施Envers,并遇到了障碍。我们不知道如何确定哪些用户正在进行更改。我可以找到的所有示例都使用Seam及其Component.getInstance技术。
这是我们的自定义修订实体
@Entity
@RevisionEntity(CustomRevisionListener.class)
public class CustomRevisionEntity {
@Id
@GeneratedValue
@RevisionNumber
private int id;
private String login;
getters/setters...
}
自定义修订监听器
public class CustomRevisionListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
CustomRevisionEntity rev = (CustomRevisionEntity) revisionEntity;
//how do we get the FacesContext/remote user?
rev.setLogin("unknown");
}
}
我们尝试过注入和范围无效,我们也尝试了ClassLoader solution我找到了类似情况的东西,但是getCurrentInstance()仍然是null;
感谢您的帮助!
答案 0 :(得分:0)
adamw是正确的,FacesContext.getCurrentInstance()在自定义的RevisionListener中有效。
我们有一个javax.servlet.Filter实现尝试在doFilter()方法中处理事务,该方法由于某种原因导致FacesContext.getCurrentInstance()在RevisionListener中返回null。我们昨天从web.xml中删除了它,原因不同,当我今天早上没有使用getCurrentInstance()时,一切正常。
感谢大家的回复,也许有一天这会帮助别人。