Предистория: было некое приложение работяющее с базой, каждый пользователь приложения был зарегистрирован в базе как пользователь субд (как это культурно назвать?), и соотв. коннектился под своим уникальным именем, в итоге SQL программисты часто использовали SQL сессию, временные таблицы надеясь что они друг от друга изолированны и т.д.
Итак, есть веб приложение (есесно на Java) использующее процедуры из вышеописанной системы, в этом приложении есть записи и поиск этих записей, все вроде работает, но: - делаем посик и находим некоторые особые записи - просматриваем их - заходим под другим вользователем в веб приложение - повторяем поиск и он возвращает неверный результат, - просматриваем записи - повторяем поиск и он работает верно
Опытным путем установленно, что глюк поиска происходит только в тех соединениях в которых предыдущий пользователь запрашивал данные записей. Т.е. несмотря на то что соединение и транзакция закрылись и логично предположить что все изменения в сессии были отменены, на самом деле этого не произошло.
Вопрос: как «сбросить» состояние SQL соединения?
База DB2, сервер Tomcat 5.5.27 подключение создается через настроенный пул соединений: Код:
<Resource Schema="TEST"
auth="Container"
connectionProperties="retrieveMessagesFromServerOnGetMessage=true;clientProgramName=TEST/WEB;driverType=4;readOnly=false;currentSchema=TEST;"
driverClassName="com.ibm.db2.jcc.DB2Driver"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
maxActive="20"
maxIdle="10"
maxWait="10000"
name="jdbc/testDS"
removeAbandoned="true"
removeAbandonedTimeout="300"
scope="Shareable"
testOnBorrow="true"
testWhileIdle="true"
type="javax.sql.DataSource"
url="jdbc:db2://localhost:50002/testdb"
username="test"
password="1"
validationQuery="values 1" />
ps. да я знаю что архитектуру сего беобразия нужно переделывать