必须使用JDBC连接池重新启动Webserver以反映DB记录更改?

时间:2013-01-03 11:29:47

标签: oracle jdbc connection-pooling

我发现我的网络服务器出现了奇怪的行为。我对Java数据库的返回输出没有反映出我对数据库所做的更改。

我的servlet使用JDBC连接池连接到Oracle数据库。

以下是设置:

    <JDBCCONNECTIONPOOL name="mypool" datasourceclassname="oracle.jdbc.pool.OracleDataSource" steadypoolsize="8" 

maxpoolsize="32" poolresizequantity="2" idletimeout="300" maxwaittime="60000" 

connectionvalidationrequired="off" connectionvalidationmethod="auto-commit" 

validationtablename="" failallconnections="off" transactionisolationlevel="serializable" 

isolationlevelguaranteed="off">

要查看我的表格更改,我需要重新启动我的网络服务器。

这是一些小故障,还是我需要更改配置?

我确信我已经在SQL Developer上提交了所有更改。

由于

P.S。一个解释将被赞赏(奖励积分!)

1 个答案:

答案 0 :(得分:1)

我知道你有:

 transactionisolationlevel="serializable" 

如果这是映射到oracle连接,你看到的行为就是我所期望的。

即。即使其他会话提交,在与数据库的java连接提交之前,您也不会看到该行。

例如,使用2个sql * plus会话。

SESSION 1                                   SESSION 2
SQL> create table foobar(id number);        SQL> alter session set isolation_level=serializable;

Table created.                              Session altered.

SQL> insert into foobar values (1);         SQL> select * from foobar;

1 row created.                              no rows selected

预期结果到目前为止,第2次会议无法看到该行。现在我们在第1节中提交:

SQL> commit;                               

Commit complete.
                                           SQL> select * from foobar;

                                           no rows selected

但是会话2仍然无法看到它。

                                           SQL> commit;

                                           Commit complete.

                                           SQL> alter session set isolation_level=serializable;

                                           Session altered.

                                           SQL> select * from foobar;

                                                   ID
                                           ----------
                                                    1

但是现在它可以一次提交session2。