2015-09-10 4 views
0

Я создал сессионный компонент без состояния (SLSB) и выполняю локальный вызов из той же JVM. У меня есть локальная переменная BO в SLSB при инициализации я устанавливаю это значение, а в следующем вызове я выполняю некоторую бизнес-функцию, но в следующем вызове я не могу получить значение, которое я установил в prev. вызов. , который, по-видимому, соответствует функциональности SLSB, но есть аналогичная fucntionality, которая работает в другой части нашего приложения. Я подтвердил, что оба являются SLSB, и объединение пулов не выполняется в ejb-jar.xml и weblogic-ejb-jar.xml (также оба одинаковы), также я отлаживал оба класса, но не знаю, как он работает в другом класс.Тот же сеансовый сеанс без состояния, который работает в одном приложении

Мне интересно, есть ли другой способ, с помощью которого мы можем полностью управлять состоянием сессионного компонента без состояния без объединения пулов.

+0

Если вам нужно поведение с учетом состояния, почему вы просто не используете SFSB? В любом случае, можете ли вы предоставить какой-либо код обоих упомянутых SLSB? – slwk

ответ

1

Важным (если немного очевидным) уроком является следующее: Не сохранять состояние в сессионных компонентах без состояния. Если вы хотите сохранить диалоговое состояние, используйте stateful bean, если вы хотите, чтобы общее состояние использовало singleton bean. Вы также можете использовать entity bean для сохранения состояния.

Причина, по которой это работает в других местах, скорее всего, будет связана с объединением бобов. Контейнеры EJB в основном используют боновые пулы для хранения своих фанатов без состояния, поскольку это дает лучшую производительность и масштабируемость. Когда приходит запрос, контейнер выбирает компонент из пула для его обслуживания, вынимает его из пула, боб обрабатывает запрос, а затем помещается обратно в пул. Какой боб выбирают до контейнера, так как в теории все они взаимозаменяемы.

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

+0

да, вы правы, но я развернул оба приложения на одной и той же вкладке веб-журнала с доменом diff и во время отладки всего вызова совпадают, но когда элемент управления переходит в StatlessessionPool из weblogic внутри, в моем случае он вызывает ejbRemove (все еще оспаривая, почему он так себя ведет в моем состоянии), а в других случаях это не так. Какая разница, которую я обнаружил, в моем объекте потеряна статическая информация - это то, чего не было в другом приложении. – Harish

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