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

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
  • 3.
  • 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
  • 6.
  • 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
  • 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 classCliente 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
  • 27.
  • 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 doprojeto b) Servidor para execução c) Configuração do JPA d) Pressione Next duas vezes Prof. Adriano Teixeira de Souza
  • 30.
    a) Defina aplataforma b) Adicione a conexao c) Selecione o driver e) Pressione Finish Prof. Adriano Teixeira de Souza
  • 31.
    a) Selecione aconexã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 doprojeto 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.
  • 46.
  • 47.
  • 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óriodestino 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 componentesEJB 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
  • 58.
  • 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