Tutorial J2EE. Aprendendo EJB de uma maneira fácil! Paulo Silveira

Documentos relacionados
Session Bean Stateful

Session Beans. Modelam o estado não-persistente

Enterprise Java Beans (I)

O caminho do inferno está pavimentado de boas intenções. Marx.

Aplicações distribuídas em Java Parte II: Componentes EJB

Ferramenta MVCASE - Estágio Atual: Especificação, Projeto e Construção de Componentes

EJB. Session Beans. J2EE (C. Geyer) Introdução a SessionBean 1

J530 - Enterprise JavaBeans. Introdução a EJB e Stateless. Session Beans. argonavis.com.br. Helder da Rocha (helder@acm.org)

Entity Beans. Rodrigo Campiolo João Bosco M. Sobral. Computação Distribuída Sistemas de Informação

Stateful Session Beans

J2EE. Apresentado por Nuno Nunes. 25 de Novembro de 2004 TM 1

J2EE. J2EE - Surgimento

Entity Beans CMP. O que é CMP? Criação de Entity Beans CMP Deployment no JBoss EJB-QL Exemplo Prático

J530 - Enterprise JavaBeans. Message-driven Beans. argonavis.com.br. Helder da Rocha

Java 2 Enterprise Edition Session Beans

Enterprise JavaBeansTM

Java 2 Enterprise Edition Construção de Aplicações EJB

Aplicações Distribuídas Cliente/ Servidor Corporativas

Objetos e Componentes Distribuídos: EJB

INE 5612 Professor: Frank Siqueira. Leonardo Silva Jean Ercilio Thiago

Introdução ao Desenvolvimento de

Enterprise Java Beans

Aula 5: J2EE Application Assembly Model

Sumário. Parte Um Visão geral Introdução... 23

UFG - Instituto de Informática

Java para Web & EJB. Teoria, prática e questões Módulo Introdução e Servlets

Persistência BD / drivers

UNIDADE IV ENTERPRISE JAVABEANS

Introdução: EJBs de Sessão. Prof. Fellipe Aleixo

J820. Testes em J2EE com. Jakarta C A C T U S. argonavis.com.br. Helder da Rocha

Orientação a Objetos AULA 09

Injeção de Dependências e Spring

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Aspectos para Construção de Aplicações Distribuídas

Padrões de Projeto para Estruturação de Aplicações Distribuídas Enterprise JavaBeans

J530 - Enterprise JavaBeans. Geração automática de EJB com. XDoclet. argonavis.com.br. Helder da Rocha

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP. Prof. Me. Sérgio Carlos Portari Júnior

Java 2 Enterprise Edition RMI-IIOP e Enterprise JavaBeans

Vamos falar de Hibernate?

Objetos e Componentes Distribuídos: EJB e CORBA

Enterprise Java Beans

Carlos S. Rodrigues Leonardo Lino Vieira Eric Felipe Barboza Antonio Vasconcellos

J550 Integração com Bancos de Dados

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

AspectJ - Programação Orientada a Aspectos em Java. Sérgio Soares Centro de Informática Universidade Federal de Pernambuco

Aplicações Distribuídas

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Boas práticas com Orientação a Objetos. Paulo Silveira

15/4/15. Processamento Paralelo Middleware Orientado a Objetos. Sistema operacional é a única infraestrutura para interação. Middleware é adicionado

2 Criar uma Enterprise Application que num módulo EJB irá conter um ou vários Beans.

Collections Framework

Classes e Objetos POO

Modificadores de Acesso e Atributos de Classe

Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Aplicação da Arquitetura Multicamadas Utilizando Java. Raquel Schlickmann Orientador: Marcel Hugo

Enterprise JavaBeans. Java Deployment Course. por Jorge H. C. Fernandes DI-UFPE Julho de 1999

Relacionamentos entre objetos

Strings e Arrays POO

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

DATA ACCESS OBJECT (DAO)

Modelo de Componentes CORBA

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Computação II Orientação a Objetos

9 Classes Abstractas e Interfaces

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

LÓGICA DE PROGRAMAÇÃO (JAVA) POLIMORFISMO. Professor Carlos Muniz

JBoss Seam. Vinicius Senger Co-fundador Globalcode Alberto J Lemos (Dr. Spock) Instrutor Globalcode. Globalcode Open4Education

APIs Java para Web Services

Linguagem de Programação II Implementação

JUnit. Alexandre Menezes Silva Eduardo Manuel de Freitas Jorge

Centro de Estudos e Sistemas Avançados do Recife. Desconstruindo EJB. Luiz Borba Luiz Eugênio (left)

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Sistemas Distribuídos

Programação Orientada a Objetos

Acesso a Banco de Dados usando C#

Java 2 Enterprise Edition Uma aplicação J2EE completa

Arquitetura de Aplicações J2EE. Jorge Fernandes Outubro de 2003

JAVA PARA WEB E EJB APLICAÇÕES WEB, SERVIDORES DE APLICAÇÃO, CONTAINERS WEB

