1

JDBC ベースのアプリケーションを JPA および EJB3 に移行しています。私たちの古いアプリケーションは、Connect#setClientInfo API を使用して、現在のユーザー名をクライアント情報の一部として記録しました: http://download.oracle.com/javase/6/docs/api/java/sql/Connection.html#setClientInfo% 28java.lang.String,%20java.lang.String%29

EJB3 プロジェクトでも同様のことを行う必要があります。どのように?

現在のユーザーを取得してデータソースの情報として設定するために、EJB サービス呼び出しの周りで EJB3 インターセプターを使用できます。ただし、これには問題があります。JPA flush() がいつ発生するかは保証されていないと思います。クライアント情報をインターセプターに設定し、いくつかの更新を行ってから戻った場合、Bean (およびインターセプター) が範囲外になるまで、flush() と実際のデータベース書き込みは発生しない可能性があります。これは正しいです?

JPA と EntityManagers は接続を介した抽象化であり、接続でクライアント情報を確実に設定することはできません。正しいか間違っているか?

4

1 に答える 1

3

どの JPA プロバイダーを使用していますか?

EclipseLink は、ユーザー ベースの接続、Oracle プロキシ接続、および VPD をサポートしています。TopLinkでは、JDBC接続で構成を設定できるセッションおよび接続レベルのイベントも定義しています。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Auditingを参照して ください。

于 2010-09-21T13:26:32.030 に答える