我们正在将基于 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 是连接的抽象,你不能可靠地设置连接上的客户端信息。对或错?