Mostrando postagens com marcador EJB. Mostrar todas as postagens
Mostrando postagens com marcador EJB. Mostrar todas as postagens

domingo, 15 de maio de 2011

Utilizando EJB2 com Client Servlet e Swing (Parte 2)

Olá Pessoal,


Continuando nosso projeto em EJB2, neste post, vamos criar dois tipos de Client, o primeiro será um projeto web, que vai usar Servlet, o segundo será uma aplicação em Swing, ambos os projetos irão acessar nosso EJB2 por meio do recurso de JNDI.
Uma das grandes vantagens do EJB, é o reuso do código, assim, nossa camada de negócio, poderá ser usada, em diversos tipo de Client.
Ao final deste post, deixarei o projeto completo para download.

1. Passo: Vamos criar um projeto web chamado ExemploEJB-web, nesse projeto, crie um Servlet chamado HelloServlet, lembrando que é necessário adicionar o projeto ExemploEJB2 em Project References, e não esqueça de adionar este projeto como módulo Web no arquivo application.xml que está no projeto EAR.


package com.blogpost.jabesfelipe.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.blogpost.jabesfelipe.service.Hello;
import com.blogpost.jabesfelipe.service.HelloHome;

public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
Context initial = new InitialContext();
Object objref = initial.lookup("HelloBean");
HelloHome home = (HelloHome) PortableRemoteObject.narrow(objref,
HelloHome.class);
Hello remote = home.create();

PrintWriter out = response.getWriter();
out.println(remote.showName("Jabes Felipe"));

} catch (NamingException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}
}
}
HelloServlet.java

Para poder testar nossa aplicação, digite a seguinte URL http://localhost:8080/ExemploEJB2-web/HelloServlet.

2. Passo: Vamos agora, criar um projeto java, chamado ExemploEJB2-swing, crie uma classe HelloSwing, nessa classe, temos um simples JFrame, composto por um campo Texto e Botão, na ação deste botão, vamos chamar nosso método no EJB e ele retornará um valor em String em um componente JOptionPane.
Lembrando que é necessário adicionar o projeto ExemploEJB2 em Project References.

package com.blogpost.jabesfelipe.swing;

import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import com.blogpost.jabesfelipe.service.Hello;
import com.blogpost.jabesfelipe.service.HelloHome;

public class HelloSwing extends JFrame {

public HelloSwing() {
initComponents();
}

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new HelloSwing().setVisible(true);
}
});
}

private void initService() {
try {

Properties t = new Properties();
t.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
t.put(Context.PROVIDER_URL, "jnp://localhost:1099");
Context context = new InitialContext(t);
Object objref = context.lookup("HelloBean");
HelloHome home = (HelloHome) PortableRemoteObject.narrow(objref,
HelloHome.class);
Hello remote = home.create();

JOptionPane.showMessageDialog(null,
remote.showName(jTxtFldName.getText().toString()));

} catch (NamingException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}

private void jBtOKActionPerformed(java.awt.event.ActionEvent evt) {
initService();
}

private void initComponents() {

jLblName = new javax.swing.JLabel();
jTxtFldName = new javax.swing.JTextField();
jBtOK = new javax.swing.JButton();
jLblTitle = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jLblName.setText("Informe seu Nome: ");

jBtOK.setText("OK");
jBtOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jBtOKActionPerformed(evt);
}
});

jLblTitle.setFont(new java.awt.Font("Courier 10 Pitch", 1, 18)); // NOI18N
jLblTitle.setText("Exemplo - Chamando Serviço EJB2 em Swing");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout
.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
layout.createSequentialGroup()
.addGroup(
layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
layout.createSequentialGroup()
.addGap(25, 25,
25)
.addComponent(
jLblName)
.addGap(1, 1, 1)
.addComponent(
jTxtFldName,
javax.swing.GroupLayout.PREFERRED_SIZE,
153,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(
jBtOK))
.addGroup(
layout.createSequentialGroup()
.addContainerGap()
.addComponent(
jLblTitle)))
.addContainerGap(
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)));
layout.setVerticalGroup(layout
.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLblTitle)
.addPreferredGap(
javax.swing.LayoutStyle.ComponentPlacement.RELATED,
32, Short.MAX_VALUE)
.addGroup(
layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLblName)
.addComponent(
jTxtFldName,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jBtOK))
.addGap(24, 24, 24)));
pack();
}

private JButton jBtOK;
private JLabel jLblName;
private JLabel jLblTitle;
private JTextField jTxtFldName;

}

Agora só testar nosso projeto, veja como ficou:


Bom galera, enfim, terminamos nosso projeto, que na primeira parte, criamos nosso camada de EJB2 e na segunda criamos um projeto web e Swing para acessar o EJB.
Para quem quiser baixar todos os projeto desenvolvidos, clique aqui.
Qualque dúvida, crítica ou sugestão, fico à disposição.

domingo, 17 de abril de 2011

Utilizando EJB2 com Client Servlet e Swing (Parte 1)

Olá Pessoal,

Com a chegada do EJB3, ficou bem mais simples, desenvolver aplicações que usam Session Bean e Entity, devido a utilização das Annotations, evitando de ficar configurando arquivos XMLs. Entretanto, existe várias aplicações no mercado que utilizam o uso de EJB2, por este motivo, resolvi criar este post, que tem como objetivo, mostrar, como que desenvolve uma aplicação em EJB2 que servirá como nosso modelo, e para utilizar este serviço, iremos usar 2 maneiras, uma usando Servlet e a outra Swing para acessar o EJB2.
Este post terá 2 partes, essa primeira, será o desenvolvimento da camada EJB2 e a segunda parte, criaremos um Client Servlet e Swing. Para o desenvolvimento do projeto, irei utilizar Java 1.6, Eclipse e o JBoss 4.

1. Passo: Vejamos a estrutura da camada de EJB:



2. Passo: Crie um projeto chamado ExemploEJB2 do tipo EJB no Eclipse, neste projeto vamos criar duas Interfaces (Remote e Home) e um SessionBean.

Primeiro criamos a Interface Remote e declaramos nosso método de serviço, neste exemplo é bem simples, teremos um método para mostrar o nome de uma Pessoa.

package com.blogpost.jabesfelipe.service;

import java.rmi.RemoteException;
import javax.ejb.EJBObject;

public interface Hello extends EJBObject {

public String showName(String name) throws RemoteException;

}
Hello.java

Criamos a Interface Home:

package com.blogpost.jabesfelipe.service;

import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome

public interface HelloHome extends EJBHome {

public Hello create() throws RemoteException, CreateException;

}
HelloHome.java

Agora criamos nosso SessionBean e iremos implementar nosso método que foi declarado na Interface:

package com.blogpost.jabesfelipe.service;

import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class HelloBean implements SessionBean {

public String showName(String name) {
return "Meu nome é " + name + "!";
}

public void ejbCreate() throws CreateException {
System.out.println("Bean criado");
}

@Override
public void ejbActivate() throws EJBException, RemoteException {
System.out.println("Bean ativado");
}

@Override
public void ejbPassivate() throws EJBException, RemoteException {
System.out.println("Bean desativado");
}

@Override
public void ejbRemove() throws EJBException, RemoteException {
System.out.println("Bean removido");
}

@Override
public void setSessionContext(SessionContext arg0) throws EJBException,
RemoteException {}

}
HelloBean.java

3. Passo: Agora vamos configurar (name, state, etc...) do EJB no arquivo ejb-jar.xml que fica dentro da pasta META-INF.
O arquivo vai ficar conforme o modelo abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar id="ejb-jar_ID">
<display-name>ExemploEJB2</display-name>

<enterprise-beans>
<session>
<display-name>HelloBean</display-name>
<ejb-name>HelloBean</ejb-name>
<home>com.blogpost.jabesfelipe.service.HelloHome</home>
<remote>com.blogpost.jabesfelipe.service.Hello</remote>
<ejb-class>com.blogpost.jabesfelipe.service.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>

</ejb-jar>
ejb-jar.xml

4. Passo: Vamos criar um arquivo jboss.xml dentra da pasta META-INF, e neste arquivo definimos o nome da JNDI que irá acessar o EJB.

<?xml version='1.0' encoding='UTF-8' ?>
<jboss>

<enterprise-beans>
<session>
<ejb-name>HelloBean</ejb-name>
<jndi-name>HelloBean</jndi-name>
</session>
</enterprise-beans>

</jboss>
jboss.xml

5. Passo: O nosso EJB está pronto, agora crie um projeto chamado ExemploEJB2-ear do tipo EAR, e vamos configurar o módulo EJB no arquivo application.xml que fica dentro da pasta META-INF.

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" id="Application_ID" version="5">
<display-name>ExemploEJB2-ear</display-name>
<module>
<ejb>ExemploEJB2.jar</ejb>
</module>
</application>

Bom galera, nossa camada de EJB, está pronta, e na próxima parte do tutorial, vamos testa-lá, usando Servlet e Swing.
Qualquer dúvida, crítica ou segestão, fico à disposição.

sábado, 20 de março de 2010

Login de Usuários com EJB3 e JSF (Parte 2)

Olá Pessoal,


Esta é a segunda e última da parte do desenvolvimento de um Sistema de Login de Usuários, usando EJB3 para fazer a validação dos Usuários no nosso Banco de Dados, e JSF para a camada de apresentação do nosso Projeto.
Na primeira parte deixamos pronto, toda camada de EJB, agora nesta parte iremos criar o ManagedBean do Login e o Servlet Filter do Login.
Ao final do post, o projeto será disponibilizado para download, para quem quiser baixar e testar.

1. Passo: Crie um ManagedBean, óbviamente dentro do projeto web, escolha o nome de LoginMB, defina um pacote com o nome managedbean, deixa seu escopo como session, feito isto, altera o código seu código, deixando igual ao da figura abaixo:


No código acima, criamos dois método, um para fazer o login e o outro para fazer o logout.


2. Passo: Agora vamos criar o Servlet Filter, informe o nome de LoginFilter, defina um pacote, pode ser chamado de filter, deixa o mapeamento das URLs como *.jsf, depois de criado o Filter, altera o código do método doFilter, para o que está mostrado na figura abaixo:

3. Passo: Deixe o arquivo faces-config.xml, como mostrado na imagem abaixo, caso não exista este arquivo, basta criá-lo.


4. Passo: O arquivo web.xml, deverá ficar parecido com a da figura abaixo:

5. Passo: Agora iremos criar nossas páginas .jsp, são cinco páginas, a primeira será o index.jsp, que apenas fará o encaminhamento para página de login.

6. Passo: Criamos agora a página para fazer o login, a página login.jsp, deverá ficar parecida com a figura abaixo.



7. Passo: Criamos agora a página home.jsp, esta página só deverá ser acessado para quem estiver logado, é uma página bem simples, conforme a figura abaixo.



8. Passo: Criamos agora a página logout.jsp, esta página se aberta quando o usuário sair do sistema, é uma página bem simples, conforme a figura abaixo.



9. Passo: Criamos agora a página falha.jsp, esta página será exibida quando um usuário inválido tentar entrar no sistema, é uma página bem simples, conforme a figura abaixo.



10. Passo: Primeiramente, iremos tentar entrar no sistema, com um usuário que não existe.

11. Passo: Quando não for encontrado o usuário, a página falha.jsp será exibida.

12. Passo: Tentamos agora com um usuário que esteja cadastrado.


13. Passo: A página home será exibida, mostrando o nome do usuário que está logado.


14. Passo: Quando o usuário, sair do sistema, a página logout será exibida.

Terminamos, o nosso projeto de Login, usando EJB3, Servlet Filter e JSF.
Para quem quiser baixar o projeto, clique aqui.
Qualquer dúvida, crítica ou sugestão, fico a disposição.

Login de Usuários com EJB3 e JSF (Parte I)

Olá Pessoal,


Neste post irei mostrar um exemplo simples de como fazer autentificação de usuários, usando EJB3, para a regra de negócio, e o Framework JSF para a camada de apresentação, poderia ser um Servlet ou JSP para view. A aplicação foi desenvolvida no Netbeans 6.8, servidor GlassFish v3 e o Banco de Dados MySQL.
Por estarmos usando o JSF, poderiamos fazer o controle de autentificação usando um próprio recurso do JSF chamado de PhaseListener, que fica de uma forma mais integrado. Porém neste exemplo, será feito utilizando o bom e velho Filter.
Este post será dividido em duas partes, sendo que a primeira, iremos criar o BD e a tabela Usuario, também será criado o projeto no Netbeans, deixando toda a camada de EJB pronta. Para a segunda parte, será criado o Servlet Filtro e a camada do JSF.
Ao final do post, o projeto será disponibilizado para download, para quem quiser baixar e testar.

1. Passo: A primeira coisa que devemos fazer é criar um Banco de Dados no Mysql, para isto basta usar seu programa de Gerenciamento de Banco de Dados e digitar o seguinte comando:

CREATE DATABASE JAVA;

Para criar a tabela de Usuário, use o seguinte comando:

CREATE TABLE USUARIO (
nome VARCHAR(20) PRIMARY KEY,
senha VARCHAR(20)
);

Criado nosso BD e a Tabela, já deixaremos um Usuário cadastro, para mais tarde podermos testar, simplesmente, digite o código abaixo:

INSERT INTO USUARIO values ('jabes', 'jabes');


2.Passo: Iremos criar um projeto JEE no Netbeans, para isto escolha Enterprise Application, o nome do projeto será Login, escolha o servidor GlassFish, criando um módulo EJB e um WAR.
A estrutura do projeto ficará parecida com a imagem abaixo:



3. Passo: Agora vamos criar a Entidade (Classe) Usuário, que será nosso modelo, para não digitarmos a Classe na unha, iremos importar a mesma do Banco. Clique com o botão direito do mouse sobre o módulo EJB, e escolha Entity Classes from DataBase, conforme a figura abaixo:



