SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
Comunicação Distribuída - EJB
      Prof. Adriano Teixeira de Souza
   Estratégias diferentes que permitem a
    comunicação entre aplicações distribuídas.

   Tipos distintos de comunicação em um sistema
    distribuído:

    ◦ Sockets
    ◦ RMI - Remote Method Invocation
    ◦ CORBA – Commom Object Request Broker Architecture
    ◦ EJB – Enterprise Java Bean
    ◦ Web Services


                              Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
   Se utilizar a versão 6.0 do JBoss , não é
    requerida uma instalação, basta apenas
    descompactar o arquivo na sua máquina e
    adicionar a variável de ambiente
    JBOSS_HOME;




                         Prof. Adriano Teixeira de Souza
   Vá em Iniciar -> Painel de controle -> Sistema ->
    Avançado ->Variáveis de ambiente;
   Adicione as variáveis JAVA_HOME e JBOSS_HOME,
    com os seguintes valores:
    ◦ JAVA_HOME = “meu caminho do JDK”
    ◦ JBOSS_HOME = “meu caminho do Jboss”

   Caso não tenha permissão, “sete” as variáveis em
    tempo de console (abra uma “console” e digite):
    ◦ SET JAVA_HOME=diretorioJVM
    ◦ SET JBOSS_HOME=diretorio do JBOSS
    ◦ Em seguida, entre na pasta bin e digite RUN.BAT


                                Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
   JEE: Acrônimo de Java Enterprise Edition Kit

   Plataforma Java voltada para aplicações corporativas,
    no modelo de sistema distribuído.

   Voltada para aplicações multi-camadas, baseadas em
    componentes que são executados em um servidor de
    aplicações (JBoss, exemplo).

   A plataforma Java EE é considerada um padrão de
    desenvolvimento, pois o fornecedor de software nesta
    plataforma deve seguir determinadas regras
    compatíveis com Java EE.
                                Prof. Adriano Teixeira de Souza
   A plataforma J2EE contém uma série de especificações, cada uma com
    funcionalidades distintas. Entre elas, tem-se:

    ◦ EJBs (Enterprise Java Beans), utilizados no desenvolvimento de
      componentes de software. Eles permitem que o programador se
      concentre nas necessidades do negócio do cliente, enquanto questões
      de infra-estrutura, segurança, disponibilidade e escalabilidade são
      responsabilidade do servidor de aplicações.

    ◦ JPA (Java Persistence API), é uma API que padroniza o acesso a banco
      de dados através de mapeamento Objeto/Relacional dos Enterprise
      Java Beans
    ◦ JTA (Java Transaction API), é uma API que padroniza o tratamento de
      transações dentro de uma aplicação Java.
    ◦ JDBC (Java Database Connectivity), utilizado no acesso a bancos de dados;
    ◦ JCA (Java Connector Architecture), é uma API que padroniza a ligação a
      aplicações legadas.
    ◦ Servlets e JSP (Java Server Pages), utilizados para o desenvolvimento de
      aplicações Web com conteúdo dinâmico.
    ◦ E outros.



                                         Prof. Adriano Teixeira de Souza
•   Transações gerenciadas
•   Segurança
•   Clustering
•   Escalabilidade
•   Alta Disponibilidade
•   Comunicação Assíncrona
•   Integração com Legado
•   Persistência
•   etc…

                         Prof. Adriano Teixeira de Souza
   Representa um objeto de entidade de negócios
    que existe no armazenamento persistente
    (banco de dados, por exemplo)
   Classes simplificadas, chamadas “POJOS”,
    mapeadas com JPA ;
   Flexíveis para qualquer banco de dados
    relacional;
   Tão portáveis, que podem ser usados também
    fora de um servidor de aplicação (aplicação
    “desktop”);
   São agrupados em uma unidade de
    persistência;

                        Prof. Adriano Teixeira de Souza
   Espelham objetos do mundo real;

   Possuem uma chave primária “id”(pode ser
    uma classe ou um tipo primitivo);

   Identificado pela anotação @Entity;

   Não necessitam de nenhuma interface;

   Gerenciados pelo EntityManager;


                         Prof. Adriano Teixeira de Souza
 Sistema   de Cadastro de Cliente



                 Prof. Adriano Teixeira de Souza
@Entity
 .
@Table(name=“cliente”)
public class Cliente implements Serializable {

          private static final long serialVersionUID = 1L;

          @Id
          @GeneratedValue(strategy=AUTO)
          private int id;

          private String nome;

          private String cpf;

          public Cliente() { }

          // get’s e set’s

          //equals e hashCode

} // fim da entidade


                                        Prof. Adriano Teixeira de Souza
   @Entity
    ◦ Indica ao provedor de persistência que a Classe bean será mapeada para uma
      tabela de banco de dados e gerenciada por um Entity Maganer;

   @Table
    ◦ Informa ao container EJB para qual tabela do banco será mapeada a
      classe bean;

   @Column
    ◦ Informa ao container EJB para qual coluna da tabela a propriedade do
      bean será mapeada;

   @Id
    ◦ Informa que atributo será tratado como chave primária na tabela de
      banco de dados.

   @GeneratedValue - define que o valor do atributo “id” será gerado
    automaticamente no momento em que os objetos forem persistidos
    (inseridos na tabela).


                                       Prof. Adriano Teixeira de Souza
   Implementar a interface java.io.Serializable não
    é obrigatório.
    ◦ Com “Serializable” é possível usar a mesma classe
      tanto para persistência, quanto para transferência de
      dados (entre sistemas ou camadas).

   Assim como todo POJO, as propriedades de um
    Entity Bean são acessadas através dos métodos
    get’s e set’s.



                             Prof. Adriano Teixeira de Souza
   Conjunto de todos os entity beans;
   Quem gerencia é um serviço de EntityManager;
   Cada unidade de persistência deve estar
    associada a um banco de dados;
   Todas essas informações estão descritas em
    um arquivo chamado persistence.xml
   Localizado no diretório META-INF da aplicação
   A unidade de persistência é identificada pela
    marcação:
    ◦ <persistence-unit name=“xxxx”>
      Onde “xxxx” é o nome a ser referenciado como a unidade
       de persisência.


                             Prof. Adriano Teixeira de Souza
O arquivo persistence.xml (definido com
 “data-source” - DS)


<?xml version="1.0" encoding="UTF-8"?>
<persistence>
 <persistence-unit name= “nomeUP” >
      <jta-data-source>java:/nome_DS </jta-data-source>
 </persistence-unit>
</persistence>




                            Prof. Adriano Teixeira de Souza
   <persistence-unit
    name=“nomeUP”>
    ◦ Conjunto das classes gerenciadas
      por um Entity Manager

   <jta-data-source>
    ◦ Define o banco de dados que será
      usado para esta implantação.
    ◦ No JBoss deve ser definido em um
      arquivo “.xml”, implantado (deploy)
      na pasta “deploy”




                                 Prof. Adriano Teixeira de Souza
   São componentes EJB do lado do servidor que podem ser
    acessados utilizando vários protocolos de objetos
    distribuídos;

   Para acessar uma aplicação que foi instalada no servidor
    (JBoss), a aplicação cliente invoca os métodos do Session
    Bean.

   O Session Bean executa o trabalho para seu cliente,
    protegendo o cliente da complexidade através da execução
    de tarefas de negócio dentro do servidor.

   Suas atividades são geralmente transitórias (não tem um
    estado persistente);


                                 Prof. Adriano Teixeira de Souza
   Stateless:
    ◦ Não mantém estado;
    ◦ Cada método é completamente independente ;
   Stateful:
    ◦ Mantém estado;
    ◦ Não é compartilhado entre clientes;
   Todo Session Bean deve implementar uma interface
    local ou remota.
    ◦ Local – o cliente compartilha a mesma máquina
      (processador e memória) que o servidor
    ◦ Remoto – o cliente acessa de forma remota (de outra
      máquina), mesmo estando na mesma máquina que o
      servidor

                                Prof. Adriano Teixeira de Souza
   Será criado um “session beans” (componente)
      chamado ClienteFacade, que fornecerá todos os
      serviços/tarefas de um cadastro de clientes:
      ◦ Cadastrar um Cliente
      ◦ Listar os Clientes cadastrados
      ◦ Localizar um Cliente
         E outros que se tornarem necessários.


•Por convenção, todos os componentes “session beans” terão no nome o
sufixo “Facade”.
•A classe interface terá o mesmo nome da classe “session beans”,
adicionado com o sufixo “Remote” ou “Local”, dependendo do uso.


                                  Prof. Adriano Teixeira de Souza
@Stateless (mappedName =" ejb/ClienteBean")
@LocalBean
public class ClienteFacade implements ClienteFacadeRemote
{
  @PersistenceContext
  private EntityManager manager;

    public void cadastraCliente(Cliente cliente)
    {
        manager.persist(cliente);
    }

    public Cliente localizaCliente(int id)                {
        return manager.find(Cliente.class, id);
    }
}

                                    Prof. Adriano Teixeira de Souza
   @Stateless:
    ◦ Mostra que o componente ClienteFacade não
      mantém o estado (objetos/dados em memória);

   @PersistenceContext
    ◦ Obtém o acesso a um serviço EntityManager;




                            Prof. Adriano Teixeira de Souza
   Especifica quais métodos de negócio um cliente
    tem permissão para invocar no EJB;

   @Remote
    ◦ Instrui o container de que esta é uma interface remota
      para o ClienteFacade




                              Prof. Adriano Teixeira de Souza
@Remote
public interface ClienteFacadeRemote
{
  public void cadastraCliente(Cliente cliente);
  public Cliente localizaCliente(int id);
  public List<Cliente> listaClientes();
}




                          Prof. Adriano Teixeira de Souza
Passo-a-passo
   Considere um novo projeto para representar a aplicação
    “servidora” do Sistema de Cadastro de Clientes.
   Crie um projeto do tipo EJB: File – New – Project ... EJB




                                    Em seguida, informe:
                                    a) O nome do projeto
                                    b) O servidor para execução
                                    c) A configuração do JPA


                                         Veja a seguir...




                                 Prof. Adriano Teixeira de Souza
a) Nome do projeto



             b) Servidor para execução



             c) Configuração do JPA




            d) Pressione Next duas vezes



Prof. Adriano Teixeira de Souza
a) Defina a plataforma
                                b) Adicione a conexao



                                               c) Selecione o driver




                         e) Pressione Finish

                            Prof. Adriano Teixeira de Souza
a) Selecione a conexão




     b) Marque a opção para listar
     classes no arquivo persistence.xml



       c) Marque a opção para criar o
       arquivo orm.xml




Prof. Adriano Teixeira de Souza
   Visão do projeto JPA(“AULAJEE6-JPA”), na
    perspectiva “Java EE”:



                                      Área (pasta) de código fonte
                                      (source)




                         Prof. Adriano Teixeira de Souza
   As entidades utilizam anotações presentes na bibliteca do JPA, Java
    Persistence API.
   Considere a entidade Cliente apresentada anteriormente.
   Crie a classe Cliente.java no pacote modelo conforme figura abaixo.




                                    Prof. Adriano Teixeira de Souza
   Após importar as classes, adicione as referências
    das entidade no arquivo “persistence.xml”.
    ◦ Use o recurso “Syncronize Class List”




                                              34
   Adicione o nome da “data-source” (MySqlDS) no arquivo
    persistence.xml.
    ◦ Use a tag:
       <jta-data-source>java:/jdbc/MySqlDS</jta-data-source>
    ◦ Ou use o editor (assistente) na aba “Connection”. Informe em JTA_Data
      Source: java:/ jdbc/MySqlDS




                                      Prof. Adriano Teixeira de Souza
   Diferente da configuração em aplicação desktop (console ou
    stand-alone), uma aplicação no JBOSS fica responsável pelo
    acesso aos recursos de banco, que são gerenciados pela JTA –
    Java Transaction API.




                                                   36
   Crie um arquivo “xml” no diretório “deploy” do JBOSS contendo o
      acesso ao banco de dados.
     O exemplo a seguir, mostra o DS (data-source) MySqlDS, que
      registra esse nome no serviço de diretório JNDI (Java Naming and
      Directory Interface).

      Arquivo “mysql-ds.xml”




Diretório:
jboss-6.0.0.Finalserverdefaultdeploy




                                           Prof. Adriano Teixeira de Souza
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
  <jndi-name>jdbc/MySqlDS</jndi-name>
  <connection-url>
       jdbc:mysql://localhost:3306/test
  </connection-url>
  <driver-class>com.mysql.jdbc.Driver</driver-class>
  <user-name>root</user-name>
  <password>root</password>
   <metadata>
     <type-mapping>mySQL</type-mapping>
   </metadata>
 </local-tx-datasource>
</datasources>
    Obs:
    1. Implantar o driver do MySQL no diretório jboss-6.0.0.Finallib
    2. Cuidado ao definir dois data-source com o mesmo nome (jdbc/MySqlDS)

                                    Prof. Adriano Teixeira de Souza
   Considere um novo projeto para representar a aplicação
    “servidora” do Sistema de Eventos.
   Crie um projeto do tipo EJB: File – New – Project ... EJB




                                    Em seguida, informe:
                                    a) O nome do projeto
                                    b) A versão do EJB (use a 3.1)


                                         Veja a seguir...




                                 Prof. Adriano Teixeira de Souza
a) Nome do projeto



b) Versão do EJB (usar a 3.1)




   c) Clique em Next duas vezes
   d) Marque a opção “Generate ejb-
   jar.xml deployment descriptor”




Prof. Adriano Teixeira de Souza
   Visão do projeto EJB (“AULAJEE6-EJB”), na
    perspectiva “Java EE”:



                                  Área (pasta) de código fonte
                                  (source)




                         Prof. Adriano Teixeira de Souza
   Crie o arquivo “jndi.properties” dentro do diretório de
     código fonte do projeto (ejbModule), com o conteúdo a
     seguir:
jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces




                                      Prof. Adriano Teixeira de Souza
   Nesse passo serão criados o componente
    ClienteFacade e sua interface remota ClienteFacade
    Remote.
   No Eclipse, seleciona a pasta de código e escolha a
    opção New – Session Bean (na perspectiva JEE).
    ◦ Pode ser também: File - New – EJB – Session Bean




                                                   43
   Criar o “session bean”: ClienteFacade na pacote “facade” (dentro da
    pasta de código ejbModule).
   Desmarque a opção “Local” e marque “Remote”
    ◦ Altere o nome da interface remota para façade.ClienteFacade Remote




                                      Prof. Adriano Teixeira de Souza
45
46
“Deploy no Eclipse”
   Deployment (implantação) é o conjunto de
    atividades que tornam um software, ou componentes
    de software, pronto para uso.

   Durante o deployment, o container EJB lê as
    configurações contidas em arquivos descritores
    (deployment descriptor) ou nas annotations
    (anotações) no código-fonte e prepara um ambiente
    padronizado para a execução dos beans.

    ◦ O deployment descriptor especifica quais serviços de infra-
      estrutura o container EJB proverá aos enterprise beans, desde
      que o deployment seja feito num container EJB certificado.
    ◦ No Eclipse, cria-se o descritor através do atalho (sobre o
      projeto):
      Java EE Tools – Generate Deployment Descriptor Stub
      Será criado o arquivo ejb-jar.xml na pasta META-INF (do projeto)

                                   Prof. Adriano Teixeira de Souza
   Um arquivo “JAR” (Java Archive) é uma forma
    conveniente de “empacotar” componentes para uso
    em deployment
   O processo compacta (“zipa”) todas as classes,
    interfaces e arquivos descritores para um único
    arquivo JAR
   Em seguida esse arquivo deve ser copiado para a
    pasta “deploy” do JBOSS (ou do servidor de aplicação
    em uso).
   No Eclipse, você utiliza a opção:
    ◦ File – Export – EJB Jar File

    ◦ Ou usa o menu de atalho (veja na próxima figura)


                                     Prof. Adriano Teixeira de Souza
Escolha o diretório destino
no do Jboss
(..serverdefaultdeploy)


  Prof. Adriano Teixeira de Souza
   No JBoss, pools de conexões de bancos de dados são
    acessíveis no servidor através de objetos DataSource,
    publicadas no JNDI abaixo no namespace java:/
    ◦ java:/ jdbc/MySqlDS
    ◦ java:/ DefaultDS
   Os nomes são configurados nos arquivos *-ds.xml do
    JBoss (localizados em deploy)
   Para acessar um banco existente no servidor use JNDI e
    nome definido no *-service.xml correspondente (em
    jdbc):
    Context ctx = new InitialContext();
    javax.sql.DataSource ds = (javax.sql.DataSource)
    ctx.lookup("java:/DefaultDS");
    java.sql.Connection = ds.getConnection();


                                 Prof. Adriano Teixeira de Souza
   Para implantar é necessário iniciar o servidor JBoss
    ◦ Entre no diretório “bin”, onde está o Jboss instalado
    ◦ Execute o arquivo “run.bat” (na console Windows)
    ◦ Aguarde a carga ....




                                                       52
   O JBoss exige que você coloque seu projeto EJB
    “JAR” em um dirétorio deploy.
    ◦ O default é a pasta
              “ jboss-6.0.0.Finalserverdefaultdeploy”


   O servidor examina o arquivo JAR em tempo de
    execução quando o servidor é inicializado para
    determinar quais contêiners EJB devem ser
    criados e acoplados em tempo de execução.
    ◦ Qualquer atualização do “JAR” pode ser feita com o
      JBoss “rodando”



                             Prof. Adriano Teixeira de Souza
Acessando os componentes EJB remotamente
                em uma aplicação console.
   Com o componente EJB ClienteFacade
    implantado, vamos testar o acesso de um
    cliente remoto (aplicação console)

   Para isso devemos criar o cliente que se
    conecta ao servidor, localiza a interface
    remota do componente ClienteFacade e
    interage com ele para criar e selecionar
    entidades “Cliente” no banco de dados.




                          Prof. Adriano Teixeira de Souza
   No Eclipse, crie um nov projeto Java EE, do tipo “Java Project”.
    ◦ Use a opção File – New Project – JavaEE
   Adicione o JAR criado anteriormente, para manter as
    dependências das classes entidades (JPA) e a EJB remoto.




                                Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
   Adicione a bibliotecas jbossall-client.jar do diretório
    %JBOSS_HOME%client.
public class Principal {
    public static void main(String[] args) {
            try {
                Context ctx = new InitialContext();
                ClienteFacadeRemote facade = (ClienteFacadeRemote)ctx.lookup(“ejb/ClienteBean");
                Scanner in = new Scanner(System.in);
                while(true) {
                           System.out.println("Entre com o nome: ");
                           String nome = in.nextLine();
                           if (nome.equals("sair")) {break;}
                           System.out.println("Entre com o cpf: ");
                           String cpf = in.nextLine();
                           Cliente c = new Cliente();
                           c.setNome(nome);
                           c.setCpf(cpf);
                           facade.cadastraCliente(c);
            }
             System.out.println("nnListann");
            for(Cliente cli : facade.listaClientes()){
                           System.out.println("Cliente: "+cli.getNome());
            }
            System.out.println("Terminou");
         } catch (Exception e) { e.printStackTrace(); }
    }
}

                                                               Prof. Adriano Teixeira de Souza
   Colocar uma cópia do arquivo jndi.properties
    no diretório src, o qual é o diretório base
    para os arquivos fonte.

   Executar a aplicação cliente




                         Prof. Adriano Teixeira de Souza
   Desenvolver uma aplicação JavaEE para
    fornecer o seguinte componente:
    ◦ CadastrarAluno (Aluno a);
      Um aluno tem matricula, nome, curso.

    ◦ Desenvolver uma aplicação console para utilizar o
      componente CadastraAluno, usando a interface
      CadastrarAlunoRemote




                             Prof. Adriano Teixeira de Souza

Mais conteúdo relacionado

Mais procurados

Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsDenis L Presciliano
 
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)mauriciopel
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Luis Borges Gouveia
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2Flávio Lisboa
 
Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Gilberto Holms
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma javaJunior Souza
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Marcelo Zeferino
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaGlobalcode
 

