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…
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…
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.