Как использовать JDBC ClientInfo с JPA и EJB3 - PullRequest
1 голос
/ 21 сентября 2010

Мы переносим приложение на основе JDBC в JPA и EJB3.Наше старое приложение использовало API Connect # setClientInfo для записи текущего имени пользователя как части информации клиента: http://download.oracle.com/javase/6/docs/api/java/sql/Connection.html#setClientInfo%28java.lang.String,%20java.lang.String%29

Нам нужно сделать нечто подобное в проекте EJB3.Как?

Мы можем использовать перехватчики EJB3 вокруг вызовов службы EJB, чтобы захватить текущего пользователя и установить его в качестве информации в источнике данных.Однако я вижу проблемы с этим.Я думаю, что нет гарантии, когда происходит сброс JPA ().Если вы установите информацию о клиенте в перехватчике, сделаете некоторые обновления, а затем вернетесь, flush () и фактическая запись в базу данных могут произойти только после того, как ваш компонент (и перехватчик) выйдут из области видимости.Это правильно?

Я считаю, что JPA и EntityManager являются абстракциями для соединения, и вы не можете точно установить информацию о клиенте для соединения.Правда или ложь?

1 Ответ

3 голосов
/ 21 сентября 2010

Какой провайдер JPA вы используете?

EclipseLink поддерживает пользовательские соединения, прокси-соединения Oracle и VPD. EclipseLink также определяет события уровня сеанса и соединения, которые позволяют вам настраивать соединение JDBC.

См, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Auditing

...