Skip to content

Instantly share code, notes, and snippets.

@leandrosilva
Created November 10, 2009 13:16
Show Gist options
  • Save leandrosilva/230884 to your computer and use it in GitHub Desktop.
Save leandrosilva/230884 to your computer and use it in GitHub Desktop.
Algumas dicas avançadas de jpa + ejb3: persistence unit
/**
* (Código 1)
*
* Anotação @PersistenceUnit sendo usada num Stateful SessionBean para registrar
* um EntityManagerFactory no contexto JNDI sob o nome "persistencia/MaritimoDB",
* tendo como unidade de persistencia "MaritimoDB".
*/
@Stateful
@PersistenceUnit(name="persistencia/MaritimoDB", unitName="MaritimoDB")
public class AgenteDeTurismoBean implements AgenteDeTurismoRemote {
@PersistenceUnit(unitName="MaritimoDB")
private EntityManagerFactory maritimo;
...
}
/**
* (Código 2)
*
* Exemplo de lookup desse EntityManagerFactory registrado via @PersistenceUnit.
*
* O root do JNDI context neste caso é "java:comp/env/".
*/
InitialContext jndiContext = new InitialContext( );
EntityManagerFactory maritimo = (EntityManagerFactory)
jndiContext.lookup("java:comp/env/persistencia/MaritimoDB");
/**
* (Código 3)
*
* Outra possibilidade é registrar mais de uma EntityManagerFactory.
*/
@Stateful
@PersistenceUnits({
@PersistenceUnit(name="persistencia/MaritimoDB",
unitName="MaritimoDB"),
@PersistenceUnit(name="Clientes",
unitName="ClientesDB")
})
public class AgenteDeTurismoBean implements AgenteDeTurismoRemote {
@PersistenceUnit(unitName="MaritimoDB")
private EntityManagerFactory maritimo;
@PersistenceUnit(unitName="ClientesDB")
private EntityManagerFactory clientes;
...
}
/**
* (Código 4)
*
* Exemplo de lookup dos dois EntityManagerFactory registrados vias @PersistenceUnits.
*
* Como visto acima, o root do JNDI context neste caso é "java:comp/env/".
*/
InitialContext jndiContext = new InitialContext( );
EntityManagerFactory maritimo = (EntityManagerFactory)
jndiContext.lookup("java:comp/env/persistencia/MaritimoDB");
EntityManagerFactory clientes = (EntityManagerFactory)
jndiContext.lookup("java:comp/env/Clientes");
/**
* (Código 5)
*
* Um outro ponto é que unidades de persistencia tem escopo:
*
* - quando são definidas em um arquivo WAR ou EJB-JAR, só podem ser vistas e
* usadas por classes dentro destes arquivos;
* - quando são definidas em um arquivo WAR ou EJB-JAR empacotados em um EAR,
* podem ser vistas por qualquer classe em qualquer destes arquivos. O escopo
* torna-se o arquivo EAR.
*
* Muito raramente você teria, por exemplo, duas unidades de persistencia com o
* mesmo nome, uma no arquivo WAR e outra no arquivo EJB-JAR. Neste caso, EJB3
* te dá a possibilidade de dizer exatamente qual a unidade de persistencia que
* você quer usar.
*/
@PersistenceUnit(unitName="vendas.jar#VendasDB")
EntityManagerFactory vendas;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment