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.
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
Obrigado. Posso sim, vou postar algo sobre Servlets nos próximos posts.
Valeww.
Bruno Rota,
Excelente post, contudo se vc pudesse postar algo parecido na forma de um crud, ficaria melhor ainda.
Parabéns!
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é +.
Bom tutorial Bruno poderia so me dizer qual a função do @PersistenceContext
Obrigado. Que bom que gostou.
O EntityManager anotado com a annotation @PersistenceContext eu faço com que o EntityManager seja gerenciado pelo container.
Até +.
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!
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é +
É 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
Otimo post!!! Um pedido, vc poderia realizar um post mostrando como realizar lookup do EJB. Acho que seria um otimo 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é +
Cara, muito bom esse post. Eu estava precisando justamente disto. Muito obrigado!!!!
Opa Adriano
Que bom que gostou.
Abraços.
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!!!!
Amigo, tem sim, é até mais facil, pois você pode fazer pelo console do jboss, para isso basta você copiar e colar o driver jdbc dentro da pasta deployments, e acessar o console e seguir os passos de criação do datasource, nesse post tem um exemplo http://www.brunorota.com.br/blog/configurar-jaas-com-banco-de-dados-no-jboss-7-parte-1/.
Espero que ajude.
Abraços
SHOWWWWWWWWWWWW!!
Opa Charles
Que bom que ajudou
Abraçoss
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?
Você está usando a mesma versão do JBoss?
Você criou o projeto EAR e ligou o empacotou o WEB e o EJB dentro dele tbm?