tutorial j2ee - ime-usppeas/files/tutorialj2ee.pdf · objetivos desse tutorial público: quem não...
TRANSCRIPT
![Page 1: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/1.jpg)
Tutorial J2EE
Aprendendo EJB de uma maneira fácil!
Paulo Silveira
![Page 2: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/2.jpg)
Aprendendo J2EE
RemoteException
SessionBean
ejb-jar.xml
CMP
CMR
ApplicationServer
JNDI
EJBLocalHome
RequiresNew
EJBContext
![Page 3: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/3.jpg)
Aprendendo J2EE
lQuem já tentou aprender EJBs?lMaiores dificuldades?
![Page 4: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/4.jpg)
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!
l O que realmente é EJB?l Quando preciso usar?l Quando eu estiver codificando, quero saber realmente
o que estou fazendo.l Porque esse monte de interfaces e XMLs?
![Page 5: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/5.jpg)
Tutoriais comuns
Como não aprender J2EE
![Page 6: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/6.jpg)
Home Interface
public interface HelloHome extends EJBHome {
Hello create() throws CreateException,RemoteException;
}
![Page 7: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/7.jpg)
Object Interface
public interface Hello extends EJBObject{
String sayHello() throwsRemoteException;
}
![Page 8: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/8.jpg)
Component
public class HelloBean implementsSessionBean {
public void ejbCreate() throwsCreateException {}
public String sayHello() {return “Olá Mundo”;
}}
![Page 9: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/9.jpg)
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!
![Page 10: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/10.jpg)
Cliente
Context initialContext = new InitialContext();
HelloHome home = (HelloHome) initialContext.get(“HelloHome”);
Hello hello = home.create();System.out.println(Hello.sayHello());
![Page 11: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/11.jpg)
Para que tudo isso?
??????????????
![Page 12: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/12.jpg)
Incrível resultado
Olá Mundo.
![Page 13: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/13.jpg)
Porque J2EE?
Motivação
Exemplo: abrindo conexões com BD
![Page 14: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/14.jpg)
void save() {Connection con = DriverManager.getConnection(“jdbc://mysql...”);
Statement s = con.createStatement();...
}
Abrindo uma conexão para cada
BD
![Page 15: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/15.jpg)
Uma conexão para todos
static Connection con;void save() {
Statement s = con.createStatement();...
} BD
![Page 16: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/16.jpg)
Pool de conexões
List list = new ArrayList();public synchronized Connection get() {
return (Connection) list.remove(0);}public synchronized void free(Coonection
c) {list.add(c);
}
BD
![Page 17: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/17.jpg)
Qual é a melhor solução?
![Page 18: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/18.jpg)
Nenhuma das anteriores!
lQual o número de conexões que devem ser abertos pelo Pool?
l Esses números podem variar com o dia!
Você realmente precisa se preocupar com isso?
![Page 19: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/19.jpg)
Lógica de negócio
l Parte crucial da aplicaçãol Não envolve aspectos gerais da
aplicação, como segurança, logging, etc.
if(usuario.isAdmin()) {logger.log(“apagando usuario”);userDao.delete(usuario);
}
![Page 20: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/20.jpg)
Você tem de se importar com:
lógica de negócio
banco
segurança
log
Sua lógica de negócio ou aplicaçao está fazendo muita coisa!
![Page 21: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/21.jpg)
Antipatterns.com
![Page 22: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/22.jpg)
Antipatterns.com
![Page 23: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/23.jpg)
Separation of Concerns
![Page 24: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/24.jpg)
Preocupações da aplicação
l Você não tem tempo de escrever um pool super eficiente
l Você não quer perder tempo fazendo milhares de IFs de segurança repetidos
l Você não quer tem tempo de se preocupar com concorrência ou transações!
l Socorro! Não quero mais SQL!
![Page 25: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/25.jpg)
Carrinho de compras
l A Amazon precisa de um sistema que aguente 1 milhão de carrinhos simultâneamente instanciados.
l Você precisa implementar o site inteiro, e ainda se preocupar com o volume de acesso que ele vai ter!
![Page 26: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/26.jpg)
Inversão de Controle
lógica de negócios
aplicação
banco
segurança
log
?
pooling
salvador!
![Page 27: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/27.jpg)
EJB
l Enterprise Java Beansfazem principalmente o papel de
lógica de negócios e entidades
ejb
ejbejb
ejb?
![Page 28: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/28.jpg)
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)
l JBossl WebLogicl WebSpherel Jonas
![Page 29: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/29.jpg)
Carrinho de Compras
Precisamos de um sistema que manipule milhões de carrinhos de compras simultaneamente (amazon.com). Necessidades:
l Transaçãol Acesso multi threadedl Persistêncial Segurança
![Page 30: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/30.jpg)
Idéia!
l Conversamos com um objeto de “mentira”.
carrinho.add(livro);
O servidor trata a segurança, pooling, log, transação, thread, etc...
interface
![Page 31: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/31.jpg)
Por enquanto, o que precisamos?
lO Carrinho de compras de mentiralO Carrinho de compras de verdade
(EJB).
interface Carrinho (o servidor implementa)class CarrinhoEJB (com a lógica)
![Page 32: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/32.jpg)
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
}
![Page 33: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/33.jpg)
É $caro$ construir um EJB!
interface
Carrinhos usados!
![Page 34: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/34.jpg)
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()
}
![Page 35: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/35.jpg)
A interface
interface Carrinho extends EJBLocalObject {
public void add (Livro livro);public double getTotal();// outros metodos que seria interessantes
}
![Page 36: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/36.jpg)
O que mais falta?
Já conseguimos brincar com nosso carrinho.
carrinho.addLivro(livro);carrinho.getTotal();
Como acessar um carrinho, ou criar um novo?
![Page 37: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/37.jpg)
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); ...
![Page 38: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/38.jpg)
A Casa
interface
casa
Acessando a casa dos carrinhos, você não acessa um em específico.
É o ponto de entrada.
![Page 39: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/39.jpg)
Código da casa
interface CasaDosCarrinhos extends EJBLocalHome {
Carrinho create() throws CreateException;
}
A casa é a Home! O nome “correto” dela seria CarrinhoHome
![Page 40: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/40.jpg)
Outras vantagens
Pra que tudo isso? Porque não instanciar diretamente os CarrinhoEJBs?
l Um milhão de carrinhos de compral Todos estão ativos ao mesmo tempo?l E se alguém deixar o browser aberto?
1 milhão de objetos são muitos megas!
![Page 41: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/41.jpg)
Passivação
l Apesar de termos 1 milhão de clientes acessando os carrinhos, alguns carrinhos não são tão acessados.
ejb
ejbejb
ejbejb
ejbejb
ejb
10 mil carrinhos acessados no último minuto
990 mil carrinhos não acessados no último minuto
![Page 42: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/42.jpg)
Passivando!
ejb
ejbejb
ejb
990 mil carrinhos não acessados no último minuto
HD
Você precisa se preocupar com isso?
ciclo de vida...
![Page 43: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/43.jpg)
E se...
l precisar que o acesso a um EJB seja transacional?
l precisar logar todo acesso a EJBs?l precisar definir regras de segurança?l precisar de acesso remoto?
Você precisa se preocupar com isso?
Alguém que me sirva!
![Page 44: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/44.jpg)
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”
![Page 45: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/45.jpg)
Tipos de EJBs
l SessionBeansServiços caros ou muito usados! (exemplos?)Dois tipos! Stateless e Stateful
l EntityBeansRepresentam entidades (veremos).
lMessageDrivenBeansConsomem mensagens de determinados
assuntos.
![Page 46: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/46.jpg)
Entidades: uma introdução
![Page 47: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/47.jpg)
Entidades
Implementamos um SessionBeanGostarí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?
![Page 48: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/48.jpg)
Quando persistir?
ejb
ejbejb
ejb
HD
ejb
ejb
Você precisa se preocupar com isso?
![Page 49: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/49.jpg)
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)
![Page 50: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/50.jpg)
Container Managed Relationship
compra.add(livro);
Livro tambem é uma entidade!
Quem deve se preocupar com a geração de primary keys e foreign keys?
![Page 51: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/51.jpg)
Aspect Oriented Programming
![Page 52: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/52.jpg)
Programação orientada a Aspecto
l Hype do momento!l Servidores de aplicação usam
programação orientada a aspecto. Porque?
![Page 53: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/53.jpg)
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();
}
![Page 54: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/54.jpg)
l Ao visualizar encomendasif(!usuario.isAdmin()) {throw new SecurityException();
}
l Visualizar encomendas e editar usuários tem alguma relação em comum?
Apenas o ASPECTO de segurança
![Page 55: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/55.jpg)
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();
}
![Page 56: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/56.jpg)
Linguagens e Frameworks
l AspectJ: A Xerox começou seu desenvolvimento, e hoje em dia está sobre o projeto Eclipse.
l AspectWerkz: um sueco que resolveu criar um framework de “aspectagem”. O brasileiro Carlos Villela colabora com o projeto.
![Page 57: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/57.jpg)
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
![Page 58: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/58.jpg)
Próximos passos!
Baixem o jboss 3.2.1http://www.jboss.org
Para CMP e CMR, procurem também nos tutoriais da Sun.
![Page 59: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/59.jpg)
Dificuldades que irão encontrar
l Escrevendo XML do ejb-jarNão usem ferramentas na 1a vez!
l Empacotando um jar de ejbl Fazendo o deployl Rodando o cliente
![Page 60: Tutorial J2EE - IME-USPpeas/files/TutorialJ2EE.pdf · Objetivos desse tutorial Público: quem não conhece EJB, ou quem já conhece, mas não sabe o que está fazendo (extremamente](https://reader031.vdocuments.site/reader031/viewer/2022021712/5b9580e209d3f2c2678c61a9/html5/thumbnails/60.jpg)
Obrigado! Perguntas e Respostas
Paulo Silveira www.guj.com.br