Netbeans está se tornando cada vez mais, frente ao Eclipse, uma ferramenta comercial e de fácil uso. Apesar disso, não há uma forma simples ou clara (um botão, uma opção na lista de projetos) de gerar um projeto JPA. Nesse post eu busco, de uma forma simplista e prática, mostrar o passo-a-passo de como se deve fazer.

Tenho que dizer que esse post está levando em consideração que você já tem alguns conhecimentos básicos de JPA, e por que não dizer também de NetBeans? Mas se você quiser ter mais conhecimentos sobre esses assuntos leia na página de minha disciplina Tecnologias Web.

Bem, vamos ao que interessa. Para motivar a criação desse passo-a-passo, irei me basear num mini-projeto. Trata-se de um modeo de gerência de mensagens, tipo blogs, onde podemos ter uma mensagem com nenhum ou vários comentários. O diagrama de classes, sem muitos detalhes, seria:

Diagrama de classes de Mensagens

Diagrama de classes de Mensagens

A partir deste modelo iremos gerar nossa aplicação.

Passos para configurar um projeto JPA/EJB no Netbeans.

  1. Gere um projeto java no Netbeans:
Gerando projeto no Netbeans

2. Dê um nome ao projeto. Aqui, MensagensJPANB:

3. Com botão direito em cima do projeto -> Properties, vamos definir as bibliotecas do JBoss a serem usadas no projeto. Entre elas estarão as bibliotecas do Hibernate e do EJB.

[imagem]

4. Clique em Add Library … -> Create … e dê um nome a essa biblioteca (JBoss4.2.2). Escolha a opção Server Library e Ok.:

[imagem]

5. Acrescente todas as bibliotecas que estão em JBOSS_HOME/server/default/lib. Se precisar fazer algum cliente standalone, é necessário acrescentar também as bibliotecas de JBOSS_HOME/lib:

[imagem]

6. Acrescente a biblioteca e depois ok.

Implementando e configurando o projeto Mensagens

Agora estamos prontos para definirmos nossas classes JPA. Vamos criar as classes e logo após configurar o persistence.xml.

1. Crie uma classe chamada Mensagem, da seguinte forma: botão direito em cima do pacote -> New … -> Entity Class …

2. Dê o nome de Mensagem e defina o tipo da chave primária. Você pode clicar em Create Persistence Unit … Isso fará com que o netbeans crie o arquivo persistence.xml (arquivo que define as configurações JPA). Não faremos isso pois iremos definir nosso persistence.xml na mão. A classe Mensagem ficará da seguinte forma:


package com.gugawag.jpa.mensagens;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table (name="TB_MENSAGEM")
public class Mensagem implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer codigo;   
    private String texto;

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="mensagem")
    private List<Comentario> comentarios;

    public Mensagem(Integer codigo, String texto) {
        this.codigo = codigo;
        this.texto = texto;
        comentarios = new ArrayList<Comentario>();
    }

    public Mensagem() {
        this(null, null);
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public List<Comentario> getComentarios() {
        return comentarios;
    }

    public void setComentarios(List<Comentario> comentarios) {
        this.comentarios = comentarios;
    }

    public void acrescentaComentario(Comentario comentario){
        this.comentarios.add(comentario);
    }            

    public String getTexto() {
        return texto;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }    

}

e a classe Comentario, que você deve fazer clicando botão direito em cima do pacote -> New … -> Java Class … ficará assim:


package com.gugawag.jpa.mensagens;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Comentario implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer codigo;
    private String texto;

    @ManyToOne
    private Mensagem mensagem;

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public Mensagem getMensagem() {
        return mensagem;
    }

    public void setMensagem(Mensagem mensagem) {
        this.mensagem = mensagem;
    }

    public String getTexto() {
        return texto;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }

}

3. Crie uma pasta em Source Packages com o nome META-INF. É nessa pasta que ficará o arquivo persistence.xml.

4. Crie um arquivo chamado persistence.xml nessa pasta e coloque o seguinte código, que define uma unidade de persistência de nome MensagensPU:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="MensagensPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.connection.url" value="jdbc:hsqldb:/Users/gugawag/jboss/server/default/data/hypersonic/localdb "/>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>      
    </properties>
  </persistence-unit>
</persistence>

Criando novas mensagens

Há várias formas de se comunicar com o EntityManager do JPA para criar novas Mensagens e Comentários. Uma delas é usando JSF. Como esse post não trata disto, iremos fazer um programa que criar novas mensagens e iremos ver o resultado nas tabelas do Hypersonic.

1. Crie uma classe chamada ClienteMensagens com um método main. Ela deve ficar assim:


package com.gugawag.jpa.mensagens;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.EntityManager;

public class ClienteMensagens {
    public static void main(String args[]){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("MensagensPU");
        EntityManager em = emf.createEntityManager();

        Mensagem mensagem = new Mensagem();
        mensagem.setTexto("Olá mundo!");

        em.persist(mensagem);
        em.close();
    }

}

2.Crie um arquivo chamado jndi.properties na raiz do Source Packages. Esse arquivo define onde encontrar o serviço JNDI do JBoss, onde está definido o datasource DefaultDS do Hypersonic (pré-definido pelo JBoss no arquivo JBOSS_HOME/server/default/deploy/hsqldb-ds.xml. Ela deverá ficar assim:


java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost

3.Inicie o JBoss.

4. Exporte o arquivo .jar do seu projeto MensagensJPANB para o diretório JBOSS_HOME/server/default/deploy/ da seguinte forma: botão direito em cima do projeto -> Properties -> Build -> Packaging dê o nome do arquivo jar file  MensagensJPANB.jar. Você pode já dizer nesse momento onde ele será salvo (de preferência no diretório JBOSS_HOME/server/default/deploy/MensagensJPANB.jar) ou depois você copia esse arquivo.

5. Dê um Clean and Build no projeto.

6. Execute a classe ClienteMensagens

Visualizando os resultados no banco

1. Vá para o diretório JBOSS_HOME/server/default/lib e execute o comando:

java -cp hsqldb.jar org.hsqldb.util.DatabaseManager

2. Escolha em Type: HSQL Database Engine Standalone e na url coloque jdbc:hsqldb:file:/JBOSS_HOME/server/default/data/hypersonic/localdb. Lembre-se de trocar o JBOSS_HOME pelo diretório onde foi instalado o seu JBoss.

[imagem]

3. Clique em ok.

4. Na área de consulta digite select * from TB_MENSAGEM e clique em execute:

[imagem]


xxx. Para que não hava dúvidas de onde os arquivos devem estar, veja a imagem abaixo:

[imagem árvore projeto]

Anúncios