Esse post tem por finalidade configurar um ambiente de desenvolvimento para o JEE 6, utilizando a tecnologias:

e mostrar ao final o desenvolvimento de um servlet.

Tomo como padrão que se tenha instalado jdk 6 ou superior. Se você não o tem baixar aqui.

JBoss 7

Esta versão do JBoss vem por padrão com a configuração lightning, iniciando apenas os serviços básicos e fazendo com que os outros sejam executados sob demanda. O resultado disso é um startup muito rápido, em torno dos 4s, dependendo do computador. Para saber mais sobre essa versão do JBoss, clique aqui.

Para instalar o JBoss, basta baixá-lo em Servidor de Aplicação JBoss 7 versão comunidade e descompactá-lo (é independente de sistema operacional). Sugiro criar um pasta java em seu computador e descompactá-lo lá.

Para executar o JBoss pela linha de comando:

  • cd [pasta_jboss]/bin
  • standalone.bat (windows) ou ./standalone.sh (mac e linux)
Uma tela típica de início do JBoss é similar à de abaixo. Perceba que existe uma linha, ao final, informando o tempo de start do JBoss. Para ver a tela de boas vindas do JBoss no browser, digite na url: http://localhost:8080/ (se você deixou como padrão a porta 8080).
Após instalarmos o Eclipse Indigo vamos aprender a executar o JBoss por dentro dele.

Eclipse Indigo (3.7)

Baixe o Eclipse em IDE Eclipse Indigo (3.7) para desenvolvedores JEE. Escolha a versão correspondente ao sistema operacional. Execute o instalador.

JBoss Tools 3.3

Execute o Eclipse.



  • escolha na lista Work With: o JBoss Tools
  • escolha a opção All JBoss Tools 3.3

  • clique em next, aceite os termos da licença e vá clicando next até a conclusão da instalação. Dependendo da velocidade de sua rede pode demorar alguns minutos. Ao final, será preciso reiniciar o Eclipse

Acrescentando o JBoss ao Eclipse

  • clique em Windows -> Show View -> Servers
  • clique com o botão direito na área dos servidores e clique em New -> Server
  • escolha a opção JBoss AS 7.0 e clique em Next
  • em Home Directory escolha a pasta de instalação do seu JBoss (se vc seguiu minha recomendação, deverá estar em c:\java\[pasta_jboss]
  • Clique em Finish
Perceba que na aba Servers haverá o jboss que você inseriu, podendo ser executado pelo botão de Run (bola verde ao lado de um besouro no canto direito [este serve para executar o JBoss em modo debug]).

Primeira aplicação Web JEE 6

Para criar um projeto web no Eclipse:

  • clique em File -> New -> Project….
  • na opção web, escolha Dynamic Web Project
  • clique em Next
  • dê um no nome ao seu projeto e clique em Finish


Para criarmos um servlet (soma entre dois números), nesta versão do JEE ficou bem mais fácil, já que foram desenvolvidas várias anotações para diminuir a quantidade de configurações no web.xml.
Como boa prática, crie um pacote na pasta src em Java Resources do seu projeto. No meu caso criarei o pacote com.gugawag.aulas.servlets. Clique com o botão direito em cima dele e clique em New -> Servlet.
  • Dê um nome à classe do servlet. Costumo dar o nome com o sufixo Servlet
  • clique em Next
  • clique no URL Mapping (como seu servlet será chamado na URL) e edite o /SomaServlet
  • mude para /soma.do (isso não muda o servlet. Apenas padroniza a forma de chamá-los. Use o prefixo da sua escolha. Uso normalmente .do)
  • clique em Next
  • dos métodos a serem sobrescritos, deixe marcado apenas o doGet
  • clique em Finish
No método doGet, insira as linhas abaixo:
int numero1 = Integer.parseInt(request.getParameter("numero1"));
 int numero2 = Integer.parseInt(request.getParameter("numero2"));

PrintWriter out = response.getWriter();

out.write("A soma desses números é: " + (numero1 + numero2));

O Servlet deve ficar como mostrado na figura abaixo. Perceba o uso da anotação @WebServlet. É nela que se define como o seu servlet será chamado na url (/soma.do), o URL Mapping como visto em passo anterior.

Para executar esse sistema, clique com o botão direito em cima do projeto -> Run as -> Run on server. Um browser interno do eclipse aparecerá. O eclipse irá implantar o sistema (.war) no JBoss. Para ver o resultado desta implantação, olhe o log da aba Console. Se o JBoss ainda não estiver executando, o eclipse fará o trabalho.

Para testar o servlet, na área de url do browser do eclipse, ou de um browser a sua escolha, digite:

http://localhost:8080/ExemplosServlets/soma.do?numero1=10&numero2=5

Troque nesta url o nome do projeto ExemplosServlets pelo nome do projeto que você escolheu. Altere os valores passados para os parâmetros numero1 e numero2 a sua escolha. Um resultado similar à imagem abaixo deve aparecer.

Neste link você pode baixar o projeto no Eclipse deste servlet.

Anúncios

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]