Dúvidas sobre o JBoss Seam!

Olá pessoal,

Tenho algumas dúvidas a respeito do JBoss Seam. Se alguém poder me ajudar eu agradeço.

Quando eu tenho um componente e não defino um escopo, qual é o escopo padrão, Application?

@Name("componente") public class Componente(){ \\...

Se eu defino um escopo de Conversation, aonde eu defino a delimitação desse contexto, tipo, aonde essa conversação começa e aonde termina?

@Name("componente") @Scope(ScopeType.CONVERSATION) public class Componente(){ \\...

Por favor, alguém me ajude…
Preciso muito entender isso…

Help!!!

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.

Dá uma olhada nisso:

http://weblogs.java.net/blog/bleonard/archive/2006/11/a_conversation.html

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…

acho que quando o escopo nao eh declarado o padrão eh EVENT

o inicio e o fim de uma conversation podem ser declarados no pages.xml tb…

sim, eh isso mesmo.
O pages.xml tbm gerencia conversações. Alias, ele se garante em muitas outras coisas :stuck_out_tongue:

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…

<?xml version="1.0" encoding="UTF-8"?>
<pages xmlns="http://jboss.com/products/seam/pages"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.1.xsd"
	no-conversation-view-id="/home.xhtml" login-view-id="/login.xhtml">

	<page view-id="*">
		<navigation>
			<rule if-outcome="home">
				<end-conversation root="true"/>
				<redirect view-id="/home.xhtml" />
			</rule>
		</navigation>
		<navigation from-action="#{home.gotoTipoAtividadeRead()}">
			<begin-conversation nested="true" />
			<redirect view-id="/TipoAtividadeRead.xhtml" />
		</navigation>
	</page>
</pages>

Você pode começar ou terminar uma conversação não somente do pages, pode também usar annotation pra fazer isso.

exemplo para matar a conversacao:

@End ( BeforeRedirect = true )
public void metodoConversacao (){

}
Quando esse metodo for executado a conversação será encerrada.

O mesmo pode ser feito para iniciar uma conversacao
@Begin() ae vc pode usar flushMode join. normal igual no pages.

att

Depende do tipo de classe…

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.

alguém me indica um crud em jboss seam ?