A apresentação visa repensar os padrões JavaEE para evitar o uso de padrões obsoletos, focando no container server-side, para criar arquiteturas enxutas.
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
Repensando padrões e boas práticas java ee
1. Repensando padrões
e boas práticas Java EE
Adriano Tavares
adriano.tavares@arkhi.com.br
20 de Outubro, 2012
2.
3. Palestrante
ü Adriano de Pinho Tavares;
ü Arquiteto de Software na Arkhi;
ü Certificações relevantes;
– SCJP, SCEA, IBMOOAD, IBMRUP, IBMSOA;
ü Blog: http://adrianotavares.com
4. Motivação
...evitar
Repensar os
padrões
padrões
obsoletos
JavaEE...
J2EE...
...criar
... foco no
arquiteturas
container
enxutas
server-side...
JavaEE.
5. Tópicos
ü Breve história do J2EE;
ü Core J2EE patterns;
ü A evolução do J2EE para o Java EE;
ü Repensando padrões Java EE;
ü Arquiteturas enxutas;
– Padrões para SOA e DDD;
ü Conclusão e perguntas.
6. Breve história do J2EE
1995: Applets
1996: Servlets
1997: EJB
1998: JMS
1999: J2EE 1.2,
Nasce a plataforma J2EE
2001: J2EE 1.3,
Core J2EE Patterns
2003: J2EE 1.4
7. EJB 2 Stateless
public class HelloWorldBean implements SessionBean {
public void setSessionContext(SessionContext sc) { }
public void ejbCreate() {}
public void ejbActivate() {} //SFSB only
public void ejbPassivate() {}//SFSB only
public void ejbRemove() {}
public void sayHello() {
System.out.println("Hello!");
}
}
10. Maior equívoco do EJB 2
ü Persistência com EJB 2.x CMP
– Entidade persistentes podem ser
acessadas remotamente;
– Baixo desempenho;
– No pior caso, cada getter e setter abria
uma nova transação;
ü Necessidade de boas práticas, como
Session Facade.
11. Core J2EE Patterns
ü Mesmo para lógicas simples artefatos
obrigatórios;
ü Código altamente dependente da
API;
ü A separação entre a realização
funcional e a plataforma não existia;
ü Muitos padrões foram introduzidos
para encapsular a API EJB 2.
14. Mesmo pesado, porque o
J2EE se popularizou?
ü Benefícios
– Padronização;
– Servidor de Aplicação;
– Multicamadas;
– Aplicações Web;
– Acesso Remoto;
– Modelo Single-thread;
– Gerenciamento de
estado;
– Controle de transação
e concorrência;
– Tudo isso aplicado de
forma declarativa
(XML), sem
codificação...
16. A Evolução para o Java EE
Leve
Portável
Extensível
Alto-Desempenho
Simples
Fácil de desenvolver.
17. ...do J2EE para o Java EE!
2006: Java EE 5
novo modelo de programação
2009: Java EE 6
simples, enxuto e leve.
2012: Java EE 7 Q4
Cloud computing
18. Java EE: XML vai pro banco...
...entra Annotation!
19. Java EE, princípios
Convention over Configuration
• XML opcional;
Aspect-Oriented Programming
• Pontos de extenção;
Context and Dependency Injection
• Código limpo.
20. EJB 3 Session Bean
@Stateless
public class HelloWorldBean {
public String sayHello(String name) {
return "Hello from: ” + name;
}
}
21. CDI
ü Ao invés códigos de baixo nível:
try{
Context ctx = new InitialContext();
Object proxy = ctx.lookup(“service”);
ServiceHome home =
(ServiceHome)PortableRemoteObject.narrow(proxy,ServiceHome.class);
Service service = home.create();
}catch(Exception ex){}
ü Ou encapsulamento com padrões (Factory):
Service service = ServiceFactory.getInstance().createService();
ü Apenas injeção de dependências:
@EJB
private Service service;
22. Injeção de EJBs
@Stateless
public class HelloWorldBean {
@EJB
private Service service;
public String sayHello(String id) {
return "Hello ” + service.getName(id);
}
}
23. Uso da anotação @EJB
Servlet JSP JSF
Java Client
JAX-WS JAX-RS
(Main Class)
EJB
24. EJB 3 com JPA
@Stateless
public class BookServiceBean {
@PersistenceContext
private EntityManager em;
public void create(Book book) {
em.persist(book);
}
}
25. EJB 3 Transações
@Stateless
@TransactionAttribute(
TransactionAttributeType.MANDATORY)
public class BookServiceBean {
@PersistenceContext
private EntityManager em;
public void create(Book book) {
em.persist(book);
}
}
26. Injeção de outros Recursos
@Stateless
public class DataSourceInjectionBean {
@Resource(name = "mail/Context")
private Session mailContext;
@Resource(name = "jms/Queue")
private Queue queue;
@Resource(name = "jms/ConnectionFactory")
private ConnectionFactory eocFactory;
@Resource(name="jdbc/sample")
private DataSource ds;
public void accessResources(){
//use resources
}
}
30. DAO + DTO: Dead or Alive?
Problema
ü Encapsular
Persistência
com EJB 2;
Solução
Obsoleto
ü DRY!
ü JPA + EJB 3.
31. Service Locator
Problema
ü Encapsular Lookup JNDI para acessar EJB
ou outros recursos;
Solução
ü DRY! Opcional
ü CDI + EJB 3;
ü Interfaces opcionais;
ü Para os casos excepcionais BeanLocator.
34. Business Delegate
Problema
ü O cliente EJB tinha que capturar, ou
pelo menos esconder, as exceções de
EJB 2;
Solução Obsoleto
ü CDI + EJB 3;
ü As exceções de EJB 2 foram
convertidos para exceções do
sistema.
35. Value list Handle
Problema
ü Paginação de EJB 2
Solução
ü JPA + EJB 3
Obsoleto
ü Desde a introdução do JPA as
entidades podem ser facilmente
desacopladas sem esforço adicional.