Padrão de projeto de software

Computação II Orientação a Objetos

IBM WebSphere MQ. Introdução

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Classe Interna (Inner)

Sistemas Operacionais

Java - Conexão ao Banco de Dados usando JDBC

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

Desenvolvimento Web com Java. Sérgio Lopes Caelum -

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Visitor. Um problema a resolver. Temos uma hierarquia de classes, provavelmente um Composite Exemplo: Numa rede elétrica, temos a seguinte hierarquia:

Entity Beans. Introdução Entity Beans BMP

Transcrição:

Tutorial J2EE Aprendendo EJB de uma maneira fácil! Paulo Silveira

Aprendendo J2EE RemoteException ApplicationServer SessionBean JNDI ejb-jar.xml EJBLocalHome CMP RequiresNew CMR EJBContext

Aprendendo J2EE Quem já tentou aprender EJBs? Maiores dificuldades?

Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente comum). Superar as enormes dificuldades iniciais! O que realmente é EJB? Quando preciso usar? Quando eu estiver codificando, quero saber realmente o que estou fazendo. Porque esse monte de interfaces e XMLs?

Tutoriais comuns Como não aprender J2EE

Home Interface public interface HelloHome extends EJBHome { Hello create() throws CreateException, RemoteException; }

Object Interface public interface Hello extends EJBObject { } String sayhello() throws RemoteException;

Component public class HelloBean implements SessionBean { public void ejbcreate() throws CreateException {} public String sayhello() { return Olá Mundo ; } }

ejb-jar.xml... <session> <ejb-name>hello</ejb-name> <home>hellohome</home> <remote>hello</remote> <ejb-class>hellobean</ejb-class> </session>... Ou então usa uma ferramenta estranha para gerá-lo, e a gente não sabe o que acontece!

Cliente Context initialcontext = new InitialContext(); HelloHome home = (HelloHome) initialcontext.get( HelloHome ); Hello hello = home.create(); System.out.println(Hello.sayHello());

Para que tudo isso???????????????

Incrível resultado Olá Mundo.

Porque J2EE? Motivação Exemplo: abrindo conexões com BD

