java - 如何在 JPA 和 EJB3 中使用 JDBC ClientInfo

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

我相信 JPA 和 EntityManagers 是连接的抽象,你不能可靠地设置连接上的客户端信息。对或错?

最佳答案

您使用的是什么 JPA 提供程序?

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

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

关于java - 如何在 JPA 和 EJB3 中使用 JDBC ClientInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757669/

相关文章:

java - 为什么单个 EJB session bean 允许有多个接口(interface)?

jakarta-ee - EJB 模块无法从 glassfish 上的另一个 EJB 模块找到类

java - Netbeans 8.2 无法启动

java - Hibernate 4.0 : javax. persistence.criteria.Path.get 在指定复合键字段时失败

java - EJB3 和 JAAS 主题/主体如何从 servlet 容器传播到 EJB 层?

java - Spring Data JPA 上的嵌套 @Transactional 注释行为

jpa - Camel 中途jpa消费者

java - 解释这个简单的程序 - 桶排序

java - 数据库, "Pending status"设计表

java - 使用不同指纹进行 keystore 签名