Java 如何在JPA和EJB3中使用JDBCClientInfo
我们正在将基于JDBC的应用程序迁移到JPA和EJB3。我们的旧应用程序使用Connect#setClientInfo API将当前用户名记录为客户端信息的一部分: 我们需要在EJB3项目中做类似的事情。怎么做 我们可以在EJB服务调用周围使用EJB3拦截器来捕获当前用户并将其设置为数据源上的信息。然而,我看到了这方面的问题。我认为无法保证JPA flush()何时发生。如果在拦截器中设置客户机信息,进行一些更新,然后返回,那么直到bean(和拦截器)超出范围之后,flush()和实际的数据库写入才可能发生。这是正确的吗Java 如何在JPA和EJB3中使用JDBCClientInfo,java,jpa,ejb-3.0,entitymanager,Java,Jpa,Ejb 3.0,Entitymanager,我们正在将基于JDBC的应用程序迁移到JPA和EJB3。我们的旧应用程序使用Connect#setClientInfo API将当前用户名记录为客户端信息的一部分: 我们需要在EJB3项目中做类似的事情。怎么做 我们可以在EJB服务调用周围使用EJB3拦截器来捕获当前用户并将其设置为数据源上的信息。然而,我看到了这方面的问题。我认为无法保证JPA flush()何时发生。如果在拦截器中设置客户机信息,进行一些更新,然后返回,那么直到bean(和拦截器)超出范围之后,flush()和实际的数据库
我相信JPA和EntityManager是对连接的抽象,您无法在连接上可靠地设置客户端信息。对还是错 您使用的是什么JPA提供商 EclipseLink支持基于用户的连接、Oracle代理连接和VPD。EclipseLink还定义了会话和连接级别事件,允许您在JDBC连接上设置配置 看,,
解决方案(如果可能)可能取决于您的应用程序服务器和JPA提供商。你在用什么?Weblogic 10.3.3。我相信你是对的,它确实依赖于此。我们目前最好的解决方案依赖于ThreadLocals,而且似乎可以工作,但线程完全不在EJB规范的范围内。我们将Oracle的Kodo JPA与WebLogic 10.3.3一起使用。