Как хранить бин в разговоре
Есть ли способ сохранить бин в контексте разговора? Т.е. для каждого нового разговора создается новый отдельный компонент, принадлежащий ему.
1 ответ
Самый простой способ сделать то, что вы хотите, это объявить управляемый компонент ConversationScoped или EJB, где JSF2 управляет областью действия.
Здесь есть несколько хороших объяснений:
- http://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html
- http://www.ibm.com/developerworks/java/library/j-jsf2fu-0710/index.html
- http://www.theserverside.com/tip/Dependency-Injection-in-Java-EE-6-Conversations-Part-4
- http://www.andygibson.net/blog/article/cdi-conversations-part-1/
- http://www.andygibson.net/blog/tutorial/pattern-for-conversational-crud-in-java-ee-6/
- http://blog.goyello.com/2011/06/08/jee6-cdi-and-conversation-scope/
... любой из которых сделает лучшую работу, чем я. Очень короткая версия состоит в том, что вы аннотируете бин - который может быть простым POJO, который следует соглашениям бина - с помощью @ConversationScoped
аннотаций. Ты тогда @Inject
Conversation
объект, который вы можете использовать для begin()
а также end()
разговоры. Введите это @ConversationScoped
боб в другие вещи. Conversation.begin
а также Conversation.end
методы контролируют его жизненный цикл.
Здесь достаточно много кода для публикации, но приведенные выше ссылки должны помочь.
Альтернатива @ConversationScoped
POJO управляемые бобы могут быть @Stateful @ConversationScoped
EJBs. Они могут быть очень полезны, когда вам нужны службы EJB в разговоре.
Чтобы ознакомиться с некоторыми концептуальными основами и подробностями, прочтите справочник CDI/Weld по областям применения, а также остальную часть руководства по CDI/Weld. Это действительно хорошо написано и действительно хорошо.