From 9c3cb596dda97c93ebd58a80d3ffb22ef487555f Mon Sep 17 00:00:00 2001 From: Dancovich Date: Thu, 3 Oct 2013 14:18:21 -0300 Subject: [PATCH] issue FWK-123: Revisar e atualizar documentação do Framework 2.4.0 --- documentation/reference/pt-BR/persistencia.xml | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ documentation/reference/pt-BR/properties.xml | 26 ++++++++++++++++++++++++-- documentation/reference/pt-BR/transacao.xml | 2 +- 3 files changed, 200 insertions(+), 3 deletions(-) diff --git a/documentation/reference/pt-BR/persistencia.xml b/documentation/reference/pt-BR/persistencia.xml index 88bb4b3..82a3807 100644 --- a/documentation/reference/pt-BR/persistencia.xml +++ b/documentation/reference/pt-BR/persistencia.xml @@ -18,6 +18,181 @@ é apenas injetar o recurso adequado em seu código e o Framework Demoiselle se encarregará de produzi-lo e configurá-lo. + +
+ JPA + + + O Framework Demoiselle fornece um produtor padrão para contextos de persistência da JPA. Esse produtor lê o arquivo + de configuração persistence.xml de seu projeto e toma as providências necessárias para fabricar uma instância + da classe EntityManager que pode ser usada para gerenciar as entidades de sua aplicação. Além disso, instâncias + de EntityManager produzidas pelo Framework Demoiselle participam automaticamente de transações abertas através da + anotação @Transactional, conforme apresentado no capítulo sobre Transações. + + + + + Para acrescentar a dependência à extensão demoiselle-jpa, adicione esse código + em seu arquivo pom.xml, na seção dependencies. + + + + br.gov.frameworkdemoiselle + demoiselle-jpa + compile +]]> + + +
+ Introdução ao mecanismo + + + Para injetar uma instância de EntityManager em sua aplicação, basta usar a anotação @Inject. + + + @PersistenceController +public class BookmarkDAO extends JPACrud<Bookmark, Long> { + + private static final long serialVersionUID = 1L; + + @Inject + private EntityManager entityManager; + + public void persistBookmark(Bookmark bookmark){ + entityManager.persist(bookmark); + } + +} + + + O produtor padrão injetará o EntityManager configurado no arquivo persistence.xml. Se houver + mais de um contexto de persistência configurado em persistence.xml, será necessário especificar qual será + injetado no ponto de injeção. Para isso use a anotação @Name. + + + @PersistenceController +public class BookmarkDAO extends JPACrud<Bookmark, Long> { + + private static final long serialVersionUID = 1L; + + @Inject + @Name("persistence_unit_1") + private EntityManager entityManager; + + public void persistBookmark(Bookmark bookmark){ + entityManager.persist(bookmark); + } + +} + + + É possível invocar o utilitário Beans para injetar instâncias de EntityManager programaticamente. + + + @PersistenceController +public class BookmarkDAO extends JPACrud<Bookmark, Long> { + + private static final long serialVersionUID = 1L; + + public void persistBookmark(Bookmark bookmark){ + EntityManager entityManager = Beans.getReference(EntityManager.class); + entityManager.persist(bookmark); + } + + public void persistBookmarkInHistory(Bookmark bookmark){ + EntityManager entityManager = Beans.getReference(EntityManager.class , new NameQualifier("history_persistence_unit")); + entityManager.persist(bookmark); + } + +} +
+ +
+ Configuração + + + Alguns comportamentos do produtor podem ser configurados através das propriedades abaixo, que devem ser configuradas + no arquivo demoiselle.properties. + + + + + + + + + + + Propriedade + Descrição + Padrão + + + + + + frameworkdemoiselle.​persistence.​default.​unit.​name + + + Define o nome da unidade de persistência padrão (configurada em persistence.xml) que será injetada + caso a anotação @Name não seja usada. Não é necessário se apenas uma unidade de persistência for configurada. + + + + + + + frameworkdemoiselle.​persistence.​entitymanager.​scope + + + Permite determinar o escopo de unidades de persistência injetadas. Dentro do escopo determinado, todos os pontos + de injeção receberão a mesma instância de EntityManager. + + + Os valores possíveis são: + + request + session + view + conversation + application + noscope + + + + request + + + + + + + + O escopo especial noscope desliga o gerenciamento de escopo de instâncias de EntityManager + produzidas pelo Framework Demoiselle. Isso permite ao desenvolvedor controlar totalmente o ciclo de vida de um + EntityManager injetado e ainda reter o recurso do produtor padrão. + + + Note que ao usar a opção noscope, o desenvolvedor é o responsável por controlar o ciclo de vida do gerenciador + de persistência. Ele não participará de transações JPA abertas através da anotação @Transactional (transações JTA funcionam normalmente) + e multiplos pontos de injeção durante uma requisição receberão múltiplas instâncias de EntityManager. + + + + + + Deve-se usar cautela ao alterar o escopo padrão das instâncias de EntityManager. Na grande maioria dos casos o escopo + padrão request é o suficiente e alterar esse padrão deve ser feito apenas após extensa análise dos prós e contras + de cada escopo. + + + Dê especial atenção aos escopos que podem ser serializados pelo servidor de aplicação (session, view + e conversation) pois a especificação não define o comportamento de instâncias de EntityManager que são + serializadas. + + +
+
diff --git a/documentation/reference/pt-BR/properties.xml b/documentation/reference/pt-BR/properties.xml index a76c6e5..48c92a1 100644 --- a/documentation/reference/pt-BR/properties.xml +++ b/documentation/reference/pt-BR/properties.xml @@ -251,12 +251,34 @@ frameworkdemoiselle.​persistence.​default.​unit.​name - Define a unidade de persistência padrão para aplicações que possuem mais - de um persistence-unit definido no arquivo persistence.xml. + Define o nome da unidade de persistência padrão (configurada em persistence.xml) que será injetada + caso a anotação @Name não seja usada. Não é necessário se apenas uma unidade de persistência for configurada. + + + frameworkdemoiselle.​persistence.​entitymanager.​scope + + + Permite determinar o escopo de unidades de persistência injetadas. Dentro do escopo determinado, todos os pontos + de injeção receberão a mesma instância de EntityManager. + + + Os valores possíveis são: + + request + session + view + conversation + application + noscope + + + + request + diff --git a/documentation/reference/pt-BR/transacao.xml b/documentation/reference/pt-BR/transacao.xml index 95a3603..48b5e62 100644 --- a/documentation/reference/pt-BR/transacao.xml +++ b/documentation/reference/pt-BR/transacao.xml @@ -135,7 +135,7 @@ public class AbacaxiException { Esta estratégia, que está disponível na extensão demoiselle-jpa, delega o controle das transações para o javax.persistence.EntityManager da - especificação JPA. Você deve escolher esta estratégia quando estiver persisteindo dados + especificação JPA. Você deve escolher esta estratégia quando estiver persistindo dados com JPA e utilizando apenas uma base de dados em sua aplicação. Como um EntityManager acessa apenas uma unidade de persistência, não há como fazer o controle transacional de unidades distintas. -- libgit2 0.21.2