JBoss - опыт и впечатления

Для любителей обсудить что круче Linux или Win32, Java или C#.

Модератор: Duncon

Ответить
DeeJayC
Сообщения: 492
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

20 апр 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. Это нормально, это правильно... Но если прога просто продолжает работать в бесконечном цикле - это БАЙДА!
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

20 апр 2007, 17:01

Так все же дурь в кривой работе JVM в многопроцессорной среде из-за которой ConcurrentHashMap не обеспечивает атомарность как обещано, или в JBoss? Я не понял.
2B OR NOT(2B) = FF
DeeJayC
Сообщения: 492
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

20 апр 2007, 17:15

imho, и то, и другое. если бы hashmap вываливало ConcurrentModificationException - то и проблема бы не возникла.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

20 апр 2007, 17:30

DeeJayC писал(а):imho, и то, и другое. если бы hashmap вываливало ConcurrentModificationException - то и проблема бы не возникла.
А каким способом использовалась ConcurrentHashMap? Я так понял, она не позволяет себя изменять пока все треды не закончили ее читать, и позволяет себя изменять она только одному треду в один момент.
2B OR NOT(2B) = FF
DeeJayC
Сообщения: 492
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

30 апр 2007, 12:24

Да так же, как и hashMap. Дело не в том, что использовать. Можно же synchronized написать. Просто если сервер внутри содержит подобные ошибки - это бардак. Сказал бы покруче.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
evg
Сообщения: 9
Зарегистрирован: 03 апр 2008, 15:58
Откуда: Москва

03 апр 2008, 16:34

Пропало сообщение. Или это на проверке?
evg
Сообщения: 9
Зарегистрирован: 03 апр 2008, 15:58
Откуда: Москва

03 апр 2008, 16:52

Дело не jboss, а в HIbernate (jboss использует их реализацию ejb). В jboss 4.0.5 своих граблей хватает с параллельной модификацией. Мы обошли это ввведением локов в своих кодах. Можно посмотреть здесь.
А что касается сравнения java и c++ ситуация известная: "Знакомая кривая короче незнакомой кривой"
Ответить