VRaptor 2 - Ciclo de vida do EntityManager

7 respostas
renanpto

Bom Dia,

O EntityManager injetado pelo VRaptor é encerrado após a execução da logic ?

Mas por exemplo uma Thread que foi iniciada pelo logic, e que necessita do EntityManager para sua execução, ela consiguirá usar esse objeto ? O problema é se a Thread começar sua execução após o encerramento do EntityManager…

:shock:

7 Respostas

G

Isso o Lucas e o Paulo podem te responder com 100% de certesa. Mas vou dar meu pitaco.

Como o vraptor não reinventa a roda (a idéia é usar o que já tem de cada API), creio que ele usa o comportamento padrão do EntityManager. Lembre-se que o entity-manager não é thread-save, e o ciclo de vida dele é morrer conforme o ciclo da aplicação.

Creio que o problema que você escreveu você não tenha aqui, pois o entity-manager é único e compartilhado em todas as threads; e ela não é fechada conforme acaba o seu ciclo de execução.

Abraços

Lucas_Cavalcanti

Na verdade, o EntityManagerFactory é único, o EntityManager é como se fosse a Session…

Vc está usando o EntityManager via algum plugin do vraptor2? se sim, provavelmente ele é aberto no começo da requisição e fechado no final…

PS: já considerou usar o vraptor 3? http://vraptor.caelum.com.br

renanpto

Lucas Cavalcanti:
Na verdade, o EntityManagerFactory é único, o EntityManager é como se fosse a Session…

Vc está usando o EntityManager via algum plugin do vraptor2? se sim, provavelmente ele é aberto no começo da requisição e fechado no final…

PS: já considerou usar o vraptor 3? http://vraptor.caelum.com.br

Estou usando o plugin do VRaptor sim. Então não conseguirei utilizar o EntityManager dentro de uma Thread por exemplo ?

O projeto é feito usando a versao 2 do vraptor, somente por isso.

Lucas_Cavalcanti

o injetado pelo vraptor provavelmente não…

mas se esse plugin injetar a EntityManagerFactory, vc pode abrir (e fechar) uma nova EntityManager dentro dessa outra thread…

renanpto

Lucas Cavalcanti:
o injetado pelo vraptor provavelmente não…

mas se esse plugin injetar a EntityManagerFactory, vc pode abrir (e fechar) uma nova EntityManager dentro dessa outra thread…

Há algum problema se eu instanciar o EntityManagerFactory dentro da Thread ? Não usando o injetado pelo VRaptor ?

EntityManagerFactory factory = Persistence.createEntityManagerFactory("default");
	EntityManager entityManager = factory.createEntityManager();

Pensei em instanciar o EntityManagerFactory dentro da Thread, pois a thread nem conhece a logic que a chamou e usar o injetado pelo VRaptor exigirá muita refatoracao nas classes para passar o objeto até a classe que realmente precisa dele.

obs: o bloco de codigo que usa o EntityManagerFactory e EntityManger… será executado em especificas situações, pois a thread estará executando dai ocorrreu uma exceção, ai entra meu codigo para registrar o erro em uma tabela especifica.

Abraço

Lucas_Cavalcanti

só tome cuidado, pois criar uma entityManagerFactory eh uma operação custosa (lê arquivos, cria a configuração, etc) vc não deveria fazer isso várias vezes durante a aplicação… vc deveria fazer uma só.

renanpto

Entendo…

Não sei se terei problemas com esse detalhe, pois esse bloco de código será executado raramente.

O jeito é colocar pra teste e esperar para ver se aparece alguma surpresinha. hehehe

Caso apareca algum problema, terei que fazer da forma que comentou.

Obrigado.

Criado 14 de janeiro de 2010
Ultima resposta 14 de jan. de 2010
Respostas 7
Participantes 3