glassfish JDBC 连接池和 oracle 全局临时 table 相同的 sessionId

glassfish JDBC Connection Pooling and oracle global temporary table same sessionId

在开始我的问题之前,我想澄清一下,我是 java/j2ee 开发人员,对 Oracle 方面的事情了解有限。

我正在使用带有 JDBC 连接池和后端 oracle 数据库的 glassfish 服务器。 此外,我正在使用 oracle 的全局临时 table 来执行一些工作流程。

我正在将会话特定数据存储在全局临时文件中 table。

现在我的问题是大多数时候每个连接都获得相同的 sessionId。

这是否意味着我不能将 glboal temporary table 与 glassfish JDBC 连接池一起使用。

另一件有趣的事情是,如果我删除了连接池,那么每个连接都会得到不同的 sessionID。

请提出您的建议。

使用连接池时,最好不要在连接释放到池中时在数据库会话中留下状态。那是因为无法保证您下次需要连接时会恢复相同的连接。全局临时 table (GTT) 是这种状态的一个示例,它属于一个数据库会话,或属于一个 JDBC 连接(数据库会话与 JDBC 联系)。如果您使用另一个 JDBC 连接,它将不可见。 因此,如果您的业务逻辑要求您使用 GTT,那么您不应该将连接释放回池中,直到您开始使用该 GTT。请注意,这违背了建议尽快将连接释放回池中的最佳实践。作为替代方案,您可以使用普通 table 并将您的临时结果提交到其中,以便可以通过任何其他连接访问它们。