0

Web サーバーで奇妙な動作を発見しました。データベースに加えた変更が、Java サーブレットから返された出力に反映されていません。

私のサーブレットは、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">

テーブルの変更を表示するには、Web サーバーを再起動する必要があります。

これは何らかの不具合ですか、それとも設定を変更する必要がありますか?

SQL Developerですべての変更をコミットしたことは確かです。

ありがとう

Ps説明をいただければ幸いです(ボーナスポイント!)

4

1 に答える 1

1

私はあなたが持っていると思います:

 transactionisolationlevel="serializable" 

これがオラクル接続にマッピングされている場合、表示される動作は私が期待するものです。

つまり、他のセッションがコミットしても、データベースへの 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 が一度コミットできるようになりました。

于 2013-01-03T14:58:08.830 に答える