Если ваши EJB @Stateless
, это не имеет значения, вы в порядке.Если они @Session
, то вам не повезло, так как в прошлый раз, когда я проверял (в EJB 3.0), вам не разрешалось вызывать несколько методов с состоянием EJBs одновременно.Существовал фреймворк с именем Seam, который мог сериализовать вызовы к EJB с отслеживанием состояния.
Вы можете пометить методы из EJB с отслеживанием состояния как synchronized
, но это не рекомендуется.Поскольку это тот же самый экземпляр, он, вероятно, будет работать, но хардкорные евангелисты EJB могут не быть счастливыми.
Обновление:
Я прочитал спецификацию для EJB 3.1 и текств 4.3.14 состояния:
Контейнер сериализует вызовы для каждого экземпляра сессионного компонента без сохранения состояния и без состояния.Большинство контейнеров будет поддерживать много экземпляров сессионного компонента, выполняющегося одновременно;однако каждый экземпляр видит только сериализованную последовательность вызовов методов.Поэтому сессионный компонент с состоянием или без состояния не должен кодироваться как повторно входящий.
Чтобы сделать вещи более увлекательными, он продолжает говорить:
По умолчанию клиентыразрешено совершать параллельные вызовы объекта сеанса с сохранением состояния, а контейнер необходим для сериализации таких одновременных запросов.Обратите внимание, что контейнер никогда не разрешает многопоточный доступ к реальному экземпляру сессионного компонента с сохранением состояния.
Поскольку я не знаю ни одного способа одновременного вызова службы, но без использования разных потоков, поскольку фактические вызовыблокируются, я могу только предположить, что они ссылаются на прокси-сервер, на котором вы выполняете свои звонки.
Так что, если вы действительно хотите вызывать код параллельно, короткий ответ - , вы не можете использовать EJB с состоянием, но это из коробки для EJB без сохранения состояния , поскольку вы получаете новый экземпляр для каждого вызова.
Обновление: Вы никогда не получите экземпляр дляEJB, вы всегда получаете прокси, который будет вызывать EJB.В случае EJB без сохранения состояния ваш прокси в конечном итоге будет создавать новый EJB без сохранения состояния для каждого собственного вызова метода, и код EJB будет каждый раз запускаться на новом экземпляре.