![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
lavan |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
Столкнулся с непонятным поведением проги.Есть jsp страница(для входа на сайт) все как обычно, пользователь вводит логин и пароль.Дальше эта страница передает управление сервлету,который производит подключение к базе данных.Само подключение инкапсулировано в класс который имеет синхронизированные методы и инициализируется в методе init()
Конструктор:
Некоторые методы
Метод doGet()
Проблема такая:Когда первый раз запускаю сервлет(через netbeans+tomcat) все отрабатывает,а а если запускаю второй раз(не новое подсоединение,а перезапускаю сервлет без выхода из netbeans) то не преходит на нужную страницу(зависает на странице регистрации) причем если выполнять в отладочном режиме все работает нормально.Если перезапустить netbeans то 1 раз отрабатывает нормално а потом снова та же история. Народ,подскажите в чем проблема |
||||||
|
|||||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Модератор: Название темы должно отражать ее суть!
|
|||
|
||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
Это первый признак проблемы управления потоками. Вы не могли бы пояснить, зачем нужен вот этот ужас:
За вас по идее контейнер должен осуществлять менеджмент потоков. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
lavan |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
я создаю подключение к б.д в единсвенном экземпляре.а сервлет создает потоки.дальше я хочу избежать вожможности выполнения в разных потоках,изменения одних и тех же данных.в моем случае это выборка и обновления.я говорю,если какой либо поток сделал запрос к б.д все остальные ждут
Добавлено через 4 минуты и 15 секунд
вы имеете в виду,что мне просто надо сделать синхронизирующие блоки,а контейнер все остальное сделает сам? |
||||
|
|||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
Если уж вы решили уводить потоки в wait(), тогда вызывайте notify(). А то получается что вы их приостанавливаете и не возобновляете.
Имеется ввиду, что в сервлетах вообще не принято делать ручное управление потоками. А то, что Вы пытаетесь сделать, давно сделано за Вас в базе данных. Изоляция транзакций на должном уровне исключает и грязное чтение, и фантомные вставки, и другие проблемы конкурентной модификации данных. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
lavan |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
так я его вызываю
Т.е если я правильно понял то работа с б.д полностью реентерабельна на уровне системы?(б.д берет все на себя) и мне вообще можно исключить синхронизацию? И если да,то можете мне указать где в моей регулировке потоками ошибка?и почему в первый раз она все таки срабатывает? |
|||
|
||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
Мое предположение в том, что с первого раза что-то остается залоченым. Но без полного кода сказать сложно.
Мне не очень понятен термин "реентерабельно". Если вы боитесь, что операции чтения и апдейта могут друг другу мешать - зря боитесь. Для более глубокого понимания почиатйте про транзакции и уровни их изоляции. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
lavan |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
Тогда вопрос по транзакциям.Пусть есть
Являются ли транзакции атомарными для потоков? И если произошел откат,то что происходит после вызова con.rollback() кроме того,что данные останутся неизмененными?Куда деваются данные которые ввели пользователи в разных потоках? |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
Транзакции атомарны по определению. Для каждого потока в Ваших условиях будет отдельная транзакция. Изменения, сделанные потоком А будут видны потоку B только после коммита транзакции А. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
lavan |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
И все таки,куда передается управление после rollback();?куда деваются данные введенные пользователем?Ведь он ждет результат,а произошел откат.Как обрабатывается такая ситуация и кем?(а с потоками я разобрался,пока что все работает на потоках)
|
|||
|
||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
Никуда, остается там же, где и было. Не смешивайте понятие потока и ассоциированной с потоком транзакции. Откат транзакции приведет к тому, что данные в базе не изменятся. А поток тем временем спокойно продолжит выполнение.
Вами она и обрабатывается. После вызова rollback() обычным порядком возвращаете пользователю сообщение об ошибке. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
lavan |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
Большое спасибо за разъяснение!
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |