Exemplo JPA+JBoss+Eclipse


Nesse post eu vou mostrar como rodar o JPA no JBoss 6, utilizando a IDE Eclipse.

Eu vou utilizar o banco de dados PostgreSQL 8.4 você pode baixar ele aqui.

Eu fiz um tutorial para instalar e configurar o JBoss 6, clique aqui para acessar.

Para você ver como instala o JBoss 6 no eclipse clique aqui.

Vamos lá.

Para você configurar o JPA, você precisa do driver JDBC do PostgreeSQL 8.4, para baixar ele clique aqui.

Baixando o driver, você precisa copiar o driver para a pasta (Pasta do JBoss 6)jboss-6.0.0.Finalserverdefaultlib.

Pronto.

O próximo passo é criar um banco de dados com o nome cadastro no banco de dados PostgreSQL 8.4.

Com o banco criado agora nós precisamos configurar o datasource que conterá informações de configuração do banco de dados.

O próximo passo é criar um DataSource que conterá informações sobre o banco de dados , para que sua aplicação possa acessar o banco de dados.

Na pasta (Pasta do JBoss 6)jboss-6.0.0.Finalserverdefaultdeploy, crie um arquivo postgres-ds.xml e digite os códigos abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>cadastroDS</jndi-name>
<connection-url>jdbc:postgresql://localhost:5432/cadastro</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<user-name>postgres</user-name>
<password>root</password>
</local-tx-datasource>
</datasources>

No meu caso o meu usuário do Postgre é postgre e minha senha é root, caso suas configurações forem diferentes favor modificar os dados conforme necessário.

A pasta deploy ficará como a imagem abaixo:

Com a base de dados criada e o datasource também é hora de partimos pra nossa aplicação.

Eu vou usar EJB para que o servidor gerencie o EntityManager, então caso você não sabe como criar Stateless Session Bean, eu fiz um tutorial, para acessá-lo clique aqui.

Vamos lá.

Crie um EJB Project chamado cadastroEJB.

Dentro da pasta META-INF crie um arquivo persistence.xml e digite o código abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_2_0.xsd"
version="2.0">
<persistence-unit name="cadastro" transaction-type="JTA">
<jta-data-source>java:/cadastroDS</jta-data-source>

<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<!-- <property name="hibernate.hbm2ddl.auto" value="validate"/>-->
<property name="hibernate.show_sql" value="true" />
<!-- property name="hibernate.format_sql" value="true" /-->
<property name="hibernate.use_sql_comments" value="true" />
<property name="hibernate.jdbc.batch_size" value="1000" />
<property name="hibernate.generate_statistics" value="true" />
</properties>
</persistence-unit>
</persistence>

Crie uma classe no pacote br.com.entidades chamada Pessoa e digite o código abaixo:

package br.com.entidades;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Pessoa {

@Id
@GeneratedValue
private int id;

private String nome;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}
}

Agora vamos criar o nosso bean que irá fazer o cadastro da pessoa no banco.

Crie um Stateless Session Bean chamado CadastroBean no pacote br.com.beans com uma interface local chamada CadastroBeanLocal e digite os códigos abaixo.

CadastroBeanLocal

package br.com.beans;
import javax.ejb.Local;

@Local
public interface CadastroBeanLocal {

public void gravar();
}

CadastroBean

package br.com.beans;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import br.com.entidades.Pessoa;

@Stateless
public class CadastroBean implements CadastroBeanLocal {

@PersistenceContext
EntityManager em;

public CadastroBean() {

}

@Override
public void gravar() {

Pessoa p = new Pessoa();
p.setNome("Etelvino");

em.persist(p);
}

}

Pronto, o nosso projeto EJB com o código que irá gravar uma pessoa no banco através do JPA está pronto. O seu projeto deve ficar assim:

Agora vamos criar o nosso projeto WEB para executar o nosso método que faz a operação de inserção no banco.

Crie um Dinamic Web Project com o nome cadastroWEB e faça referência do projeto cadastroEJB para que o projeto web tenha acesso as classes do projeto EJB, isso foi mostrado no tutorial que eu informei acima.

No projeto cadastroWEB crie um servlet no pacote br.com.servlets chamado CadastroServlet e digite o código abaixo:

package br.com.servlets;

import java.io.IOException;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.beans.CadastroBeanLocal;

@WebServlet("/CadastroServlet")
public class CadastroServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@EJB
CadastroBeanLocal cadastroBean;

public CadastroServlet() {
super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

cadastroBean.gravar();
}

}

Pronto criamos o Servlet que irá executar o nosso método de inserção.

No mesmo projeto cadastroWEB na pasta WebContent crie uma página html chamada cadastro.html e digite o código abaixo:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Exemplo JPA</title>
</head>
<body>

<h2> Clique no botão OK para executar seu primeiro exemplo de JPA</h2>

<form action="CadastroServlet" method="post">
<input type="submit" value="OK" />
</form>
</body>
</html>

Pronto. Agora só falta empacotar nossas aplicações em um projeto EAR.

Crie um projeto EAR com o nome cadastroEAR, o projeto EAR conterá nossos projetos cadastroEJB e cadastroWEB. Tem um tutorial informado acima que ensina como criar um projeto EAR.

Ao final, todos os projetos devem estar assim:

Exporte o projeto cadastroEAR para a pasta (Pasta do JBoss 6)jboss-6.0.0.Finalserverdefaultdeploy conforme foi explicado no tutorial informado acima.

Execute o JBoss 6.

Acesse a página http://localhost:8080/cadastroWEB/cadastro.html e clique no botão OK.

Veja no banco de dados cadastro a tabela que criou com o dado adicionado.

Pronto você acabou de executar seu primeiro exemplo de JPA.

No próximo post eu vou mostrar alguns comandos do JPA.

Qualquer erro, ou dúvida podem me contatar através dos comentários.

Até o próximo post.

19 ideias sobre “Exemplo JPA+JBoss+Eclipse

  1. Michel

    Ola, muito bom o seu post, apesar de estar fazendo o curso de Java Starter pela t2ti e estar ainda no modulo 4.
    eu tenho um pedido a fazer, sera que você postar alguns tópicos introdutórios sobre Servelets, Applets e scripts Java.
    desde ja muito obrigado

    Responder
  2. Reginaldo Silva

    Bruno Rota,
    Excelente post, contudo se vc pudesse postar algo parecido na forma de um crud, ficaria melhor ainda.

    Parabéns!

    Responder
    1. brunorota Autor do post

      Opa Reginaldo, que bom que gostou.

      A idéia é essa, no próximo post sobre JPA, eu vou implementar esse projeto com operações de inserção, update, delete, e buscas.

      Até +.

      Responder
    1. brunorota Autor do post

      Obrigado. Que bom que gostou.

      O EntityManager anotado com a annotation @PersistenceContext eu faço com que o EntityManager seja gerenciado pelo container.

      Até +.

      Responder
  3. Amanda

    Muito Bom tutorial, mas precisava de uma ajuda na parte de banco de dados, quando sendo oracle, testei aqui e da erro “Deployment “jboss.jca:name=oracleDS,service=DataSourceBinding” is in error due to the following reason(s): ** NOT FOUND Depends on ‘jboss.jca:name=oracleDS,service=DataSourceBinding’ ** “..

    Eu criei os projetos certinho, de EJB, EAR, e o WEb o meu no caso é com JSF, não o servlet no caso, mas o erro me da no banco, se puder ajudar, obrigada!

    Responder
    1. brunorota Autor do post

      Humm. Mais para o banco oracle vc tem que colocar o driver da oracle lá em vez do postgres, tem que alterar as configurações do datasource.

      O nome do arquivo datasource SEMPRE tem que terminar com -ds. Ex: ORACLE_DATASOURCE-ds.xml
      Passa o nome do seu datasource e o conteúdo dele.

      Nunca trabalhei com banco oracle mas creio eu que seja a mesma coisa.

      Passa esses dados que eu te pedi que eu tento ajudar.

      Obrigado. até +

      Responder
      1. Amanda

        É eu coloquei driver, já tinha na minha pasta deploy, exatamente com esse nome oracle-ds.xml, a configuração dele seria assim:


        OracleDS
        oracle.jdbc.driver.OracleDriver
        jdbc:oracle:thin:@local:1521:banco
        projeto
        projeto

        Mis ou menos isso o meu persistence.xml ta assim:

        java:/oracleDS
        br.facas.modelo.Pessoa

        Obrigada..continuando dando o mesmo erro valeu

        Responder
    1. brunorota Autor do post

      Obrigado Paulo.

      Pode deixar, assim que eu tiver um tempinho livre eu faço um post de como realizar um lookup, porém não a necessidade, você pega a referência para um session através de injeção. É bem mais produtivo.

      Até +

      Responder
  4. Adriano Henrique de Souza da Silva

    Olá Bruno, tudo bem sou eu de novo Adriano. Gostei muito deste post e gostaria de perguntar se tem como configurar um DataSource no JBoss 7 ou superior, com a facilidade que configura-se o JBoss 6. Ainda não entendo porque dificultar a configuração dessa parte tão essencial da aplicação, você não acha? Muito obrigado pelo post cara!!!!

    Responder
  5. Vinicius

    Bruno, ao executar seu exemplo estou recebendo o erro:

    JBAS011440: Não foi possível encontrar uma unidade de persistência nomeada null no subdeployment “cadastroEJB.jar” of deployment “cadastroEAR.ear”

    Se faço a alteração abaixo:
    @PersistenceContext(unitName=”cadastro”)
    EntityManager em;

    Dá o mesmo erro, só que sem o null:
    JBAS011440: … persistência nomeada cadastro …

    *o persistence.xml está identico ao seu.

    Tem alguma idéia do que pode ser?

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *