2

私たちはデータベース監査のためにプロジェクトにEnversを実装していて、問題にぶつかりました。どのユーザーが変更を加えているかを判断する方法がわかりません。私が見つけることができるすべての例は、SeamとそのComponent.getInstanceテクニックを使用しています。

  • Glassfish 3.1.2.2
  • クロサギ2.1.13
  • Hibernate4.1.6。ファイナル

これがカスタムリビジョンエンティティです

@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ソリューションも試しましたが、getCurrentInstance()はまだnullでした。

ご協力いただきありがとうございます!

4

1 に答える 1

0

adamwは正しかった、FacesContext.getCurrentInstance()はカスタムRevisionListenerで機能します。

何らかの理由でFacesContext.getCurrentInstance()がRevisionListenerでnullを返す原因となった、doFilter()メソッドでトランザクションを処理しようとするjavax.servlet.Filter実装がありました。昨日は別の理由でweb.xmlから削除しましたが、今朝それなしでgetCurrentInstance()を試したところ、すべて正常に機能しています。

みんなの返事をありがとう、多分これはいつか誰か他の人を助けるでしょう。

于 2013-01-31T16:02:20.890 に答える