Abrindo uma conexão para cada void save() { } Connection con = DriverManager.getConnection( jdbc://my sql... ); Statement s = con.createstatement();... BD

Uma conexão para todos static Connection con; void save() { Statement s = con.createstatement();... } BD

Pool de conexões List list = new ArrayList(); public synchronized Connection get() { return (Connection) list.remove(0); } public synchronized void free(coonection c) { BD list.add(c); }

Qual é a melhor solução?

Nenhuma das anteriores! Qual o número de conexões que devem ser abertos pelo Pool? Esses números podem variar com o dia! Você realmente precisa se preocupar com isso?

Lógica de negócio Parte crucial da aplicação Não envolve aspectos gerais da aplicação, como segurança, logging, etc. if(usuario.isadmin()) { logger.log( apagando usuario ); userdao.delete(usuario); }

Você tem de se importar com: banco lógica de negócio segurança log Sua lógica de negócio ou aplicaçao está fazendo muita coisa!

Antipatterns.com

Antipatterns.com

Separation of Concerns

Preocupações da aplicação Você não tem tempo de escrever um pool super eficiente Você não quer perder tempo fazendo milhares de IFs de segurança repetidos Você não quer tem tempo de se preocupar com concorrência ou transações! Socorro! Não quero mais SQL!

Carrinho de compras A Amazon precisa de um sistema que aguente 1 milhão de carrinhos simultâneamente instanciados. Você precisa implementar o site inteiro, e ainda se preocupar com o volume de acesso que ele vai ter!

Inversão de Controle salvador! lógica de negócios aplicação? banco segurança pooling log

EJB Enterprise Java Beans fazem principalmente o papel de lógica de negócios e entidades? ejb ejb ejb ejb

Servidor de Aplicação Uma especificação para a moradia dos EJBs. Ele que serve as necessidades dos EJBs. Quem quiser, pode implementar um servidor de aplicação (application server) JBoss WebLogic WebSphere Jonas

Carrinho de Compras Precisamos de um sistema que manipule milhões de carrinhos de compras simultaneamente (amazon.com). Necessidades: Transação Acesso multi threaded Persistência Segurança

Idéia! Conversamos com um objeto de mentira. carrinho.add(livro); interface O servidor trata a segurança, pooling, log, transação, thread, etc...

Por enquanto, o que precisamos? O Carrinho de compras de mentira O Carrinho de compras de verdade (EJB). interface Carrinho (o servidor implementa) class CarrinhoEJB (com a lógica)

O EJB (o que está faltando?) class CarrinhoEJB implements SessionBean { List compras; double total; } public void add(livro livro) { compras.add(livro); total += livro.getpreco(); } public double gettotal() { return total; } // + um monte de metodos estranhos

É $caro$ construir um EJB! Carrinhos usados! interface

O reciclador de ejbs! class CarrinhoEJB implements SessionBean { List compras; } public void ejbcreate() throws CreateException { compras = new ArrayList(); } public void add(livro livro) { compras.add(livro); } // + um monte de metodos estranhos e o gettotal()

A interface interface Carrinho extends EJBLocalObject { } public void add (Livro livro); public double gettotal(); // outros metodos que seria interessantes

O que mais falta? Já conseguimos brincar com nosso carrinho. carrinho.addlivro(livro); carrinho.gettotal(); Como acessar um carrinho, ou criar um novo?

Idéia: A Casa dos EJBs Existe um objeto que é resposável por criar, localizar, remover EJBs. É a casa de cada EJB. CasaDosCarrinhos casa =... Carrinho carrinho = casa.create(); carrinho.add(livro);...

A Casa Acessando a casa dos carrinhos, você não acessa um em específico. É o ponto de entrada. casa interface

Código da casa interface CasaDosCarrinhos extends EJBLocalHome { } Carrinho create() throws CreateException; A casa é a Home! O nome correto dela seria CarrinhoHome

Outras vantagens Pra que tudo isso? Porque não instanciar diretamente os CarrinhoEJBs? Um milhão de carrinhos de compra Todos estão ativos ao mesmo tempo? E se alguém deixar o browser aberto? 1 milhão de objetos são muitos megas!

Passivação Apesar de termos 1 milhão de clientes acessando os carrinhos, alguns carrinhos não são tão acessados. 10 mil carrinhos acessados no último minuto 990 mil carrinhos não acessados no último minuto ejb ejb ejb ejb ejb ejb ejb ejb

Passivando! 990 mil carrinhos não acessados no último minuto ejb ejb ejb ejb Você precisa se preocupar com isso? ciclo de vida... HD

E se... precisar que o acesso a um EJB seja transacional? precisar logar todo acesso a EJBs? precisar definir regras de segurança? precisar de acesso remoto? Você precisa se preocupar com isso? Alguém que me sirva!

E o XML? Para você rodar uma aplicação no seu servidro de aplicação, você precisa de um XML, que fale quem são seus EJBs: Caro servidor, meu EJB chamado CarrinhoDeCompras é um EJB, a casa dele se chama CasaDosCarrinhos, e a interface dele para os clientes se chama Carrinho. E quem tem a lógica em si, é o CarrinhoEJB. Atenciosamente, programador

Tipos de EJBs SessionBeans Serviços caros ou muito usados! (exemplos?) Dois tipos! Stateless e Stateful EntityBeans Representam entidades (veremos). MessageDrivenBeans Consomem mensagens de determinados assuntos.

Entidades: uma introdução

Entidades Implementamos um SessionBean Gostaríamos agora de não nos preocupar mais com SQLs e persistência. compra.add(carrinho); compra.save(); Aqui dentro vai um SQL gigante! Será que foi um bom momento para gravar a compra?

Quando persistir? ejb ejb ejb ejb ejb ejb Você precisa se preocupar com isso? HD

Persistência transparente! CasaDosUsuarios casa =... Usuario user = casa.create( paulo ); user.setsenha( xpto ); user.setendereco( lins de vasconcelos ); // nao existe save!!! Algum dia, será persistido! Quem tem de se preocupar com isso não é você! Container Managed Persistense (CMP)

Container Managed Relationship compra.add(livro); Livro tambem é uma entidade! Quem deve se preocupar com a geração de primary keys e foreign keys?

Aspect Oriented Programming

Programação orientada a Aspecto Hype do momento! Servidores de aplicação usam programação orientada a aspecto. Porque?

Um aspecto: segurança Ao adicionar um usário: if(!usuario.isadmin()) { throw new SecurityException(); } Ao remover um usuário: if(!usuario.isadmin()) { throw new SecurityException(); }

Ao visualizar encomendas if(!usuario.isadmin()) { } throw new SecurityException(); Visualizar encomendas e editar usuários tem alguma relação em comum? Apenas o ASPECTO de segurança

Idéia! De alguma maneira, codificar: sempre que os métodos X e Y da classe Usuario e os métodos Z e W da classe Encomenda forem acessados, rode: if(!usuario.isadmin()) { } throw new SecurityException();

Linguagens e Frameworks AspectJ: A Xerox começou seu desenvolvimento, e hoje em dia está sobre o projeto Eclipse. AspectWerkz: um sueco que resolveu criar um framework de aspectagem. O brasileiro Carlos Villela colabora com o projeto.

Próximos passos! Agora estão prontos paraler um péssimo tutorial de EJB!!! http://java.sun.com/j2ee/tutorial/1_3- fcs/index.html Ou procurem por j2ee tutorial no search do java.sun.com

Próximos passos! Baixem o jboss 3.2.1 http://www.jboss.org Para CMP e CMR, procurem também nos tutoriais da Sun.

Dificuldades que irão encontrar Escrevendo XML do ejb-jar Não usem ferramentas na 1a vez! Empacotando um jar de ejb Fazendo o deploy Rodando o cliente

Obrigado! Perguntas e Respostas Paulo Silveira www.guj.com.br