如何在JPA和EJB3中使用JDBC ClientInfo

时间:2010-09-21 05:57:38

标签: java jpa ejb-3.0 entitymanager

我们正在将基于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()发生时有 no 保证。如果在拦截器中设置客户端信息,进行一些更新,然后返回,则刷新()和实际数据库写入可能不会发生,直到您的bean(和拦截器)超出范围。它是否正确?

我认为JPA和EntityManagers是连接的抽象,你无法在连接上可靠地设置客户端信息。对或错?

1 个答案:

答案 0 :(得分:3)

您使用的是哪个JPA提供商?

EclipseLink支持基于用户的连接,Oracle代理连接和VPD。 EclipseLink还定义了允许您在JDBC连接上设置配置的会话和连接级事件。

请参阅, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Auditing