java oo middleware - jee / ejb / rmi
TRANSCRIPT
Object oriented / Component Middleware
(Java)
Mateus FernandoRobson PiereTiago Higino
Vinicius PoncianoYitzhak Stone
PUC Minas - São GabrielSistemas de Informação - 7º Período
Desenvolvimento de Aplicações Distribuídas
Roteiro
1. JEE ⇒ Java Enterprise Edition
2. JB ⇒ JavaBeans
3. EJB ⇒ Enterprise JavaBeans
4. RMI ⇒ Remote Method Invocation
5. Exemplo(s) prático(s)
a. RMI
JEE: Java Enterprise Edition Java Enterprise Edition
● Java EE ou Java Enterpise Edition é uma plataforma de desenvolvimento construída em cima da plataforma Java SE (Standard Edition).
● O foco dela é fornecer um ambiente robusto:○ Para desenvolvimento e execução de aplicações;○ Em grande escala;○ Multi camadas;○ Escaláveis;○ Confiáveis○ Seguras.
O que é JEE ?
http://docs.oracle.com/javaee/6/tutorial/doc/
De 1999 (JPE) Até 2016 (JEE 8)
Evolução do JEE
● Servlets - São componentes Java executados no servidor, para gerar conteúdo dinâmico na Web.
● Java Server Pages (JSP) - Servlets mais robustos e de fácil desenvovilmento.
● Java Server Faces (JSF) - Framework web com o padrão MVC para simplificar o desenvolvimento de UI.
● Java Persistence API (JPA) - APIde mapeamento objeto relacional, sendo utilizada para a persistência dos dados.
● Enterprise Java Beans (EJB) - Componentes que executam em um container de aplicação no lado do servidor.
Principais Componentes do JEE
● Para fornecer a comunicação entre componentes, APIs, persistência, serviços entre outros, o JEE oferece os containeres para abrigá-los.
● Os containeres são implementados pelos fornecedores de servidor de aplicativos JEE, que disponibilizam um container para cada tipo de componente como: Applet, cliente de aplicativo, web e EJBs.
Como JEE oferece os serviços?
● Para cada tipo de componete da plataforma é fornecido um conteiner e eles amarzenam os componetes e oferecem os seguintes serviços:○ Gerenciamento ciclo de vida;○ Segurança;○ Implementação;○ Comunicação com outros componentes;○ Ambiente com tempo de execução compatível.
Conteiners JEE
● Conectividade: É realizada pelos objetos distribuídos através de RMI
(Remote Method Invocation) e COBRA. Porém, todo o ciclo da conectividade
deve ser fornecido através dos protocolos HTTP e HTTPS.
● Serviços de Diretório: JNDI (Java Naming and Directory Interfaces), é uma
API que acessa serviço de diretórios, sendo que cada serviço deve fornecer
um provedor de serviços (Service Provider). Os servidores JEE são
obrigados a possuir esse tipo de serviço.
● JDBC: API JDBC (Java Database Connection), que fornece conexão aos
bancos de dados.
● JCA (Java Connector Architecture): Suporte à conexão de sistemas
legados e e integração de servidores legados.
Serviços oferecidos nos containers JEE
● Segurança: autenticação e autorização dos usuários através de
APIs como JAAS (Java Authentication and Authorization Service).
● XML: Operações e suporte a XML (eXtensible Markup Language.
● Transações: O conteiner é responsavel pela transação, mas pode-se
utilizar de API’s, como o JTA (Java Transaction API).
○ JTA (Java Transaction API): É uma API que permite trabalhar
com transações independentes do gerenciador.
● E-mail: Utiliza o JMS (Java Message Service), para troca de
mensagens. utilizando vários protocolos como: POP, SMTP e IMAP.
Serviços oferecidos nos containers JEE
● JMS (Java Message Service): É uma API que oferece o mecanismo
de criar, ler e armazenar mensagens. A JMS suporta dois tipos de
trocas de mensagem:
○ Ponto a ponto: Esse tipo acontece quando um aplicativo envia
uma mensagem para uma fila (destino preparado para receber as
mensagens) e após isso, um aplicativo coleta essa mensagem.
○ Publicação assinatura: Esse modelo exige que os aplicativos
clientes inscrevam-se para receber as informações sobre o
assunto desejado.
Serviços oferecidos nos containers JEE
Camadas JEE
● O JEE possui três camadas:
○ Camada de Negócio;
■ Encapsula os EJB’s, ou seja a lógica do negócio.
○ Camadas de Apresentação;
■ Contém as telas que serão exibidas para o usuário e faz a
comunicação com a lógica do negócio.
○ Camada Cliente
■ Essa camada suporta clientes web e portáteis que se comunicam
com o protocolo HTTP, porém outros conseguem usar SOAP e
outros tipos.
http://docs.oracle.com/javaee/6/tutorial/doc/
Exemplo de Arquitetura JEE
● Plataforma Robusta de Desenvolvimento, bem integrada e já
consolidada no mercado. Além disso faz-se uso de toda a
força da linguagem Java, além de proporcionar um ambiente
que contém várias API’s que facilitam a integração dos
componentes do sistema com outros sistemas.
● Independência de plataforma (Sistema Operacional e
Hardware).
Prós e Contras
● Utiliza apenas a linguagem Java para a escrita de códigos, pois a JVM só roda liguagem Java.
● Desempenho prejudicado por executar apenas sobre máquina virtual.
● Necessita de um time de desenvolvimento experiente.
Prós e Contras
JavaBeansModelo de Componente de Software
O que é JavaBeans?
● Definição
● Como funciona?
● Caracteristicas:
○ É uma classe
○ Reutilizável
○ Facilita a programação visual
○ descrição auto-contida
○ Objeto serializado
JavaBeans e suas convenções
● Nomenclatura de métodos
● Construtores
● Comportamento
Para quê servem os JavaBeans?
● São implementação de uma interface
● Blocos de componentes GUI
● Gerador de gráficos, relatórios e planilhas
● Calendários, relógios e agendas
● Display de Dados
● Drag & Drop
● java.io.Serializable persiste a restauração de um estado
Exemplo de um Bean
Propriedades● Simples: propriedades podem ser computadas;
● Indexadas: contém uma coleção de valores;
● Vinculadas: Usadas quando vários objetos precisam ser notificados de mudanças em um componente;
● Restritas: Uma mudança no valor da propriedade pode ser vetada (java.beans.PropertyVetoException);
EJB: Enterprise Java BeansComponente JEE
O que é EJB ?
● Enterprise JavaBeans (EJB) é um componente da plataforma JEE que roda em um container de um servidor de aplicação.
● Seu principal objetivo consiste em fornecer um desenvolvimento rápido e simplificado de aplicações Java, com base em componentes distribuídos, transacionais, seguros e portáveis.
Características
● Transações: A arquitetura EJB define um suporte sofisticado para utilização de transações. Esse suporte é integrado com a Java Transaction API (JTA) e oferece inclusive a possibilidade de realizar transações distribuídas.
● Segurança: Suporte para realizar autenticação e autorização de forma transparente. Os desenvolvedores das aplicações não precisam implementar a lógica de segurança pois ela faz parte da arquitetura EJB.
● Remotabilidade: Aplicações EJB podem ser acessadas remotamente através de diversos protocolos de comunicação. Consequentemente, é possível desenvolver aplicações clientes de diversos tipos. Por exemplo, aplicações EJB podem ser como Web Services.
Características● Multithreading e Concorrência: A arquitetura EJB permite que as
aplicações sejam acessados por múltiplos usuários simultaneamente de maneira controlada para evitar problemas de concorrência.
● Persistência: Facilidades para utilizar os serviços dos provedores de persistência que seguem a especificação JPA.
● Gerenciamento de Objetos: Mecanismos de injeção de dependências e controle de ciclo de vida são oferecidos aos objetos de uma aplicação EJB. O mecanismo de controle de ciclo de vida pode garantir a escalabilidade de uma aplicação.
● Integração: A arquitetura EJB é fortemente integrada com os componentes da plataforma Java EE. Podemos, por exemplo, facilmente integrar os recursos do JSF em uma aplicação EJB.
URL: http://www.thejavageek.com/wp-content/uploads/2015/01/application-architecture.png Fonte: http://www.thejavageek.com/2015/01/09/creating-jsf-ejb-jpa-application-using-eclipse-wildfly/
Arquitetura de uma Aplicação JSF / EJB / JPA
História/Versões do EJB● EJB 1.0 24/03/1998
● EJB 1.1 versão final 17/12/1999
● EJB 2.0 versão final 22/08/2001 (JSR 19)
● EJB 2.1 versão final 24/11/2003 (JSR 153)
● EJB 3.0 versão final 11/05/2006 (JSR 220)
● EJB 3.1 versão final 10/12/2009 (JSR 318)
● EJB 3.2 versão final 28/05/2013 (JSR 345)
Tipos de Beans do EJB● Entity Beans (removidos na versão 3)
● Session Beans
○ Stateless Session Beans
○ Stateful Session Beans
○ Singleton Session Beans (versão 3.1)
● Message Driven Beans
Interface
Fonte: Elaborador pelos Autores
Servidor
Cliente
URL: http://images.devshed.com/ds/stories/Teach%20Yourself%20J2EE/04fig01.jpgFonte: http://www.devshed.com/c/a/java/introduction-to-enterprise-javabeans/
RMI: Remote Method InvocationChamada de Métodos Remotos
Introdução ⇒ Visão geral● Sun → JDK 1.1 → 1998
● Paradigma: POO e computação distribuída
○ Abstração, Encapsulamento, Herança e Polimorfismo
○ “Coleção de computadores independentes que se apresenta ao
usuário como um sistema único e consistente”
● Modelo Cliente / Servidor
● Síncrono (“por natureza”)
● Java
○ Plataforma JEE
○ Integração com outras linguagens
■ RMI / IIOP → CORBA
Introdução ⇒ Motivação
● Programação de socket
○ Baixo nível (rede / transporte)
● Problemas com o RPC
○ Necessidade de aprender uma linguagem IDL
○ Suporte limitado para tipos de dados
● Fortalecimento das linguagens Orientadas a Objetos
● Foco na aplicação → Alto nível
Fonte: Distributed Objects Programming Using Java RMI. http://condor.depaul.edu/ichu/ds420/lecture/1002/rmi%3E1.doc
TCP/IP ⇔ RMI
Fonte: http://neoramon.blogspot.com.br/2009/11/tcp-udp-e-rmi-minhas-observacoes-sobre.html
Desempenho: RMI vs. TCP / UDP
Modelo RMI (1)
● O servidor define objetos que o cliente pode usar
remotamente.
● Os clientes podem invocar métodos nesse objeto remoto
como se ele estivesse executando localmente.
● O RMI esconde o mecanismo de transporte (via rede) de
argumentos dos métodos e valores de retorno.
Modelo RMI (2)
● Transparências:
○ Acesso: clientes com implementações diferentes se
conectam ao servidor da mesma maneira.
○ Localização: o cliente não precisa saber onde está o
servidor que hospeda o objeto remoto.
Arquitetura ⇒ Camadas
● Stub / Skeleton: interface entre cliente e objetos remotos
● Referência remota: registro de objetos remotos para
pesquisa na rede
○ rmiregistry
● Transporte: protocolo de rede (comunicação
cliente/servidor)
○ JRMP (Java Remote Method Protocol) → TCP/IP
Arquitetura
Fonte: http://www.argonavis.com.br/cursos/java/j100/java_20.pdf
CORBA ⇔ RMI
Fonte: http://www.argonavis.com.br/cursos/java/j100/java_20.pdf
Tópicos Adicionais
● Serviço de ativação RMI
○ rmid
● Segurança
○ SSL → Java Secure Socket Extension (JSSE)
○ Políticas de segurança (RMISecurityManager)
FARLEY, Jim; et.al. Java Enterprise in a Nutshell: A Desktop Quick Reference
Arquitetura RMI em Tempo de Execução
Anatomia da URL de um objeto remoto RMI
Em nosso exemplo:
rmi : // 192.168.0.1 : 1099 / CalculatorService
FARLEY, Jim; et.al. Java Enterprise in a Nutshell: A Desktop Quick Reference
Prós e Contras
● Multi-plataforma (que suportam a VM Java)
● Introduz novas implementações em JVMs remotas
● “Distributed Garbage Collector”
Prós e Contras● Só “roda” em plataformas com suporte a Java.
● Falhas de segurança na execução de métodos remotos.
● Limitações de funcionalidade forçadas pelas restrições de segurança
● Só opera em sistemas escritos em Java. Não há suporte para
sistemas legados (C++, Ada, Cobol, Fortram, ...)
● Limitado ao TCP/IP
Exemplo Prático:RMI
Adaptado de http://www.inf.ufsc.br/~bosco/ensino/ine5645/CalculadoraRMI.txt
Exemplo Prático● Definir uma interface que declara os métodos remotos
● O programa servidor:
○ deve incluir uma classe que implementa essa interface.
○ deve criar um objeto remoto e registrá-lo no serviço de
nomes (rmi registry)
● O programa cliente:
○ deve perguntar ao serviço de nomes pela referência do
objeto remoto.
○ deve invocar o método sobre o objeto remoto.
Interface
Exemplo Prático● Definir uma interface que declara os métodos remotos
● O programa servidor:
○ deve incluir uma classe que implementa essa interface.
○ deve criar um objeto remoto e registrá-lo no serviço de
nomes (rmi registry)
● O programa cliente:
○ deve perguntar ao serviço de nomes pela referência do
objeto remoto.
○ deve invocar o método sobre o objeto remoto.
Implementação da Interface
Exemplo Prático● Definir uma interface que declara os métodos remotos
● O programa servidor:
○ deve incluir uma classe que implementa essa interface.
○ deve criar um objeto remoto e registrá-lo no serviço
de nomes (rmi registry)
● O programa cliente:
○ deve perguntar ao serviço de nomes pela referência do
objeto remoto.
○ deve invocar o método sobre o objeto remoto.
Servidor
Exemplo Prático● Definir uma interface que declara os métodos remotos
● O programa servidor:
○ deve incluir uma classe que implementa essa interface.
○ deve criar um objeto remoto e registrá-lo no serviço de
nomes (rmi registry)
● O programa cliente:
○ deve perguntar ao serviço de nomes pela referência
do objeto remoto.
○ deve invocar o método sobre o objeto remoto.
http://aquilesburlamaqui.wdfiles.com/local--files/projeto-e-implementacao-de-middleware/03-RPC&RMI.ppt
Cliente
FARLEY, Jim at.al.. Java Enterprise in a Nutshell: A Desktop Quick Reference
Relações entre os componentes
Exemplo: Arquitetura de uma loja virtualFARLEY, Jim at.al.. Java Enterprise in a Nutshell: A Desktop Quick Reference
Referências● TANENBAUM, Andrew S.; STEEN, Maarten. Sistemas Distribuídos: Princípios e Paradigmas. 2ª
Edição.● FARLEY, Jim at.al.. Java Enterprise in a Nutshell: A Desktop Quick Reference● ROMAN, Ed; et al. Dominando Enterprise Javabeans. Bookman Editora, 2009● Integração de Sistemas com Webservices, JMS e EJB <http://www.k19.com.br>● Oracle; Documentação Oficial RMI <https://docs.oracle.com/javase/tutorial/rmi/>● UNICAMP; Curso POO Java <http://www.dca.fee.unicamp.br/cursos/PooJava/objdist/rmiact.html>● UFSC <http://www.inf.ufsc.br/~bosco/ensino/ine5645/CalculadoraRMI.txt>● <http://www.javacoffeebreak.com/articles/rmi_corba/index.html>● <http://neoramon.blogspot.com.br/2009/11/tcp-udp-e-rmi-minhas-observacoes-sobre.html>● <http://aquilesburlamaqui.wdfiles.com/local--files/projeto-e-implementacao-de-middleware/03-RPC&
RMI.ppt>
Dúvidas ?