JSF2 + Seam 3 Persistence Module

Olá! Sou programador e atualmente estou trabalhando com JSF 2, Tomcat e estou tentando utilizar o seam 3 Persistence Module.

Gostaria de saber se alguém já trabalhou com esse módulo do seam pois tenho algumas dúvidas.

Já trabalhei com EJB e JSF 1.2, onde era muito produtivo poder executar operações de crud sem ter que chamar um entityManager.begin(), entityManager.commit()

Gostaria de saber se o seam consegue fazer isso, e se funciona mesmo, já fiz alguns testes aqui mas as vezes funciona as vezes não funciona.

Tenho o Meu EntityManagerProducer:

@Produces
@ExtensionManaged
@ConversationScoped
@PersistenceUnit(unitName = "meuPu")
EntityManagerFactory em;

tenho o meu backingBean anotado com @Named @ViewScoped ele injeta uma classe de de serviços(responsável por operações de crud), ou seja, meu backingBean chama a classe de serviço que executa as operações de CRUD (a classe de serviço injeta o entityManager).

Qual seria o certo em relação ao escopo do EntityManagerProducer para que o backingBean possa ser ViewScoped

Obrigado, bom dia a todos.

Funciona sim,

Deixa o scopo como Conversation mesmo que é o que esta na documentação,

Em relação ao EntityManager é so

@Inject private EntityManager em

Em qq lugar do código, não precisa fechar transação, abrir, commitar, etc… ele faz isso em conjunto com o seam-faces

E outra ele acaba com o erro de Lazy do Hibernate,

Abrcs

Legal, obrigado pelas confirmações!

Outra dúvida se eu tiver uma classe (ClasseA) que injeta o entityManager, e essa classe chama outra que também injeta (ClasseB).

Por padrão o Seam vai propagar tranquilamente esse entityManager ou não, caso não propague existe algum mecanismo para especificar que isso deve acontecer?

Obrigado.

Sim olha esse projetinho meu aqui


https://github.com/rafaeljesus/agile2go

Cara mais uma vez obrigado, legal a iniciativa projeto no git. Parabéns

Mas como estou no início dessa caminhada, outras dúvidas vão surgindo.

Você está usando o interceptor do seam, que você incluiu no beans.xml

org.jboss.seam.transaction.TransactionInterceptor

Qual o motivo de para criar a classe TransactionInterceptor (sendo que o seam já faz o begin e o commit )?

Ví que nela você usa a anotação Transational, poderia me explicar melhor o que acontece nesse caso? Sei que o seam também fornece uma anotação Transational lí na documentação mas não entendi direito para que serve.

Abraço, obrigado.

[quote=furlaneto]Cara mais uma vez obrigado, legal a iniciativa projeto no git. Parabéns

Mas como estou no início dessa caminhada, outras dúvidas vão surgindo.

Você está usando o interceptor do seam, que você incluiu no beans.xml

org.jboss.seam.transaction.TransactionInterceptor

Qual o motivo de para criar a classe TransactionInterceptor (sendo que o seam já faz o begin e o commit )?

Ví que nela você usa a anotação Transational, poderia me explicar melhor o que acontece nesse caso? Sei que o seam também fornece uma anotação Transational lí na documentação mas não entendi direito para que serve.

Abraço, obrigado. [/quote]

Sim eu antes usei para estudo o @Transactional do Seam e agora vou exclui-lo e o interceptor que eu criei tbm naum esta em uso, eu tinha criado pois estava sem o seam persistence, deixei la para estudo mesmo

Não precisa de anotação nenhuma, o seam-persistence + seam-faces dao um begin no inicio e commit no final de cada request,

QQ anotação @Transactional seja Seam, Spring inicia uma transação faz um commit e não dão roolback, pode ver q a que a q eu criei da roolback…

Para dar roolback com o seam-faces+seam-persistence tem que fazer como eu faço da uma olhada nos pacotes e va em exception…

Esta projeto é o do meu TCM, a artuitetura esta boa vale a pena estudar…

QQ coisa pergunte, abrcss

Bom dia! Dúvidas esclarecidas, mas mesmo assim ainda tenho problema ao excluir um objeto, é lançada uma exceção:

Caused by: java.lang.IllegalArgumentException: Removing a detached instance

Não consigo compreender, pois estou com ViewScoped no BackingBean e a minha classe como falei (Service) esta sem anotação nenhuma ela só injeta o EntityManager. Conferi o hashCode() do entityManager no momento de listar e no momento de remover e são iguais.

Para as outras operações esta tudo Ok, Listar Alterar e Cadastrar.

No xhtml tenho um painel para Cadastro e Edição e um painel de listagem, mas todos estão na mesma página, ou seja, faço todas as operações sem sair da página.

Obrigado.

Ok tenta isso aqui na sua classe de Servico:

delete(getEntityManager.getReference(AClasseARemover.class, aClasseARemover.getId()));

Sim funciona, mas só para eu entender, pq entityManager.remove(entity), por sí só não funciona?

Olá Rafael, sabe me dizer o pq da necessidade de pegar a referencia do objeto? se a especificação é assim?

Tenho mais duas perguntas:

Poderia me falar um pouco mais da anotação @Transaction, ao colocar essa anotação na classe o seam vai saber que é a partir dali que deve começar a gerenciar (begin() commit())?

E referente as conexões tem algum lugar onde eu possa definir um pool de conexões, por exemplo no persistence.xml, lembro-me de ja ter visto isso em um arquivo “nome-DS.xml” mas era qdo eu programava jsf e rodava no jboss, hoje eu estou no tomcat.

Obrigado, abraço.