Mais procurados (20)

Visão Geral de EJB 3.0
Visão Geral de EJB 3.0Visão Geral de EJB 3.0
Visão Geral de EJB 3.0
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Introducao EJB 3
Introducao EJB 3Introducao EJB 3
Introducao EJB 3
 
EJB
EJBEJB
EJB
 
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Tutorial EJB 3.0 (2009)
Tutorial EJB 3.0 (2009)Tutorial EJB 3.0 (2009)
Tutorial EJB 3.0 (2009)
 
Fundamentos de Objetos Remotos
Fundamentos de Objetos RemotosFundamentos de Objetos Remotos
Fundamentos de Objetos Remotos
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Java 14
Java 14Java 14
Java 14
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2
 
Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma java
 
Cactus xp
Cactus xpCactus xp
Cactus xp
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na prática
 

Semelhante a Sistemas Distribuídos - Comunicação Distribuída - EJB

Semelhante a Sistemas Distribuídos - Comunicação Distribuída - EJB (20)

GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
[Java] Contexts and Dependency Injection em JEE6
[Java] Contexts and Dependency Injection em JEE6[Java] Contexts and Dependency Injection em JEE6
[Java] Contexts and Dependency Injection em JEE6
 
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EESerra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Palestra
PalestraPalestra
Palestra
 
Hibernate
HibernateHibernate
Hibernate
 
Workshop05
Workshop05Workshop05
Workshop05
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Curso De Hibernate 3
Curso De Hibernate 3Curso De Hibernate 3
Curso De Hibernate 3
 
Hibernate
HibernateHibernate
Hibernate
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotações
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotações
 
J530 15 workshop
J530 15 workshopJ530 15 workshop
J530 15 workshop
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 

Mais de Adriano Teixeira de Souza

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleAdriano Teixeira de Souza
 

Mais de Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 

