如何在没有Seam的Hibernate Envers中访问FacesContext?

时间:2013-01-30 16:54:50

标签: java hibernate jsf jsf-2 hibernate-envers

我们正在我们的数据库审计项目中实施Envers,并遇到了障碍。我们不知道如何确定哪些用户正在进行更改。我可以找到的所有示例都使用Seam及其Component.getInstance技术。

  • Glassfish 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");
    }
}

我们尝试过注入和范围无效,我们也尝试了ClassLoader solution我找到了类似情况的东西,但是getCurrentInstance()仍然是null;

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

adamw是正确的,FacesContext.getCurrentInstance()在自定义的RevisionListener中有效。

我们有一个javax.servlet.Filter实现尝试在doFilter()方法中处理事务,该方法由于某种原因导致FacesContext.getCurrentInstance()在RevisionListener中返回null。我们昨天从web.xml中删除了它,原因不同,当我今天早上没有使用getCurrentInstance()时,一切正常。

感谢大家的回复,也许有一天这会帮助别人。