Итак, более-менее разобрались с завалом. Написали мы прогу под JBoss AS 4.0.4, EJB3 в полный рост. Прога протестирована, супер всё работает.
В продукции сервер стал в позу прачки. Я перерыл весь свой код. Везде, где надо и не надо добавил synchronized ( у меня до сих пор все ConcurrentHashMap в synchronized запиханы )
Ошибка была найдена, но пришлось срочно мигрировать на 4.0.5.
Ошибка следующая - EJB3 в JBoss 4.0.4 - дырявый. И в многопроцессорных тачках наблюдается следующий эффект. Один из классов модифицирует HashMap. Можно создать ситуацию, при которой не synchronized HashMap модификация улетает в бесконечный цикл...
Вся эта херня стоила мне дикого количества нервов, и я начинаю сурово разочаровываться в java. Если в плюсах происходит что-то подобное, то происходит - правильно - ACCESS VIOLATION и или core dump. Это нормально, это правильно... Но если прога просто продолжает работать в бесконечном цикле - это БАЙДА!
JBoss - опыт и впечатления
Модератор: Duncon
-
- Сообщения: 497
- Зарегистрирован: 17 фев 2004, 11:26
- Откуда: Ленинград (который Город на Неве)
- Контактная информация:
imho, и то, и другое. если бы hashmap вываливало ConcurrentModificationException - то и проблема бы не возникла.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)
viel spass, DeeJayC
viel spass, DeeJayC
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
А каким способом использовалась ConcurrentHashMap? Я так понял, она не позволяет себя изменять пока все треды не закончили ее читать, и позволяет себя изменять она только одному треду в один момент.DeeJayC писал(а):imho, и то, и другое. если бы hashmap вываливало ConcurrentModificationException - то и проблема бы не возникла.
2B OR NOT(2B) = FF
-
- Сообщения: 497
- Зарегистрирован: 17 фев 2004, 11:26
- Откуда: Ленинград (который Город на Неве)
- Контактная информация:
Да так же, как и hashMap. Дело не в том, что использовать. Можно же synchronized написать. Просто если сервер внутри содержит подобные ошибки - это бардак. Сказал бы покруче.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)
viel spass, DeeJayC
viel spass, DeeJayC
Пропало сообщение. Или это на проверке?
Дело не jboss, а в HIbernate (jboss использует их реализацию ejb). В jboss 4.0.5 своих граблей хватает с параллельной модификацией. Мы обошли это ввведением локов в своих кодах. Можно посмотреть здесь.
А что касается сравнения java и c++ ситуация известная: "Знакомая кривая короче незнакомой кривой"
А что касается сравнения java и c++ ситуация известная: "Знакомая кривая короче незнакомой кривой"