Páginas

terça-feira, 2 de novembro de 2010

Introdução aos EJB's


OBJETIVO :

Apresentar os conceitos básicos do EJB, seus componentes e sua arquitetura.

Introdução :

Antes de seguir a leitura é importante saber o que são Java Beans, as principais características dos Java Beans são :
    • Construtor Vazio
    • Propriedades privadas, acessadas por métodos get e set (getXyz, setXyz) .
    • Não é necessário herdar de nenhuma classe em especial (POJO)
    • Deve ser serializavel (permitir que seu estado seja salvo e carregado posteriormente).
Enterprise Java Beans(EJB)

Enterprise Java Beans(EJB) é uma plataforma para construção de aplicações corporativas portável reutilizável, e escalável, que utiliza a linguagem java. Considerado um modelo de componentes ou Framework que permite a construção de aplicações corporativas java sem ter que reinventar serviços necessários para construção de uma aplicação, como transações, persistência automatizada, e assim por diante.
O EJB permite que o desenvolvedor se foque na implementação da regra de negocio sem ter que perder tempo com código de infraestrutura. É um dos principais componentes da plataforma JAVA EE. É um componente do tipo servidor que executa no contêiner EJB.
O principal objetivo do EJB é favorecer um rápido e simplificado desenvolvimento de aplicações java baseadas em componentes distribuídos. Componente que encapsula a regra de negócio da aplicação e possibilita a construção de aplicações tratando de conceitos como : Persistência, Processamento de transações , controle de concorrência e chamada de métodos remotos.

Necessidade de um Servidor de aplicação

Como o EJB é executado em um contêiner EJB, é necessário um servidor de aplicação, como JBOSS, GLASSFISH, etc. Não sendo possível executar no nosso querido Tomcat, pois o mesmo não possui todos os recursos da plataforma JAVA EE, sendo apenas um contêiner WEB, a figura abaixo ilustra a organização de um servidor de aplicação JAVA.


 
Motivos para escolher EJB 3 ?

    • Programação baseada em POJO, as anotações a favor do tão falado XML, uso intenso de convenções e o JPA.
    • O EJB oferece um conjunto de soluções para servidor, incluindo persistência, envio de mensagens, agendamento simplificado, comunicação distribuída, WebService, injeção de dependência(DI), e interceptadores.
    • Padrão aberto Java EE. O EJB possui uma especificação aberta, com uma API publica que as empresas utilizam para criar um contêiner ou implementação do fornecedor de persistência.
    • Apoiado por diversas organizações independentes. Incluindo as maiores empresas do ramo de tecnologia do mundo, muito respeitadas e financeiramente estabilizadas, como a Oracle e a IBM, assim como os grupos open source JBOSS e Geronimo.
    • Os servidores de aplicação possuem experiencia comprovada para suportar ao máximo computação de alto desempenho(HPC), em ambientes clusterizados.
Tipos de EJB
Um componente EJB é um “bean”. Eles são classificados em três tipos, baseados no que eles fazem:
    • Beans de Sessão(Sessions Beans)
    • Beans dirigidos por mensagens(Message-Driven Beans)
    • Entidades(Entity Beans)

Beans de Sessão(Sessions Beans) :
      • São entidades que disponibilizam interfaces para acessar regras de negócio implementadas pela aplicação .
      • Implementam tarefas ou um fluxo de tarefas necessárias para executar uma ação .
        Ex: reservar passagens, aprovar crédito, cadastrar cliente, calcular imposto, etc.
      • Manipulam entidades do modelo da aplicação para executar regras de negócio.
      • Ideal para implementar padrões de projeto tais como: Facade, Business, DAO e etc.
      • Permite ser invocado localmente ou remotamente.
Características:
      • Ciclo de vida gerenciado pelo contêiner EJB.
      • Podem ser clusterizados.
      • Podem guardar estado ou ser criado a cada requisição.
      • Permitem chamadas remotas .
      • São divididos em dois tipos: Stateless e Stateful .
Stateless Session Beans
      • É uma coleção de serviços relacionados, cada um representado por um método.
      • Não mantém seu estado entre as requisições de seus métodos. Quando um método é invocado em um Stateless Session Bean, o método executa e retorna o resultado sem saber o que as outras requisições estão fazendo.
      • É como um conjunto de procedimentos ou programas batch que executam um pedido baseado em alguns parâmetros e retornar um resultado.
      • Implementado através de pool de objetos.
Stateful Session Beans
      • É uma coleção de serviços relacionados, cada um representado por um método.
      • Diferente do Stateless, este mantém seu estado entre as requisições de seus métodos.
      • É como um conjunto de procedimentos ou programas batch que executam um pedido baseado em alguns parâmetros e retornar um resultado.
      • É criado um para cada cliente.
A partir desses conceitos faremos uma aplicação de exemplo, um Hello Word utilizando EJB. Para executar o exemplo é necessário tem um servidor de aplicação Java EE instalado, neste exemplo utilizarei o o JBOSS 5.1 e o IDE eclipse.

Criando os projetos
Crie um EJB project : projeto do módulo EJB da aplicação.




 


































Crie um Dynamic web Project : Projeto do módulo WEB da aplicação.

  

















  



















Crie um Enterprise Application project : projeto da aplicação que engloba os 
módulos EJB e WEB.

 





















Feito isso é importante adicionar uma referencia no projeto web para que ele consiga ter acesso as classes do projeto EJB.Clique com o botão direito do mouse no projeto web, no menu de contexto vá em Build Path / Configure build Path. Na tela seguinte clique na aba Projects, depois clique em add, na tela seguinte escolha o projeto hellowrd-ejb e clique em ok.



Adicione a interface OlaMundoLocal.
 
package br.com.helloword.local;

public interface OlaMundoLocal {
String gerarMensagem(String nome);
}

Adicione um EJB que implementará a interface acima :

package br.com.helloword.business;
import javax.ejb.Local;
import javax.ejb.Stateless;
import br.com.helloword.local.OlaMundoLocal;
@Local(OlaMundoLocal.class)
@Stateless(name = "OlaMundo")
public class OlaMundoLocalImpl implements OlaMundoLocal {

public String gerarMensagem(String nome) {
return nome + "!Bem vindo ao Mundo dos EJB's!";
}
}
 
No projeto web adicione uma pagina JSP da seguinte forma:
xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hello Word - EJBtitle>
head>
<body>
<a href="OlaMundoServlet">Hello Worda>
body>
html>

adicione também um servlet no projeto web: 
 
package br.com.helloword.web;

import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.helloword.local.OlaMundoLocal;


public class OlaMundoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB(name = "OlaMundo")
private OlaMundoLocal olaMundo;
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String mensagem = olaMundo.gerarMensagem("Fulano");
response.getWriter().println(mensagem);
}
}

Modifique o arquivo web.xml da seguinte forma:
xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>helloworddisplay-name>
<welcome-file-list>
<welcome-file>index.jspwelcome-file>
welcome-file-list>
<servlet>
<description>description>
<display-name>OlaMundoServletdisplay-name>
<servlet-name>OlaMundoServletservlet-name>
<servlet-class>br.com.helloword.web.OlaMundoServletservlet- class>
servlet>
<servlet-mapping>
<servlet-name>OlaMundoServletservlet-name>
<url-pattern>/OlaMundoServleturl-pattern>
servlet-mapping>
web-app>

Feito isso é só iniciar o servidor, e acessar pelo browser.

Resumo:

Agora você tem uma ideia do que são EJB's, no próximo artigo falarei de outros componentes,os Entity beans, faremos um CRUD como exemplo. Os fontes deste artigo estão disponiveis em http://sourceforge.net/projects/helloejb/.

Referencias Bibliograficas:

Debu Panda,Reza Rahman, Derek Lane - EJB3 em ação.
JBoss Application Server. http://www.jboss.org.