domingo, 6 de janeiro de 2008

Obtendo um EntityManager

Obtendo um EntityManager

No Java SE, os gerenciadores de entidades são criados usando um javax.persistence.EntityManagerFactory. Embora de podermos utilizar a interface factory no Java EE, essa plataforma fornece alguns recursos adicionais que tornam mais fácil e menos prolixo gerenciar instâncias do gerenciador de entidades.

*EntityManagerFactory
O EntityManager pode ser criado ou obtido de uma EntityManager Factory. Em um aplicativo Java SE, você precisa utilizar uma EntityManagerFactory para criar instâncias de um EntityManager. Utilizar o criador de instâncias (factory) não é um requisito no Java EE.
Os métodos createEntityManager() retornam instâncias EntityManager que gerenciam um contexto de persistência estendido distinto. Você pode passar um parâmetro java.util.Map para sobrescrever ou estender quaisquer propriedades específicas de provedor no qual não esta declarado no arquivo persistence.xml. Depois de terminar de utilizar a EntityManagerFactory, você deve usar close() para fechá-la (a menos que ela seja injetada). O método isOpen() permite verificar se a referência EntityManagerFactory continua válida.

*Obtendo uma EntityManagerFactory no Java SE
No Java SE, a classe javax.persistence.Persistence é responsável pela inicialização de um EntityManagerFactory.
A classe javax.persistence.Persistence procura os descritores de implantação persistence.xml dentro de seu caminho de classe Java. O parâmetro do tipo String que deve ser passado permite que a implementação Persistence localize uma EntityManagerFactory que corresponde com o nome dado.

No Java SE, é recomendável usar close() para fechar a EntityManagerFactory. Isso libera todos os recursos mantidos pela factory.

*Obtendo uma EntityManagerFactory no Java EE
No Java EE, é um pouco mais fácil obter uma EntityManagerFactory. Ela pode ser injetada diretamente em um campo ou método setter dos seus EJBs utilizando a anotação @javax.persistence.PersistenceUnit.
O unitName() é a identidade da PersistenceUnit. Quando a PersistenceUnit é utilizada, além de injetar a EntityManagerFactory, ela também registra uma referência a si própria dentro do JNDI ENC do EJB. O contêiner EJB é responsável por avisar a anotação @PersistenceUnit e injetar a factory correta.
Diferentemente do Java SE, um EntityManagerFactory injetada é automaticamente fechada pelo contêiner EJB quando a instância é descartada. Na realidade, se você chamar close() em uma EntityManagerFactory injetada, será lançada uma IllegalStateException.

Qualquer duvida, mande um email para leurimar.lins@gmail.com

sexta-feira, 19 de outubro de 2007

Introdução JPA

Bom galera, vou iniciar uma uma série de postagens falando sobre Jpa (Java Persistence API - EJB 3.0), começando da introdução (no qual esta postagem se refere) até os niveis de relacionamentos de entidades...
Espero que seja de bom proveito a todos...e qualquer dúvida, estarei disposto a tirá-la.
...



O que é JPA ?

A Java Persistence API define uma maneira de mapear objetos java simples e comuns (plain old Java objects - POJOs) para um banco de dados. Esses objetos são chamados de beans de entidade. É como qualquer outra classe Java, exceto pelo fato de serem mapeados, utilizando metadados da JPA -@ (anotacao) - para um determinado banco de dados. Portanto, eles podem ser inseridos e carregados a partir de um banco de dados sem que o desenvolvedor escreva nenhum código de conexão JDBC. A JPA também define uma linguagem de consulta que tem recursos que fazem um paralelo com o SQL, mas são personalizados para trabalhar com objetos Java em vez de com um esquema relacional bruto.
Primeiro Passo - Desenvolvendo um bean de entidade.
Bom, vamos implementar uma entidade simples, denominada Person (Pessoa). Esta entidade encapsula os dados de uma pessoa. (exemplo simples, para ter maior entidemento...porém apartir de cada postagem iremos implementar exemplos mais complexos)
Ao desenvolver um bean de entidade, tudo que precisamos definir é a classe bean. As entidades na JPA são objetos Java simples anotados com os metadados de mapeamento. Definindo a entidade Person...

@Entity //anotacao obrigatória para qualquer entidade
@Table(name = "Person") //nome da tabela no BD
public class Person implements Serializable {
@Id // definindo um id
@Column(name = "Id") // nome da coluna no BD
@GeneratedValue(strategy = GenerationType.SEQUENCE) //id incremental (no postgre usasse SEQUENCE, no mySql usa IDENTITY)
private int id;

@Column(name = "Name") //nome da coluna no BD
private String name;

@Column(name = "Cpf") //nome da coluna no BD
private String cpf;

@Column(name = "age") //nome da coluna no BD
private int age;
...metodos getters e setters...
}
Bom pessoal, na próxima postagem, irei continuar com a introdução ao JPA,
mostrando o arquivo de configuração JPA, denominado persistence.xml.
Bons estudos...
Leurimar Lins