Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial J2 EE
Tutorial J2 EE
Aprendendo J2EE
RemoteException
SessionBean
ApplicationServer
JNDI
CMP
EJBLocalHome
ejb-jar.xml
RequiresNew
CMR
EJBContext
Aprendendo J2EE
l Quem
Tutoriais comuns
Como no 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 ento usa uma ferramenta estranha para
ger-lo, e a gente no sabe o que acontece!
Cliente
Context initialContext = new
InitialContext();
HelloHome home = (HelloHome)
initialContext.get(HelloHome);
Hello hello = home.create();
System.out.println(Hello.sayHello());
Incrvel resultado
Ol Mundo.
Porque J2EE?
Motivao
Exemplo: abrindo conexes com BD
Pool de conexes
List list = new ArrayList();
public synchronized Connection get() {
return (Connection) list.remove(0);
}
public synchronized void free(Coonection
c) {
BD
list.add(c);
}
Lgica de negcio
l Parte
crucial da aplicao
l No envolve aspectos gerais da
aplicao, como segurana, logging, etc.
if(usuario.isAdmin()) {
logger.log(apagando usuario);
userDao.delete(usuario);
}
segurana
lgica de negcio
log
Sua lgica de negcio ou aplicaao est fazendo
muita coisa!
Antipatterns.com
Antipatterns.com
Separation of Concerns
Preocupaes da aplicao
l Voc
Carrinho de compras
lA
l Voc
Inverso de Controle
salvador!
banco
?
segurana
lgica de negcios
aplicao
pooling
log
EJB
l Enterprise
Java Beans
fazem principalmente o papel de
lgica de negcios e entidades
?
ejb
ejb
ejb
ejb
Servidor de Aplicao
Uma especificao para a moradia dos EJBs.
Ele que serve as necessidades dos EJBs.
Quem quiser, pode implementar um servidor de
aplicao (application server)
l JBoss
l WebLogic
l WebSphere
l Jonas
Carrinho de Compras
Precisamos de um sistema que manipule
milhes de carrinhos de compras
simultaneamente (amazon.com).
Necessidades:
l Transao
l Acesso multi threaded
l Persistncia
l Segurana
Idia!
l Conversamos
com um objeto de
mentira.
carrinho.add(livro);
interface
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
}
A Casa
Acessando a casa
dos carrinhos, voc
no acessa um em
especfico.
o ponto de entrada.
casa
interface
Cdigo 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 no instanciar
diretamente os CarrinhoEJBs?
l Um
Passivao
l Apesar
ejb
ejb
ejb
ejb
ejb
ejb
Passivando!
990 mil carrinhos no acessados
no ltimo minuto
ejb
ejb
ejb
ejb
ciclo de vida...
Voc precisa se
preocupar com isso?
HD
E se...
l precisar
E o XML?
Para voc rodar uma aplicao no seu servidro
de aplicao, voc precisa de um XML, que
fale quem so 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 lgica em si, o CarrinhoEJB.
Atenciosamente, programador
Tipos de EJBs
l SessionBeans
Entidades
Implementamos um SessionBean
Gostaramos agora de no nos preocupar
mais com SQLs e persistncia.
compra.add(carrinho);
compra.save();
Quando persistir?
ejb
ejb
ejb
ejb
ejb
Voc precisa se
preocupar com isso?
HD
ejb
Persistncia 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 no
voc!
Container Managed Persistense (CMP)
do momento!
l Servidores de aplicao usam
programao orientada a aspecto.
Porque?
Um aspecto: segurana
Ao adicionar um usrio:
if(!usuario.isAdmin()) {
throw new SecurityException();
}
Ao remover um usurio:
if(!usuario.isAdmin()) {
throw new SecurityException();
}
l Ao
visualizar encomendas
if(!usuario.isAdmin()) {
throw new SecurityException();
}
l Visualizar
Idia!
De alguma maneira, codificar:
sempre que os mtodos X e Y da classe
Usuario e os mtodos Z e W da classe
Encomenda forem acessados, rode:
if(!usuario.isAdmin()) {
throw new SecurityException();
}
Linguagens e Frameworks
l AspectJ:
l AspectWerkz:
Prximos passos!
Agora esto prontos paraler um pssimo
tutorial de EJB!!!
http://java.sun.com/j2ee/tutorial/1_3fcs/index.html
Ou procurem por j2ee tutorial no search
do java.sun.com
Prximos passos!
Baixem o jboss 3.2.1
http://www.jboss.org
Para CMP e CMR, procurem tambm nos
tutoriais da Sun.
XML do ejb-jar
um jar de ejb
l Fazendo o deploy
l Rodando o cliente