sobre as conversações do Seam, quando vc define um componente como ScopeType.CONVERSATION, voce está dizendo ao Seam, para que ele procure as anotações @Begin e @End nos metodos da action que usa teu componente.
Ainda estou estudando sobre isso, mas é basicamente oq acabei de dizer.
ele altera uma aplicação de exemplo que vem com o Seam. Uma aplicação que usa o escopo SESSION, ele altera pra CONVERSATION…
É de uma versão antiga do Seam, mas o conceito ajuda…
Vou ser mais prátic…
Suponha que eu tenha três páginas em um caso de uso: Listar Funcionário, Atualizar Funcionário e Ver Funcionário.
Em meu caso de uso eu tenho uma classe que será usada por essas páginas para fazer acesso a métodos como:
obterListaFuncionario(), atualizarFuncionário(f), obterFuncionarioPorId(id)… e acessar variáveis como List<Funcionario> funcioarios, Funcionario funcionarioSelecionado etc… mais ou menos isso.
Ok, sendo assim, quando eu entrar nesse caso de uso eu quero iniciar uma conversação de ManterFuncionario e siga a seguinte navegação por exemplo:
Listar>Atualizar>Ver>Listar…
Mas quando eu sair desse caso de uso (indo para o manter Cliente por exemplo) eu quero fechar a conversação e destruir os componentes e variáveis instanciados nesse contexto de conversação.
Alguém poderia me dar um exemplo de um page.xml que faça isso.
E para esse caso eu colocaria o ScopeType.CONVERSATION na classe que eu citei a cima neh !?
Basicamente é isso aqui embaixo…
o end conversation root=true é pra finalizar conversações aninhadas (nested) assim como no begin conversation eu tb começo conversações aninhadas…
vc pode definir isso no pages.xml principal pra qq view ou usar para cada página seu próprio xml, algo como home.pages.xml, para a página home.xhtml…
é bem útil isso, mas considere tb abrir e fehcar conversações pelas próprias funções nos componenetes seam…
Para um EJB Stateful o padrão é Conversation.
Para uma entidade JPA também.
Já para um EJB Stateless ou um MDB, o padrão é o escopo Stateless.
E para classes normais (POJOs), o padrão é Event.