4. Passo: Escolha um Data Source que use o MySQL e o nosso Banco de Dados que foi criado, caso não exista um, basta criar um novo DS, depois de escolhido o DS, adicionar a tabela Usuario, clique em Next, conforme mostra a imagem abaixo:



5. Passo: Informe o nome do pacote, no exemplo deixei como loginservice, depois clique em Next.



6. Passo: Na configuração do mapeamento da Entidade, configurar de acordo com a figura abaixo, depois, clique em Finish:


7. Passo: Será criado a Classe Usuario, com todas Annotations, conforme a imagem abaixo:



8. Passo: Agora iremos criar um Session Bean, do tipo Stateless, com o nome de LoginService, implementando uma Interface Local, ambos, no pacote loginservice, crie um método chamado verificarUsuario que retorna um boolean e que tem como parâmetro um Objeto do tipo Usuario na Interface LoginServiceLocal, na Classe LoginService, altera seu código, deixando-o, igual ao da figura abaixo:


Aqui, terminamos nossa primeira parte da Aplicação, deixando a camada de EJB pronta, e na próxima e última parte, iremos terminar, com a criação do Servlet Filter e do ManagedBean.


domingo, 7 de março de 2010

Exemplo de EJB, criando um Session Bean Stateless no Netbeans 6.8 e Glassfish V3.

Olá Pessoal,


Neste post, iremos criar uma simples aplicação EJB3, para quem não sabe, EJB3 é uma plataforma para a construção de aplicações corporativas portável, que permite o desenvolvimento de componentes reutilizáveis, há 3 tipos de componentes EJB, (Session Beans que pode ser Stateless ou Statefull, Message Driven e Entidades) para este exemplo iremos fazer um exemplo de Bean de Sessão sem estado,.
Session Bean Stateless pode ser usado para implementar a lógica corporativa em uma aplicação, ele pode ser acessado por milhares de clientes, pois não armazenam estado.
Para este exemplo, iremos usar a IDE Netbeans 6.8 e o Servidor Glassfish.
Ao final do post, o projeto será disponibilizado para download, para quem quiser baixar e testar.

1. Passo: Começaremos com a construção do projeto.



2. Passo: Escolha o tipo do projeto, conforme a imagem abaixo.



3. Passo: Informe o nome do projeto e onde o mesmo será salvo.



4. Passo: Na tela seguinte, escolha o servidor Glassfish v3, conforme a imagem abaixo, por fim, clique em Finalizar.



5. Passo: Clique com o botão direito do mouse, sobre o módulo EJB -> Novo -> Bean Sessão, conforme a imagem abaixo.




6. Passo: Na tela seguinte, informe o nome do EJB, seu pacote, o tipo de sessão e escolha a Interface Local, conforme a imagem abaixo.



7. Passo: Com a Classe CalcularIPI aberta, clique com o botão direito do mouse -> Insere código, conforme a imagem abaixo.



8. Passo: Agora escolha -> Adicionar método de negócio, conforme a imagem abaixo.



9. Passo: Agora, informe o nome do método, o tipo de retorno e os parâmetros, conforme a imagem abaixo, por fim, clique em OK.



10. Passo: Foi criado uma Interface Local.



11. Passo: Altera o conteúdo da Classe CalcularIPI, conforme a imagem abaixo.



12. Passo: Para testamos nosso Session Bean, iremos criar um Servlet, para isto, clique com o botão direito no módulo web, conforme a imagem abaixo.



13. Passo: Na tela seguinte, informe o nome e o pacote do Servlet e depois clique em Finalizar, conforme a imagem abaixo.



14. Passo: Com o Servlet aberto, clique com o botão direito do mouse sobre o código, conforme a imagem abaixo.



15. Passo: Escolha -> Chamar Enterprise Bean, conforme a imagem abaixo.



16. Passo: Escolha o EJB CalcularIPI, conforme a imagem abaixo.



17. Passo: Com o Servlet aberto, altera o código, conforme a imagem abaixo.



18. Passo: Clique com o botão direito sobre o módulo EJB -> Implantar.



19. Passo: Clique com o botão direito sobre o módulo Web -> Implantar.



20. Passo: Clique com o botão direito sobre o módulo Web -> Executar.



21. Passo: Agora para testar o exemplo, informe o nome do Servlet, na barra de endereço de seu navegador, conforme a imagem abaixo.

Terminamos, o nosso exemplo de Bean de Sessão sem estado, que foi um criado um simples método, que calcula o valor do produto + o valor do IPI, retornando o valor total do produto.
Para quem quiser baixar o projeto, clique aqui.
Qualquer dúvida, crítica ou sugestão, fico a disposição.

Jabes Felipe RSS Feed Jabes Felipe