我们正在我们的数据库审计项目中实现 Envers,但遇到了障碍。我们不知道如何确定是哪个用户在进行更改。我能找到的所有示例都使用了 Seam 及其 Component.getInstance 技术。
- 玻璃鱼 3.1.2.2
- Mojarra 2.1.13
- hibernate 4.1.6.Final
这是我们的自定义修订实体
@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");
}
}
我们尝试了注入(inject)和范围界定无济于事,我们也尝试了这个 ClassLoader solution我找到了一些似乎是类似情况的东西,但是 getCurrentInstance() 仍然是 null;
感谢您的帮助!
最佳答案
adamw 是正确的,FacesContext.getCurrentInstance() 在自定义 RevisionListener 中确实有效。
我们有一个 javax.servlet.Filter 实现试图处理 doFilter() 方法中的事务,无论出于何种原因导致 FacesContext.getCurrentInstance() 在 RevisionListener 中返回 null。出于不同的原因,我们昨天从 web.xml 中删除了它,今天早上我在没有它的情况下尝试 getCurrentInstance() 时,一切正常。
感谢大家的回复,也许有一天这会对其他人有所帮助。
关于java - 如何在没有 Seam 的情况下访问 Hibernate Envers 中的 FacesContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609394/