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