PreparedStatement在JNDI

时间:2018-03-03 07:56:43

标签: oracle connection weblogic prepared-statement roles

我正在尝试创建一个连接工厂。在获取连接时,我正在使用几个Oracle角色设置会话。下面是伪代码:

SET ROLE NONE;
if(condition is met by user)
{
SET ROLE ABC;
}
return connection;

这在Tomcat中运行良好,并且在WebLogic中使用Statement但是当我在WebLogic服务器上触发PreapredStements时,它保留了先前连接的角色。

有人可以帮助我吗?当它们绑定到同一连接时,为什么Statement和PreparedStatement的执行存在差异。

为了调试这个,我为2个不同的用户创建了150个连接,并为所有连接发出了一个语句和一个准备好的语句,同时在下次执行之前关闭它们。

如果用户是usr1和usr2,我从usr1为50个连接发出了50个语句和50个预备语句。每次执行都是根据分配给该用户的角色执行的。然后我从usr2发出了50个语句,在这种情况下,所有50个语句都运行良好,但是50个预备语句使用了usr1而不是usr2的设置。

注意:我正在关闭所有连接。我正在打印预备语句的哈希码,它们都是独一无二的。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,以防其他人在将来遇到同样的问题。

WebLogic为预准备语句和可调用语句提供了缓存机制。当我进入管理面板并浏览JNDI的高级连接池设置时,我将语句缓存设置为0,之后一切都很好。