Você está na página 1de 23

Silvnio Jnior

Desenvolvimento de Sistemas Home Desenvolvimento Java

Home > Desenvolvimento Java, Engenharia de Software, Testes automatizados > Tutorial JSF 2 + Primefaces + EJB 3 + JPA + GlassFish 3.1.1

Tutorial JSF 2 + Primefaces + EJB 3 + JPA + GlassFish 3.1.1


fevereiro 23, 2012 Silvnio Jnior Deixe um comentrio Go to comments Para esse tutorial vamos utilizar: Eclipse Indigo > http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigosr2-rc3 Glassfish 3.1.1 > http://glassfish.java.net/downloads/3.1.1-final.html Primefaces -> ltima verso estvel do primefaces primefaces3.1.1.jar(23/02/2012) http://www.primefaces.org/downloads.html EJB 3, Defult no Glassfish. JPA 2, Defult no Glassfish. JSF 2(Mojarra), Defult Glassfish. 1) Criando o projeto:

Crie um EJB Project (Boto direito -> new -> EJB Project)

Insira um nome para o projeto e v em new Runtime -> Glassfish 3.1 ->Click em Next e defina o GlassFish da seguinte forma: Escolha o jdk em que ir trabalhar e em Application Server Directory selecione o Glassfish: %caminho%+glassfish3.1.1/glassfish (diretrio onde est localizado seu glassfish v em glassfish-3.1.1/glassfish).

Aps clicar em finish, marque o checkBox para adicionar o projeto EAR, veja imagem abaixo:

Aps selecionar clique em Next at chegar em:

Escolha um nome para o Projeto Cliente no caso ProjetoEjbClient (Contrato para acessar os EJBs). Clique em Finish. 2) Criando o Projeto Web Crie um Dynamic Web Project :

Clique em Next, marque o checkBox Generate Web.xml deployment descriptor e para finalizar clique finish.

Vamos adicionar o projetoEjbClient dentro do ProjetoWeb, ou seja para acessar os Ejbs o projeto web precisa conhecer apenas as interfaces (Contratos). Clique com o boto direito no ProjetoWeb -> Properties -> Java Build Path -> Projects -> add Marque o ProjetoEjbClient e clique em OK :

Clique em Ok para finalizar. 3) Configurando o JSF 2.0 e o Primefaces Clique com o boto direto no projeto ProjetoWeb -> properties -> project Facets e marque a opo Java server faces version 2.0:

Aps selecionar JavaServer Faces clique em Futher configuration required e siga os seguintes passos:

Aps fazer esses procedimentos clique em OK, no formulrio de baixo Clique e Apply e em OK novamente. Vamos adicionar a biblioteca do primefaces no projeto: http://www.primefaces.org/downloads.html , baixe a verso primefaces-3.1.1.jar . Adicione a biblioteca dentro de: /ProjetoWeb/WebContent/WEB-INF/lib depois adicione no Build Path : boto direito do mouse encima de primefaces-3.1.1.jar ->Build Path -> add Build Path. Agora vamos adicionar o servidor no eclipse, vai em Servers -> boto direito -> new -> Server-> escolha o Glassfish 3.1, caso no aparece o Glassfish v em Download aditional Server adapters e baixe o plugin do Glassfish.

Aps Selecionar o GlassFish 3.1.1 clique em Add.. escolha o JDK e selecione a pasta de localizao do Glassfish:

Depois Next->Next->Finish -> ainda no adicione o ProjetoEjbEAR no Server. 4) Criando o banco de dados Baixe o jar do mysqlConnector mysql-connector-java-5.1.13-bin

Copie o jar para : %caminhoGlassfish%\glassfish-3.1.1\glassfish\lib Crie um banco com o nome tutorial, no insira nenhuma tabela(vamos inserir atravs de mapeamento no java). Rode o glassfish que est no eclipse (sem aplicao, ou seja tira a nossa aplicao do servidor). Entre com o seguinte endereo no browser. http://localhost:8080 Aps entrar, no menu v em JDBC->JDBC Connection Pools -> New. Preencha os campos como o exemplo: Pool Name : tutorial Resource Type: javax.sql.connectionPoolDataSouce Dababase Driver Vendor: MySql Clique em Next-> Em Additional Properties (199) preencha os seguintes campos: DatabaseName: tutorial User: usuario do seu banco ex:root Password:senha do seu banco ex:root Servername:servidor onde encontra o banco no caso do tutorial localhost URL:jdbc:mysql://localhost:3306/tutorial url:jdbc:mysql://localhost:3306/tutorial Aps esses passos clique em finish e teste a conexo clicando em PING. Caso esteja tudo certo voc ver a segunte Mensagem Ping Succeeded Agora vamos criar o DataSource No menu do glassfish v em ->JDBC->JDBC Resources->New. Preenche os seguintes dados: JNDI Name : jdbc/tutorial Pool Name: selecione o pool que criamos tutorial clique em OK. 5) Configurar DataSorce no persistence.xml No projeto ProjetoEjb v em /ejbModule/META-INF e insira um xml chamado persistence.xml Clique com o boto direito em META-INF v em New-> Other-> digita xml e escolha XML File. Dentro de pesistence.xml implemente o seguinte cdigo: Clique na imagem para ampliar.

Aps configurar o persistence.xml, vamos criar as entidades: No projeto ProjetoEjbClient adicione o seguinte pacote : br.com.tutorial.entidade Dentro desse pacote crie as classes Clientes e Pedidos. Clientes.java

Pedidos.java

6) Criando as intefaes e os EJBs Essas intefaces serviro Para fazermos lookup no EJB, ou seja caso precisamos que uma outra aplicao acesse nosso ejb tanto no mesmo servidor quanto em outros servidores precisaremos dessa interface (Contrato) para fazermos o lookup. Porque precisamos dessa interface? Pense O projeto que ir acessar outro projeto precisa saber quais mtodos existem no outro projeto e qual classe ele ir acessar, logo ele conhecer apenas a interface. Vamos Criar nossas interfaces crie no projeto ProjetoEjbClient o seguinte pacote: br.com.tutorial.contratoEjb As interfaces sero criadas com a anotao @Remote, pois mais na frente nesse tutorial iremos acessar os ejbs atravs de uma outra aplicao, ou seja iremos acessar remotamente. @Remote -> para o EJB ficar visvel h aplicao externa. @Local -> EJB Visvel apenas para a prpria aplicao. Crie no pacote br.com.tutorial.contratoEjb as interfaces Cliente e Pedido. ClienteRemote:

PedidoRemote:

Vamos implementar os EJBs, No projeto ProjetoEjb crie o seguinte pacote: br.com.tutorial.sessionBean Crie as Classes ClienteSessioBean e PedidoSessionBean ClienteSessionBean:

PedidoSessionBean:

7) Criar ManagedBean do JSF No ProjetoWeb dentro de src crie o pacote br.com.tutorial.manegedBean, dentro desse pacote crie nosso ManegedBean chamado de ClienteBean:
package br.com.tutorial.manegedBean; import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; import javax.faces.application.FacesMessage; import javax.faces.application.FacesMessage.Severity; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.faces.context.FacesContext; import br.com.tutorial.contratoEjb.ClienteRemote; import br.com.tutorial.entidade.Clientes;

@ManagedBean @RequestScoped public class ClienteBean { @EJB private ClienteRemote clienteRemote; private Clientes cliente; private List listaClientes; public void salvar() { try { // tirando a mascara de CPF cliente.setCpf(cliente.getCpf().replace(., ).replace(-, )); this.clienteRemote.salvar(cliente); retornar(); } catch (Exception e) { this.addMensagem(FacesMessage.SEVERITY_WARN, Erro ao salvar); } } private void retornar() { this.addMensagem(FacesMessage.SEVERITY_INFO, Operao realizada com sucesso); this.listarClientes();

cliente = new Clientes(); } public void excluir(){ this.clienteRemote.excluir(getCliente()); cliente = new Clientes(); this.listarClientes(); } private void addMensagem(Severity tipo, String msg) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(tipo, , msg)); } public void listarClientes() { this.listaClientes = this.clienteRemote.listarClientes(); } public void limpar() { cliente = new Clientes(); listaClientes = new ArrayList(); } public Clientes getCliente() { if (cliente == null) { cliente = new Clientes(); } return cliente; } public void setCliente(Clientes cliente) { this.cliente = cliente; } public List getListaClientes() { if (listaClientes == null) { this.listarClientes(); } return listaClientes; } public void setListaClientes(List listaClientes) { this.listaClientes = listaClientes; } } Com o Maneged Bean criado, vamos implementar nossa pgina, dentro de ProjetoWeb/WebContent crie um xhtml com o nome cliente.xhml: Clique com o boto direito encima de WebContent new-> other-> HTML , aps criar o HTML Voc deve ronomea-lo para cliente.xhtml cliente.xhtml <?xml version=1.0 ?> <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&gt; <html xmlns=http://www.w3.org/1999/xhtml&#8221; xmlns:h=http://java.sun.com/jsf/html&#8221; xmlns:f=http://java.sun.com/jsf/core&#8221;

xmlns:p=http://primefaces.org/ui&gt; <h:head> </h:head> <h:body> <h:form id=form prependId=true> <p:messages showDetail=true autoUpdate=true id=msg /> <! <p:growl id=msg showDetail=true /> > <p:panel menuTitle=Cadastro de Clientes header=Cadastro de Clientes id=cadastro> <h:inputHidden id=teste value=#{clienteBean.cliente.idCliente} /> <h:outputLabel value=CPF: /> <br /> <p:inputMask mask=999.999.999-99 id=cpf requiredMessage=CPF Obrigatrio required=true value=#{clienteBean.cliente.cpf} /> <br /> <h:outputLabel value=Nome: /> <br /> <p:inputText value=#{clienteBean.cliente.nome} id=nome required=true requiredMessage=Nome Obrigatrio /> <br /> <p:separator /> <! update para atualizar os campos que estao entre as chaves, no nosso caso todo o formulrio > <p:commandButton value=Cadastrar action=#{clienteBean.salvar} update=form,:consulta /> <! imediate devido aos campos obrigatrios, com immediate true os campos no so obrigatrios na consulta > <p:commandButton value=Consultar action=#{clienteBean.listarClientes} update=:consulta immediate=true /> </p:panel> <br /> </h:form> <h:form id=consulta> <! caso seja alterao > <p:dataTable id=dataTable var=var value=#{clienteBean.listaClientes} paginator=true rows=10 rendered=#{not empty clienteBean.listaClientes} paginatorTemplate={CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown} rowsPerPageTemplate=5,10,15> <p:column> <f:facet name=header> <h:outputText value=CPF /> </f:facet> <h:outputText value=#{var.cpf} /> </p:column> <p:column>

<f:facet name=header> <h:outputText value=Nome /> </f:facet> <h:outputText value=#{var.nome} /> </p:column> <p:column> <p:commandButton image=ui-icon ui-icon-close update=:form,:consulta title=Editar Cliente action=#{clienteBean.excluir}> <f:setPropertyActionListener value=#{var} target=#{clienteBean.cliente} /> </p:commandButton> </p:column> </p:dataTable> <! oncomplete=confirmation.show() update=:consulta,:confirmacao > </h:form> </h:body> </html>

Aps criar a pgina inicie o glassfish sem a aplicao, vamos adicionar o suporte a hibernate no glassfish, para que a aplicao consiga reconhecer o persistence.xml.. muito importante que a aplicao no esteja no glassfish.

Agora inicie o glassfish:

Aps o servidor iniciar acesse no eu Browser : http://localhost:4848 V em update Tool ->procure hibernate e marque o checkbox-> clique em install->ok->accept

Esse processo um pouco lento.

Aps clicar em accept e esperar um pouco receber a seguinte mensagem:

Agora vamos reiniciar o glassfish com a nossa aplicao:

Aps o glassfish iniciar, verifique se o jpa criou as entidades no seu banco de dados:

Acesse a URL : http://localhost:8080/ProjetoWeb/cliente.jsf Se os passos foram executados corretamente voc ver:

O ltimo passo agora modificar o persistence.xml Modifique essa linha no persistence.xml <property name=hibernate.hbm2ddl.auto value=create /> Por essa: <property name=hibernate.hbm2ddl.auto value=update />

Com essa modificao o jpa no ficar criando as entidades toda vez que subir o servidor.

Para saber mais sobre o funcionamento de EJB,JPA sugiro a leitura da seguinte apostila Desenvolvimento Web Avanado com JSF2. EJB 3.1 e CDI download: http://www.k19.com.br/cursos/desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdi At o Prximo Tutrial, qualquer dvida estou a disposio. Email: jrsilvanio@gmail.com
Share this: Curtir isso: Be the first to like this.

