PDA

Просмотр полной версии : JBoss - опыт и впечатления



DeeJayC
20.04.2007, 15:36
Итак, более-менее разобрались с завалом. Написали мы прогу под 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. Это нормально, это правильно... Но если прога просто продолжает работать в бесконечном цикле - это БАЙДА!

Absurd
20.04.2007, 17:01
Так все же дурь в кривой работе JVM в многопроцессорной среде из-за которой ConcurrentHashMap не обеспечивает атомарность как обещано, или в JBoss? Я не понял.

DeeJayC
20.04.2007, 17:15
imho, и то, и другое. если бы hashmap вываливало ConcurrentModificationException - то и проблема бы не возникла.

Absurd
20.04.2007, 17:30
imho, и то, и другое. если бы hashmap вываливало ConcurrentModificationException - то и проблема бы не возникла.
А каким способом использовалась ConcurrentHashMap? Я так понял, она не позволяет себя изменять пока все треды не закончили ее читать, и позволяет себя изменять она только одному треду в один момент.

DeeJayC
30.04.2007, 12:24
Да так же, как и hashMap. Дело не в том, что использовать. Можно же synchronized написать. Просто если сервер внутри содержит подобные ошибки - это бардак. Сказал бы покруче.

evg
03.04.2008, 16:34
Пропало сообщение. Или это на проверке?

evg
03.04.2008, 16:52
Дело не jboss, а в HIbernate (jboss использует их реализацию ejb). В jboss 4.0.5 своих граблей хватает с параллельной модификацией. Мы обошли это ввведением локов в своих кодах. Можно посмотреть здесь. (http://www.biznex.ru/bexp_sd/ru/index.php)
А что касается сравнения java и c++ ситуация известная: "Знакомая кривая короче незнакомой кривой" (http://www.real-time-enterprise.ru/economic/article/curve.html)