Когда я читаю Что такое сессионный компонент? раздел руководства по J2EE 1.4:
Сессионные бобы без состояния
A сеанс без состояния bean-компонент не поддерживает диалоговое состояние для конкретного клиента. Когда клиент вызывает метод bean-компонента без сохранения состояния, переменные экземпляра bean-компонента могут содержать состояние, но только на время вызова. Когда метод завершен, состояние больше не сохраняется. За исключением вызова метода, все экземпляры bean-компонента без состояния эквивалентны, что позволяет контейнеру EJB назначать экземпляр любому клиенту.
В вашем случае вызов methodB()
из methodA()
будет происходить в том же случае и эквивалентен this.methodB()
. Таким образом, я склонен сказать, что methodB()
не может выводить что-то еще, кроме значения, которое было передано methodA()
.
Это подтверждается первым предложением в разделе 7.11.8 в спецификации EJB 2.0 : "Контейнер должен гарантировать, что только один поток может выполнять экземпляр в любое время". Это означает, что вы не можете прийти к ситуации, когда данные (в переменных вашего экземпляра) от разных клиентов (потоков) будут смешаны. Вам гарантирован уникальный доступ к переменным экземпляра, пока methodA()
не вернется!
Тем не менее, я не говорю, что у вас нет проблем где-то. Но я не думаю, что ваш псевдокод эквивалентен.
(РЕДАКТИРОВАТЬ: После прочтения некоторых комментариев к вопросу OP, теперь есть явное сомнение относительно используемого псевдокода и семантики. Я проясняю возможные последствия ниже.)
Как подчеркнул Rocket Surgeon, что вы имеете в виду под переменная класса ? Вы действительно имеете в виду переменную класса , а не переменную экземпляра ? Если да, псевдокод не отражает его, но это явно приведет к непредсказуемому поведению. На самом деле, из раздела 24.1.2 (и первого пункта) спецификации EJB 2.0 ясно, что вы не можете записывать данные в переменную класса (хотя вы можете это сделать). Для этого должна быть веская причина:)