|
|
|
jta (non-jta)-data-source
|
|||
|---|---|---|---|
|
#18+
Приветствую! Были проблемы при закачке в БД (seam 2.2, jboss 5.1, oracle10) большого объема данных из xml: после 5-7 тысяч записей вываливалась ошибка (точно не помню уже какая), при этом даже те записи, которые по flush как бы должны были коммититься в базу, не сохранялись; Поискал в инете - вроде как проблема в jta-data-source: обработчик события оборачивается в отдельную транзакцию, чтобы обеспечить целостность для события, и все внутренние flush становятся по барабану и по честному откатываются, если при работе обработчика происходила ошибка. Конкретно - кэш не справлялся с объёмом данных. Попробовал non-jta-data-source. И правда работает. Но есть некие проблемки. 1. Сделал в приложении два persistence-context: jta и non-jta. В обычной жизни пользую jta, для закачки данных - non-jta. При этом в начале и конце работы с non-jta вываливается предупреждение: Calling joinTransaction() on a non JTA EntityManager. Вроде сильно не тревожит, но оно на экран валится, юзеров пугает. Неприятно. Не подскажете, как то можно побороть? 2. Хотел создавать non-jta только перед использованием (в components.xml поставить auto-create="false"). Не проканало. Создаваться то оно создаётся по запросу, но не видит entity-классы. Пишет что то типа: "класс не найден или не существует". Опять же, можно как то победить или не стОит заморачиваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2013, 11:58:58 |
|
||
|
jta (non-jta)-data-source
|
|||
|---|---|---|---|
|
#18+
А использовать UserTransaction и комитить в процессе переодически? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2013, 12:09:38 |
|
||
|
jta (non-jta)-data-source
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА использовать UserTransaction и комитить в процессе переодически? Для jta - чёт не задалось. В смысле, пробовал - не помогло. Точно уже не помню, с год назад бился, тогда надо было быстро - не получилось, бросил. Ну раз прозвучало - попробую ещё раз. Для non-jta - я так практически и делаю: em.getTransaction().begin() - commit(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2013, 15:23:22 |
|
||
|
jta (non-jta)-data-source
|
|||
|---|---|---|---|
|
#18+
AndreyDmt, JDKvoid flush() Synchronize the persistence context to the underlying database. Что означает только одно: при вызове этого метода происходит синхронизация состояния объектов в памяти с данными из БД. Коммит (т.е физическое изменение данных в БД, на жестком диске, если хотите) произойдет при успешном завершении транзакции. Автоматически, если используется JTA или в ручную tx.commit(); В вашем случае этого не происходит. Для таких задач как ваша в большинстве JPA провайдеров и JDBC драйверов существует поддержка пакетной обработки. Например, http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2013, 15:23:25 |
|
||
|
jta (non-jta)-data-source
|
|||
|---|---|---|---|
|
#18+
bourne, Но это то и так понятно. Я наверное проблему не правильно описАл. У меня в бине, обслуживающем визуальную форму одновременно существует два ентити менеджера. Один jta (скажем em-select) и второй non-jta (em-update). Первый вообще отнаследовался, я его убрать не могу, да и нужен он мне для рутины, тоже отнаследованной. Второй чисто для записи данных из файла внедрён через @In конкретно в эту форму. Его и пользую через beginTransaction(), commit(). Никаких flush() в этом случае для сохранения не пользую - это не работает. Через begin-commit успешно перевалил через поллимона записей в один проход. Поэтому грех жаловаться. Проблемы: 1. Почему при запуске и окончании работы листенера (нажимаю кнопку - выскакивает в логах, заканчивает работу - второй раз выскакивает) идёт попытка на вызов joinTransaction именно к non-jta? Их же два. Выбирается почему то именно non-jta (или сразу оба?). Как разубедить, убрать варнинг? Просто не понимаю что происходит, потому переживаю. 2. В какой момент, созданный ентити-менеджер получает информацию (хм... О чём? Среде выполнения?) Почему создавая его в самом бине, я не моду достучаться до ентити классов. Мне он нужен то в одном обработчике, и то не каждый раз. Тут может даже хватит ответа: всё работает, дерзай дальше. Чтобы понимать, стОит дальше ковырять или бросить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 09:08:54 |
|
||
|
jta (non-jta)-data-source
|
|||
|---|---|---|---|
|
#18+
AndreyDmt, давайте код ваш посмотрим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 14:43:17 |
|
||
|
jta (non-jta)-data-source
|
|||
|---|---|---|---|
|
#18+
bourne, Ну давайте Это -ds.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Это выдержка из components.xml. Здесь пытался поставить auto-create="false" для второго ем Код: xml 1. 2. 3. 4. Это кусок бина Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Это сам парсер Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. Собственно вот это я пытался на словах объяснить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 07:49:09 |
|
||
|
jta (non-jta)-data-source
|
|||
|---|---|---|---|
|
#18+
Забыл всё таки... persistence.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 07:55:48 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38219684&tid=2129579]: |
0ms |
get settings: |
11ms |
get forum list: |
27ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
57ms |
get topic data: |
17ms |
get forum data: |
5ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 327ms |
| total: | 539ms |

| 0 / 0 |