Sistemas Distribuídos - Comunicação Distribuída - EJB

  • 1. Comunicação Distribuída - EJB Prof. Adriano Teixeira de Souza
  • 2. Estratégias diferentes que permitem a comunicação entre aplicações distribuídas.  Tipos distintos de comunicação em um sistema distribuído: ◦ Sockets ◦ RMI - Remote Method Invocation ◦ CORBA – Commom Object Request Broker Architecture ◦ EJB – Enterprise Java Bean ◦ Web Services Prof. Adriano Teixeira de Souza
  • 4. Se utilizar a versão 6.0 do JBoss , não é requerida uma instalação, basta apenas descompactar o arquivo na sua máquina e adicionar a variável de ambiente JBOSS_HOME; Prof. Adriano Teixeira de Souza
  • 5. Vá em Iniciar -> Painel de controle -> Sistema -> Avançado ->Variáveis de ambiente;  Adicione as variáveis JAVA_HOME e JBOSS_HOME, com os seguintes valores: ◦ JAVA_HOME = “meu caminho do JDK” ◦ JBOSS_HOME = “meu caminho do Jboss”  Caso não tenha permissão, “sete” as variáveis em tempo de console (abra uma “console” e digite): ◦ SET JAVA_HOME=diretorioJVM ◦ SET JBOSS_HOME=diretorio do JBOSS ◦ Em seguida, entre na pasta bin e digite RUN.BAT Prof. Adriano Teixeira de Souza
  • 7. JEE: Acrônimo de Java Enterprise Edition Kit  Plataforma Java voltada para aplicações corporativas, no modelo de sistema distribuído.  Voltada para aplicações multi-camadas, baseadas em componentes que são executados em um servidor de aplicações (JBoss, exemplo).  A plataforma Java EE é considerada um padrão de desenvolvimento, pois o fornecedor de software nesta plataforma deve seguir determinadas regras compatíveis com Java EE. Prof. Adriano Teixeira de Souza
  • 8. A plataforma J2EE contém uma série de especificações, cada uma com funcionalidades distintas. Entre elas, tem-se: ◦ EJBs (Enterprise Java Beans), utilizados no desenvolvimento de componentes de software. Eles permitem que o programador se concentre nas necessidades do negócio do cliente, enquanto questões de infra-estrutura, segurança, disponibilidade e escalabilidade são responsabilidade do servidor de aplicações. ◦ JPA (Java Persistence API), é uma API que padroniza o acesso a banco de dados através de mapeamento Objeto/Relacional dos Enterprise Java Beans ◦ JTA (Java Transaction API), é uma API que padroniza o tratamento de transações dentro de uma aplicação Java. ◦ JDBC (Java Database Connectivity), utilizado no acesso a bancos de dados; ◦ JCA (Java Connector Architecture), é uma API que padroniza a ligação a aplicações legadas. ◦ Servlets e JSP (Java Server Pages), utilizados para o desenvolvimento de aplicações Web com conteúdo dinâmico. ◦ E outros. Prof. Adriano Teixeira de Souza
  • 9. Transações gerenciadas • Segurança • Clustering • Escalabilidade • Alta Disponibilidade • Comunicação Assíncrona • Integração com Legado • Persistência • etc… Prof. Adriano Teixeira de Souza
  • 10.
  • 11. Representa um objeto de entidade de negócios que existe no armazenamento persistente (banco de dados, por exemplo)  Classes simplificadas, chamadas “POJOS”, mapeadas com JPA ;  Flexíveis para qualquer banco de dados relacional;  Tão portáveis, que podem ser usados também fora de um servidor de aplicação (aplicação “desktop”);  São agrupados em uma unidade de persistência; Prof. Adriano Teixeira de Souza
  • 12. Espelham objetos do mundo real;  Possuem uma chave primária “id”(pode ser uma classe ou um tipo primitivo);  Identificado pela anotação @Entity;  Não necessitam de nenhuma interface;  Gerenciados pelo EntityManager; Prof. Adriano Teixeira de Souza
  • 13.  Sistema de Cadastro de Cliente Prof. Adriano Teixeira de Souza
  • 14. @Entity . @Table(name=“cliente”) public class Cliente implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=AUTO) private int id; private String nome; private String cpf; public Cliente() { } // get’s e set’s //equals e hashCode } // fim da entidade Prof. Adriano Teixeira de Souza
  • 15. @Entity ◦ Indica ao provedor de persistência que a Classe bean será mapeada para uma tabela de banco de dados e gerenciada por um Entity Maganer;  @Table ◦ Informa ao container EJB para qual tabela do banco será mapeada a classe bean;  @Column ◦ Informa ao container EJB para qual coluna da tabela a propriedade do bean será mapeada;  @Id ◦ Informa que atributo será tratado como chave primária na tabela de banco de dados.  @GeneratedValue - define que o valor do atributo “id” será gerado automaticamente no momento em que os objetos forem persistidos (inseridos na tabela). Prof. Adriano Teixeira de Souza
  • 16. Implementar a interface java.io.Serializable não é obrigatório. ◦ Com “Serializable” é possível usar a mesma classe tanto para persistência, quanto para transferência de dados (entre sistemas ou camadas).  Assim como todo POJO, as propriedades de um Entity Bean são acessadas através dos métodos get’s e set’s. Prof. Adriano Teixeira de Souza
  • 17. Conjunto de todos os entity beans;  Quem gerencia é um serviço de EntityManager;  Cada unidade de persistência deve estar associada a um banco de dados;  Todas essas informações estão descritas em um arquivo chamado persistence.xml  Localizado no diretório META-INF da aplicação  A unidade de persistência é identificada pela marcação: ◦ <persistence-unit name=“xxxx”>  Onde “xxxx” é o nome a ser referenciado como a unidade de persisência. Prof. Adriano Teixeira de Souza
  • 18. O arquivo persistence.xml (definido com “data-source” - DS) <?xml version="1.0" encoding="UTF-8"?> <persistence> <persistence-unit name= “nomeUP” > <jta-data-source>java:/nome_DS </jta-data-source> </persistence-unit> </persistence> Prof. Adriano Teixeira de Souza
  • 19. <persistence-unit name=“nomeUP”> ◦ Conjunto das classes gerenciadas por um Entity Manager  <jta-data-source> ◦ Define o banco de dados que será usado para esta implantação. ◦ No JBoss deve ser definido em um arquivo “.xml”, implantado (deploy) na pasta “deploy” Prof. Adriano Teixeira de Souza
  • 20. São componentes EJB do lado do servidor que podem ser acessados utilizando vários protocolos de objetos distribuídos;  Para acessar uma aplicação que foi instalada no servidor (JBoss), a aplicação cliente invoca os métodos do Session Bean.  O Session Bean executa o trabalho para seu cliente, protegendo o cliente da complexidade através da execução de tarefas de negócio dentro do servidor.  Suas atividades são geralmente transitórias (não tem um estado persistente); Prof. Adriano Teixeira de Souza
  • 21. Stateless: ◦ Não mantém estado; ◦ Cada método é completamente independente ;  Stateful: ◦ Mantém estado; ◦ Não é compartilhado entre clientes;  Todo Session Bean deve implementar uma interface local ou remota. ◦ Local – o cliente compartilha a mesma máquina (processador e memória) que o servidor ◦ Remoto – o cliente acessa de forma remota (de outra máquina), mesmo estando na mesma máquina que o servidor Prof. Adriano Teixeira de Souza
  • 22. Será criado um “session beans” (componente) chamado ClienteFacade, que fornecerá todos os serviços/tarefas de um cadastro de clientes: ◦ Cadastrar um Cliente ◦ Listar os Clientes cadastrados ◦ Localizar um Cliente  E outros que se tornarem necessários. •Por convenção, todos os componentes “session beans” terão no nome o sufixo “Facade”. •A classe interface terá o mesmo nome da classe “session beans”, adicionado com o sufixo “Remote” ou “Local”, dependendo do uso. Prof. Adriano Teixeira de Souza
  • 23. @Stateless (mappedName =" ejb/ClienteBean") @LocalBean public class ClienteFacade implements ClienteFacadeRemote { @PersistenceContext private EntityManager manager; public void cadastraCliente(Cliente cliente) { manager.persist(cliente); } public Cliente localizaCliente(int id) { return manager.find(Cliente.class, id); } } Prof. Adriano Teixeira de Souza
  • 24. @Stateless: ◦ Mostra que o componente ClienteFacade não mantém o estado (objetos/dados em memória);  @PersistenceContext ◦ Obtém o acesso a um serviço EntityManager; Prof. Adriano Teixeira de Souza
  • 25. Especifica quais métodos de negócio um cliente tem permissão para invocar no EJB;  @Remote ◦ Instrui o container de que esta é uma interface remota para o ClienteFacade Prof. Adriano Teixeira de Souza
  • 26. @Remote public interface ClienteFacadeRemote { public void cadastraCliente(Cliente cliente); public Cliente localizaCliente(int id); public List<Cliente> listaClientes(); } Prof. Adriano Teixeira de Souza
  • 28. Considere um novo projeto para representar a aplicação “servidora” do Sistema de Cadastro de Clientes.  Crie um projeto do tipo EJB: File – New – Project ... EJB Em seguida, informe: a) O nome do projeto b) O servidor para execução c) A configuração do JPA Veja a seguir... Prof. Adriano Teixeira de Souza
  • 29. a) Nome do projeto b) Servidor para execução c) Configuração do JPA d) Pressione Next duas vezes Prof. Adriano Teixeira de Souza
  • 30. a) Defina a plataforma b) Adicione a conexao c) Selecione o driver e) Pressione Finish Prof. Adriano Teixeira de Souza
  • 31. a) Selecione a conexão b) Marque a opção para listar classes no arquivo persistence.xml c) Marque a opção para criar o arquivo orm.xml Prof. Adriano Teixeira de Souza
  • 32. Visão do projeto JPA(“AULAJEE6-JPA”), na perspectiva “Java EE”: Área (pasta) de código fonte (source) Prof. Adriano Teixeira de Souza
  • 33. As entidades utilizam anotações presentes na bibliteca do JPA, Java Persistence API.  Considere a entidade Cliente apresentada anteriormente.  Crie a classe Cliente.java no pacote modelo conforme figura abaixo. Prof. Adriano Teixeira de Souza
  • 34. Após importar as classes, adicione as referências das entidade no arquivo “persistence.xml”. ◦ Use o recurso “Syncronize Class List” 34
  • 35. Adicione o nome da “data-source” (MySqlDS) no arquivo persistence.xml. ◦ Use a tag:  <jta-data-source>java:/jdbc/MySqlDS</jta-data-source> ◦ Ou use o editor (assistente) na aba “Connection”. Informe em JTA_Data Source: java:/ jdbc/MySqlDS Prof. Adriano Teixeira de Souza
  • 36. Diferente da configuração em aplicação desktop (console ou stand-alone), uma aplicação no JBOSS fica responsável pelo acesso aos recursos de banco, que são gerenciados pela JTA – Java Transaction API. 36
  • 37. Crie um arquivo “xml” no diretório “deploy” do JBOSS contendo o acesso ao banco de dados.  O exemplo a seguir, mostra o DS (data-source) MySqlDS, que registra esse nome no serviço de diretório JNDI (Java Naming and Directory Interface). Arquivo “mysql-ds.xml” Diretório: jboss-6.0.0.Finalserverdefaultdeploy Prof. Adriano Teixeira de Souza
  • 38. <?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>jdbc/MySqlDS</jndi-name> <connection-url> jdbc:mysql://localhost:3306/test </connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password>root</password> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources> Obs: 1. Implantar o driver do MySQL no diretório jboss-6.0.0.Finallib 2. Cuidado ao definir dois data-source com o mesmo nome (jdbc/MySqlDS) Prof. Adriano Teixeira de Souza
  • 39. Considere um novo projeto para representar a aplicação “servidora” do Sistema de Eventos.  Crie um projeto do tipo EJB: File – New – Project ... EJB Em seguida, informe: a) O nome do projeto b) A versão do EJB (use a 3.1) Veja a seguir... Prof. Adriano Teixeira de Souza
  • 40. a) Nome do projeto b) Versão do EJB (usar a 3.1) c) Clique em Next duas vezes d) Marque a opção “Generate ejb- jar.xml deployment descriptor” Prof. Adriano Teixeira de Souza
  • 41. Visão do projeto EJB (“AULAJEE6-EJB”), na perspectiva “Java EE”: Área (pasta) de código fonte (source) Prof. Adriano Teixeira de Souza
  • 42. Crie o arquivo “jndi.properties” dentro do diretório de código fonte do projeto (ejbModule), com o conteúdo a seguir: jndi.properties java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=jnp://localhost:1099 java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces Prof. Adriano Teixeira de Souza
  • 43. Nesse passo serão criados o componente ClienteFacade e sua interface remota ClienteFacade Remote.  No Eclipse, seleciona a pasta de código e escolha a opção New – Session Bean (na perspectiva JEE). ◦ Pode ser também: File - New – EJB – Session Bean 43
  • 44. Criar o “session bean”: ClienteFacade na pacote “facade” (dentro da pasta de código ejbModule).  Desmarque a opção “Local” e marque “Remote” ◦ Altere o nome da interface remota para façade.ClienteFacade Remote Prof. Adriano Teixeira de Souza
  • 45. 45
  • 46. 46
  • 48. Deployment (implantação) é o conjunto de atividades que tornam um software, ou componentes de software, pronto para uso.  Durante o deployment, o container EJB lê as configurações contidas em arquivos descritores (deployment descriptor) ou nas annotations (anotações) no código-fonte e prepara um ambiente padronizado para a execução dos beans. ◦ O deployment descriptor especifica quais serviços de infra- estrutura o container EJB proverá aos enterprise beans, desde que o deployment seja feito num container EJB certificado. ◦ No Eclipse, cria-se o descritor através do atalho (sobre o projeto):  Java EE Tools – Generate Deployment Descriptor Stub  Será criado o arquivo ejb-jar.xml na pasta META-INF (do projeto) Prof. Adriano Teixeira de Souza
  • 49. Um arquivo “JAR” (Java Archive) é uma forma conveniente de “empacotar” componentes para uso em deployment  O processo compacta (“zipa”) todas as classes, interfaces e arquivos descritores para um único arquivo JAR  Em seguida esse arquivo deve ser copiado para a pasta “deploy” do JBOSS (ou do servidor de aplicação em uso).  No Eclipse, você utiliza a opção: ◦ File – Export – EJB Jar File ◦ Ou usa o menu de atalho (veja na próxima figura) Prof. Adriano Teixeira de Souza
  • 50. Escolha o diretório destino no do Jboss (..serverdefaultdeploy) Prof. Adriano Teixeira de Souza
  • 51. No JBoss, pools de conexões de bancos de dados são acessíveis no servidor através de objetos DataSource, publicadas no JNDI abaixo no namespace java:/ ◦ java:/ jdbc/MySqlDS ◦ java:/ DefaultDS  Os nomes são configurados nos arquivos *-ds.xml do JBoss (localizados em deploy)  Para acessar um banco existente no servidor use JNDI e nome definido no *-service.xml correspondente (em jdbc): Context ctx = new InitialContext(); javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:/DefaultDS"); java.sql.Connection = ds.getConnection(); Prof. Adriano Teixeira de Souza
  • 52. Para implantar é necessário iniciar o servidor JBoss ◦ Entre no diretório “bin”, onde está o Jboss instalado ◦ Execute o arquivo “run.bat” (na console Windows) ◦ Aguarde a carga .... 52
  • 53. O JBoss exige que você coloque seu projeto EJB “JAR” em um dirétorio deploy. ◦ O default é a pasta “ jboss-6.0.0.Finalserverdefaultdeploy”  O servidor examina o arquivo JAR em tempo de execução quando o servidor é inicializado para determinar quais contêiners EJB devem ser criados e acoplados em tempo de execução. ◦ Qualquer atualização do “JAR” pode ser feita com o JBoss “rodando” Prof. Adriano Teixeira de Souza
  • 54. Acessando os componentes EJB remotamente em uma aplicação console.
  • 55. Com o componente EJB ClienteFacade implantado, vamos testar o acesso de um cliente remoto (aplicação console)  Para isso devemos criar o cliente que se conecta ao servidor, localiza a interface remota do componente ClienteFacade e interage com ele para criar e selecionar entidades “Cliente” no banco de dados. Prof. Adriano Teixeira de Souza
  • 56. No Eclipse, crie um nov projeto Java EE, do tipo “Java Project”. ◦ Use a opção File – New Project – JavaEE
  • 57. Adicione o JAR criado anteriormente, para manter as dependências das classes entidades (JPA) e a EJB remoto. Prof. Adriano Teixeira de Souza
  • 59. Adicione a bibliotecas jbossall-client.jar do diretório %JBOSS_HOME%client.
  • 60. public class Principal { public static void main(String[] args) { try { Context ctx = new InitialContext(); ClienteFacadeRemote facade = (ClienteFacadeRemote)ctx.lookup(“ejb/ClienteBean"); Scanner in = new Scanner(System.in); while(true) { System.out.println("Entre com o nome: "); String nome = in.nextLine(); if (nome.equals("sair")) {break;} System.out.println("Entre com o cpf: "); String cpf = in.nextLine(); Cliente c = new Cliente(); c.setNome(nome); c.setCpf(cpf); facade.cadastraCliente(c); } System.out.println("nnListann"); for(Cliente cli : facade.listaClientes()){ System.out.println("Cliente: "+cli.getNome()); } System.out.println("Terminou"); } catch (Exception e) { e.printStackTrace(); } } } Prof. Adriano Teixeira de Souza
  • 61. Colocar uma cópia do arquivo jndi.properties no diretório src, o qual é o diretório base para os arquivos fonte.  Executar a aplicação cliente Prof. Adriano Teixeira de Souza
  • 62. Desenvolver uma aplicação JavaEE para fornecer o seguinte componente: ◦ CadastrarAluno (Aluno a);  Um aluno tem matricula, nome, curso. ◦ Desenvolver uma aplicação console para utilizar o componente CadastraAluno, usando a interface CadastrarAlunoRemote Prof. Adriano Teixeira de Souza