CategoriasDesenvolvimento Java, Engenharia de Software, Testes automatizados Comentrios (11) Trackbacks (1) Deixe um comentrio Trackback 1.

Lennon abril 3, 2012 s 2:09 pm | #1 Resposta | Citao Amigo bom dia. Gostaria de tirar uma duvida com relao ao projeto. O Projetoweb tenho que subi-lo junto com o projetoEjbEAR?

Silvnio Jnior abril 3, 2012 s 3:38 pm | #2 Resposta | Citao Bom dia Lennon, No necessariamente,O Um arquivo ear um arquivo com formato JAR contendo uma aplicao J2EE (Enterprise Application Archive), ou seja nele voc ir colocar todos os projetos o ProjetoEjbClient, ProjetoEjb eo ProjetoWeb. porm voc pode subir o ProjetoWeb separado dos projetos que esto no EAR. Para subir o ProjetoWEB dentro do EAR vai em ProjetoEjbEAR -> Clica com o boto direito -> Properties -> Deployment Assembly e adiciona o ProjetoWeb. Caso voc queira fazer remoto; onde estiver @EJB private ClienteRemote clienteRemote; troque por: @EJB(lookup=java:global/ProjetoEjbEAR/ProjetoEjb /ClienteSessionBean!br.com.tutorial.contratoEjb.ClienteRemote) private ClienteRemote clienteRemote; isso so possivel porque marcamos a interface ClienteRemote como @REMOTE Qualquer dvida estou a disposio.

2.

Lennon abril 3, 2012 s 4:12 pm | #3 Resposta | Citao Silvanio, Obrigado pela resposta! uma duvida o meu cliente.xhtml teria que estar com a exteno .jsf? porque ele nao entra na tela de cadastro de clientes. Ja foi mapeado as entidade no banco mysql. Acho que so falta mesmo essa ultima dela aparecer para eu conseguir cadastrar. Desde j agradeo!

3.

Silvnio Jnior abril 4, 2012 s 2:45 am | #4 Resposta | Citao Lennon, xhtml mesmo. Quando voc foi configurar jsf em Projeto Facets voc informou a exteno? como est seu web.xml? att,

4. Silvnio Jnior abril 4, 2012 s 2:46 am | #5 Resposta | Citao Outra coisa, como est sua pgina xhtml, tem como postar aqui? talvez voc esqueceu de colocar o ou 5.

Lennon abril 4, 2012 s 12:50 pm | #6 Resposta | Citao Meu amigo! consegui botar pra funcionar a tela jsf! as duvidas que eu tenho e com relao ao grown id que tiver mudar para um id diferente. Se no ele dava erro na hora de subir a tela da aplicao. E o datable de confirmao nas ultimas linhas realmente tem que ficar como comentario? Obrigado mesmo! Abraos!

6.

Lennon abril 4, 2012 s 2:00 pm | #7 Resposta | Citao

7.

Thiago P. setembro 5, 2012 s 1:41 am | #8 Resposta | Citao Silvanio, estou tendo problemas quando vou acessar a interface remota. O meu objeto que est anotado com o @EJB sempre vem null, ou seja, no consigo uma instncia do EJB. Voc sabe o que pode ser? Obrigado e parabns pelo post.

Silvnio Jnior setembro 16, 2012 s 8:26 pm | #9 Resposta | Citao Da algum erro no console?

8.

Neto setembro 16, 2012 s 8:15 pm | #10 Resposta | Citao Amigo boa tarde, estou com tal problema quando rodo a app Element type p:inputMask must be followed by either attribute specifications, > or />. Qual seria a soluo

Silvnio Jnior setembro 16, 2012 s 8:25 pm | #11 Resposta | Citao Voc deve ta esquecendo de fechar a a tag inputMask, ex: 1. abril 25, 2012 s 4:20 am | #1 Configurando uma aplicao EJB 3.1, JPA e JSF 2 + PrimeFaces Projeto Final de Bloco (Holding Financeira)

Deixe uma resposta

RSS feed

Posts Recentes
Tutorial JSF 2 + Primefaces + EJB 3 + JPA + GlassFish 3.1.1

Arquivos
fevereiro 2012

Categorias
Desenvolvimento Java Engenharia de Software Testes automatizados

Meta
Registrar-se

Login Posts RSS RSS dos comentrios Blog no WordPress.com. Topo WordPress Blog no WordPress.com. Tema: INove por NeoEase.