component.getInstance () возвращает новый экземпляр в Seam - PullRequest
2 голосов
/ 20 января 2011

У меня было много проблем с добавлением компонентов в Seam.

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

Я подошел к этому так, как создал объект в области приложения с историей HashMap - сессионным компонентом с сохранением состояния противидентификатор пользователя.

Когда событие вызывается, запускается метод наблюдателя в объекте Application-scop и вызывает метод для каждого компонента в hashmap (передавая в качестве аргумента объектный компонент).

В методе, вызываемом для каждого бина, мне нужно получить доступ к некоторым внедренным методам, чтобы проверить, должен ли «пользователь бина» реагировать на это событие (отображая некоторые данные из бина сущности).Для этого мне нужен доступ к некоторым внедренным bean-компонентам (как SFSB, так и beans-компонентам без сохранения состояния), но на данный момент все они нулевые.

Насколько я понимаю, Component.getInstance () (обернутый в Lifecycle.beginCall () / .endCall () block) или один из аналогичных методов можно использовать здесь для извлечения объекта, однако это не работает.

Если бы я сделал что-то вроде (StoryManagerAction) Component.getInstance ("storyManagerAction ") где storyManagerAction - это сессионный компонент с сохранением состояния. Я ожидаю, что будет возвращен экземпляр StoryManagerAction с именем storyManagerAction, который в настоящее время находится в сеансе.Вместо этого, однако, я получаю экземпляр StoryManagerAction со всеми его примитивными членами, установленными в 0, и всеми его объектными членами, установленными в нулевое значение.

Любая идея, почему это происходит, и что мне нужно сделать, чтобы это работалоправильно?

1 Ответ

1 голос
/ 25 марта 2011

Когда вы выполняете итерацию Map и вызываете метод для каждого StoryManagerAction, то, что вводится, относится к областям сеанса, который вызвал событие, а не к областям сеанса, которому принадлежит компонент StoryManagerAction.

Избегайте внедрения в StoryManagerAction и разрешите все необходимые компоненты в аннотированном методе @Create, в котором вы сохраните значение в переменных обычного экземпляра.

...