У нас есть приложение Websphere Java EE, требующее распараллеливания, для которого мы хотим использовать рабочие компоненты CommonJ .
Каждый «поток» требует своего собственного представления данных, поступающих из базы данных. Большая часть этого была бы предварительно извлечена, но все равно нужно было бы пойти в базу данных, чтобы получить некоторые. Мы ожидаем, что продолжительность общей работы всех этих потоков будет «большой» (т. Е. Достаточно времени для изменения базовых данных).
В результате нам необходимо обеспечить изоляцию данных, используемых приложением и запрашиваемых в ходе работы потоков.
Кажется, что единственный способ убедиться в этом - это иметь «глобальную» транзакцию и использовать транзакции XA. Но мы хотели бы избежать этой сложности (и накладных расходов), если это вообще возможно, и ищем идеи или альтернативы: есть мысли?
Кроме того, в какой степени (если вообще) рабочие компоненты Common-J поддерживают транзакции, управляемые контейнером?
@ Карл: Возможно, я просто имел в виду накладные расходы. Мы думали, что транзакции XA и обмен сообщениями несут накладные расходы, которых могут избежать рабочие компоненты Common-J, совместно использующие транзакцию?
Используемый набор данных будет иметь> 300 тыс. Отдельных строк данных, для каждой из которых потребуется ~ 100 вычислений. В то время как они могут быть разделены на разные потоки, работающие с общими, кэшированными, доступными только для чтения данными, сравнительные накладные расходы памяти на копирование в / чтение из очереди кажутся непомерно высокими. Вы бы согласились?
@ Карл: от десятков до сотен миллисекунд на единицу. Мы также сосредоточены на улучшении логической обработки в качестве отдельной задачи.
Нужно ли использовать транзакции XA, когда требуется, чтобы все потоки имели согласованное представление данных в одной базе данных? Мой ответ на этот вопрос заключается в том, что каждому потоку потребуется собственный JPA EntityManager (например, соединение), и для координации их доступа потребуется XA.
Но если я могу сделать это без XA, то тем лучше, нет?