Duvida EntityManager - Persistence Context

3 respostas
gibaholms

Olá pessoal… estava dando uma estudada em JPA e JTA, e fiquei com uma duvida…

Se eu injeto uma EntityManager com contexto de persistencia extendido:

@PersistenceContext(unitName=?teste?, type=PersistenceContextType.EXTENDED)
private EntityManager manager;

Isto significa que a entidade permanecerá acoplada durante toda a duração do bean, certo. Então, se um cliente chama um método que contém uma demarcação de transação JTA, e este método faz um find e retorna uma entidade…

essa entidade que retorna eu posso serializar na rede e devolver ela direto ? ela será um POJO ou ela ainda está acoplada ?

3 Respostas

L

Primeiro: o contexto de persistência EXTENDED só pode ser usado com Stateful Session Beans (SFSB). Nesse tipo de Bean, um dos métodos será anotado com @Remove que, literalmente, será o último método a ser executado; pois, depois da execução deste, o container se encarregará de terminar o contexto de persistencia para esse bean e de remover o bean da memória, não sendo possível mais acesá-lo.

Não se deve usar EXTENDED para nenhum outro tipo de objeto.

Acoplamento refere-se ao estado das classes antes da execução, não como são os objetos em runtime. Uma entidade é POJO, estando em sincronia com o JPA ou não. O que acontece é que as entidades retornadas não estarão em “detached”, mas isso não impede sua serialização. Claro, na desserialização, os objetos estarão como “detached”, mas até aí, normal.

gibaholms

Entendi… e eu preciso implementar algum código no @Remove para liberar o contexto ? Ou o contexto é liberado pelo container ?

L

A anotação é tudo o que você precisa. O contexto é eliminado automaticamente pelo container.

Criado 16 de janeiro de 2009
Ultima resposta 16 de jan. de 2009
Respostas 3
Participantes 2