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

时间:2016-10-02 07:54:18

标签: oracle glassfish database-connection connection-pooling temp-tables

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

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

我将会话特定数据存储在全局临时表中。

现在我的问题是大部分时间我为每个连接获得相同的sessionId。

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

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

请提供您的建议。

1 个答案:

答案 0 :(得分:3)

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