В целом
У нас есть некоторая бизнес-логика, которая вызывает узкое место в транзакции. Бизнес-логика запрашивает у базы данных набор данных (только для чтения), обрабатывает их и возвращает объект. Это должно быть сделано много раз с различными параметрами в данном запросе. Можем ли мы теоретически разорвать каждый вызов бизнес-логики на отдельный поток?
1010 * В частности *
EJB object (part of an http request on a JBoss App Server)
-creates objects that implement Callable (call method calls business logic method)
-using an ExecutorService invoke each callable object
Business Logic
-Makes a query of postgresql database which uses a PreparedStatement
-Using POJOs we build objects from ResultSet objects that come from postgresql
-Do expensive calculations
После всего этого мы получаем ошибки postgres, что неназванные порталы не существуют, даже когда мы ограничиваем наши потоки одним:
ERROR: cursor "<unnamed portal 777>" does not exist
STATEMENT: FETCH ALL IN "<unnamed portal 777>"
Я не совсем уверен, что происходит, чтобы вызвать ошибку, но бизнес-логика вызывается правильно, и она отлично работает без потоков. Это приводит меня к вопросу о том, могут ли потоки запускаться и добавляться в транзакцию (и если они могут, как МЫ это делаем?).