Прелесть. Разгребаю порождённое синим работником... Это-ж надо было додуматься до такого :)
Кинуть UPDATE в DB2.
Если DB2 Брыкнется, с кодом "ключ должен быть уникальным", сделать селект и посмотреть, что там дают, сделать rollback.
Почему он хочет сделать rollback несчастному селекту непонятно (поскольку соединение лежит в одной переменной, то второй вызов getConnection благополучно выпинывает первый, с незакрытой транзакцией). Почему ему не понравилась идея "прочитать базу, если нет записи, добавить"? Странно народ думает...
А эта восхитительная идея складывать несколько объектов-соединений в DB2 в одну большую hashtable, а потом гадить в эту же hashtable в разных нитках...
Очень хочется за такое задушить. Потому как DB2 8.1 -- нежная, как цветок. И такие издевательства, с потерей "в процессе" оригинального соединения без rollback/commit вызывают у неё культурный шок.