2014-02-18 3 views
0

Я занимаюсь проектированием веб-сервисов для системы заказов. Когда я получаю заказ, он должен добавить около 10000 объектов в таблицу. Это может быть больше. Но поскольку я понимаю, что эта работа не закончится во время транзакции и получит тайм-аут, и все работы будут возвращены. Но я хочу, чтобы служба завершила свою работу даже после того, как прошло время транзакции. Как я могу это достичь? Мы используем EJB3 в WebLogic 11g с помощью jdk 1.6.25.Завершить работу над EJB3 даже после таймаута

+0

Мы используем своего рода пакетную обработку для больших наборов данных, но тогда вы можете только обеспечить согласованность данных в одном наборе, а не по всем наборам, потому что у вас нет одной большой транзакции. – Smutje

+0

Наша система проектируется таким образом, что согласованность проверяется еще где раньше. Поэтому согласованность не является проблемой. – TigerCoder

+0

Вам нужно знать окончательный результат этой обработки перед возвратом из метода? – jpkrohling

ответ

1

Вы можете установить таймаут транзакции: Services -> JTA, установить значение параметра Timeout Seconds. По умолчанию это значение составляет 30 секунд.

Если ваши транзакции очень длинные, возможно, вы изменили архитектуру своего приложения. Вы можете вставлять строки без транзакций (но вы можете потерять согласованность данных) или использовать обновление butch с одной порцией данных на транзакцию.

Для ввода строк без транзакции вы можете использовать @TranscactionAttribute с TransactionAttributeType.NOT_SUPPORTED.

0

Попробуйте JMS с MDB для длительных процессов.

0

Если согласованность не является проблемой и она проверена в другом месте, вам следует обновить записи базы данных за пределами области ttransaction. Поэтому сохраните все, что нужно, чтобы перейти на db в месте, где он быстро. И пусть фактическая вставка db произойдет в сеансе без транзакции позже.

Смежные вопросы