我发现我的web服务器有奇怪的行为。Java Servlet返回的输出没有反映我对数据库所做的更改。
我的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">要查看我的表更改,我需要重新启动我的For服务器。
这是某种故障,还是我需要更改我的配置?
我不确定我已经提交了SQL Developer上的所有更改。
谢谢
附注:如有解释将不胜感激(加分!)
发布于 2013-01-03 22:58:09
我看到你有:
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但是session 2仍然看不到它。
SQL> commit;
Commit complete.
SQL> alter session set isolation_level=serializable;
Session altered.
SQL> select * from foobar;
ID
----------
1但是现在,一旦session2提交,它就可以了。
https://stackoverflow.com/questions/14138073
复制相似问题