|
|
|
MDB и синхронизация
|
|||
|---|---|---|---|
|
#18+
есть список из 10000 элементов. каждый элемент обрабатывается примерно 1 сек., соответственно обрабатывать их в одном методе не получится - отвалится по таймауту транзакции. идея такая - создать mdb, он получит 10 записей, ставит им пометку IN_PROGRESS, обработает и отправит сам себе сообщение. проблема в том, что через некоторое время начинаются сыпаться ошибки из за того что идет попытка обработать одни и те же данные. то есть я думаю, выглядит примерно так: бин отправляет сообщение, после этого контейнер передает управление новому экземпляру, не заканчивая выполнение предыдущего (то есть транзакция действует и не комитит изменения). Новый экземпляр не видит, что данные IN_PROGRESS, и обрабатывает их же. соответственно проблема - как сделать так, чтоб работал всего 1 бин. поискал на тему семафоров - глухо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 17:55:42 |
|
||
|
MDB и синхронизация
|
|||
|---|---|---|---|
|
#18+
однако квадратный пробка для круглый дырка. Плохая идея использовать JMS. Просто увеличте таймаут для этой операции на необходимое для неё время. скорее всего у вас сервер посылает сообщение на обработку второй раз недождавшись acknoledgment. либо пофиксите отправку ackn.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 18:27:08 |
|
||
|
MDB и синхронизация
|
|||
|---|---|---|---|
|
#18+
exppfromstdоднако квадратный пробка для круглый дырка. Плохая идея использовать JMS. Просто увеличте таймаут для этой операции на необходимое для неё время. скорее всего у вас сервер посылает сообщение на обработку второй раз недождавшись acknoledgment. либо пофиксите отправку ackn.... про подтверждение - понятно, что оно именно так и происходит, я проверил, запихивая в текст письма данные и проанализировав лог. данных может быть ОЧЕНЬ много (это типа очереди необработанных данных), а таймаут бесконечно увеличивать не хочется. к тому же, если не ошибаюсь, таймаут настраивается глобально. еще думал как-нибудь таймеры прикрутить. или отрубить транзакцию для mdb и весь код вынести в session с атрибутом TransactionAtributeType.REQUIRED ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 18:39:12 |
|
||
|
MDB и синхронизация
|
|||
|---|---|---|---|
|
#18+
опишите плиз задачу подробнее откуда берутся данные и как. может каждую заявку отправлять отдельным сообщением? или я что то не понял. про авторставит им пометку IN_PROGRESS, обработает и отправит сам себе точно не воткнул. зачем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 10:35:36 |
|
||
|
MDB и синхронизация
|
|||
|---|---|---|---|
|
#18+
есть контора, торгующая книгами. раз в месяц ей приходит от поставщиков список новых книг. от поставщика, допустим, 10000 книг за раз. формат: csv файл. есть web интерфейс с формой для заливки файла. при загрузке файла все записи помещаются в таблицу META_DATA. далее запускаем процесс парсинга, на обработку каждой записи уходит примерно секунда. то есть обработка всего за раз - 10000 секунд. чтобы не манипулировать со временем транзакции, обрабатываем данные кусками. ну, собственно, далее см пост 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 11:17:29 |
|
||
|
MDB и синхронизация
|
|||
|---|---|---|---|
|
#18+
А зачем так мудрить с MDB? Почему не сделать все как обычно, для обработки одного сообщения создается отдельный экземпляр MDB? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 11:26:36 |
|
||
|
MDB и синхронизация
|
|||
|---|---|---|---|
|
#18+
очередь из 10000 сообщений для MDB? опыт подсказывает, что это все быстро падает. ЗЫ юзаю JBOSS 4.0.4.GA + MySQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 11:37:36 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=647&tid=2146067]: |
0ms |
get settings: |
17ms |
get forum list: |
26ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
57ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 313ms |
| total: | 533ms |

| 0 / 0 |
