SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
Repensando padrões
e boas práticas Java EE
       Adriano Tavares
   adriano.tavares@arkhi.com.br
         20 de Outubro, 2012
Palestrante
ü Adriano de Pinho Tavares;
ü Arquiteto de Software na Arkhi;

ü Certificações relevantes;
  –  SCJP, SCEA, IBMOOAD, IBMRUP, IBMSOA;


ü Blog: http://adrianotavares.com
Motivação
                   ...evitar
Repensar os
                  padrões
  padrões
                  obsoletos
 JavaEE...
                    J2EE...

                    ...criar
 ... foco no
                 arquiteturas
 container
                   enxutas
server-side...
                   JavaEE.
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.
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
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!");
    }
}
EJB 2 Interfaces
public interface HelloWorldRemoteHome extends EJBHome {
   HelloWorldRemote create() throws CreateException,
RemoteException;
}

public interface HelloWorldRemote extends EJBObject {
   void sayHello() throws RemoteException;
}

public interface HelloWorldLocalHome extends EJBLocalHome {
   HelloWorldLocal create() throws CreateException;
}

public interface HelloWorldLocal extends EJBLocalObject {
   void sayHello();
}
EJB 2 XML Deployment
                   Descriptor
<ejb-jar>
     <display-name>HelloWorldEJB</display-name>
     <enterprise-beans>
          <session>
               <display-name>HelloWorldSB</display-name>
               <ejb-name>HelloWorldBean</ejb-name>
               <home>...helloworld.HelloWorldRemoteHome</home>
               <remote>...helloworld.HelloWorldRemote</remote>
               <ejb-class>...helloworld.HelloWorldBean</ejb-class>
               <session-type>Stateless</session-type>
              <transaction-type>Container</transaction-type>
         </session>
    </enterprise-beans>
    <assembly-descriptor>
         <container-transaction>
              <method>
                   <ejb-name>HelloWorldBean</ejb-name>
                   <method-name>sayHello</method-name>
               </method>
               <trans-attribute>RequiresNew</trans-attribute>
          </container-transaction>
     </assembly-descriptor>
</ejb-jar>
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.
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.
Core J2EE Patterns




(2001)         (2003)
EJB 2: Modelo de programação
           Pesado
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...
Frameworks Nightmare
A Evolução para o Java EE
                             Leve
                          Portável
                        Extensível
                Alto-Desempenho
                          Simples
             Fácil de desenvolver.
...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
Java EE: XML vai pro banco...
    ...entra Annotation!
Java EE, princípios

Convention over Configuration
• XML opcional;

Aspect-Oriented Programming
• Pontos de extenção;

Context and Dependency Injection
• Código limpo.
EJB 3 Session Bean
@Stateless
public class HelloWorldBean {

    public String sayHello(String name) {
      return "Hello from: ” + name;
    }

}
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;
Injeção de EJBs
@Stateless
public class HelloWorldBean {

    @EJB
    private Service service;

    public String sayHello(String id) {
       return "Hello ” + service.getName(id);
    }

}
Uso da anotação @EJB

Servlet       JSP         JSF



           Java Client
JAX-WS                   JAX-RS
          (Main Class)



              EJB
EJB 3 com JPA
@Stateless
public class BookServiceBean {

    @PersistenceContext
    private EntityManager em;

    public void create(Book book) {
      em.persist(book);
    }
}
EJB 3 Transações
@Stateless
@TransactionAttribute(
       TransactionAttributeType.MANDATORY)
public class BookServiceBean {

    @PersistenceContext
    private EntityManager em;

    public void create(Book book) {
       em.persist(book);
    }
}
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
    }
}
Repensando padrões Java EE
Core J2EE patterns hoje
ü Continuam
   populares;
ü Alguns padrões
   validos, outros
   opcionais, outros
   obsoletos;
ü Problemas
   resolvidos no
   JavaEE.
Real World Java EE Patterns




     (2009)         (2012)
DAO + DTO: Dead or Alive?
Problema
ü Encapsular
   Persistência
   com EJB 2;
Solução
                  Obsoleto
ü DRY!
ü JPA + EJB 3.
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.
Composite Entity
Problema
ü A persistência com CMP 2.1 não
   suporta relacionamentos muito bem;
Solução                  Obsoleto
ü JPA
ü Entidades JPA orientadas a objeto.
Value Object Assembler
Problema
ü Montagem de DTOs
Solução
                      Obsoleto
ü JPA + EJB 3.
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.
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.
Arquiteturas JavaEE Enxutas

“Soluções pragmáticas ao invés de
  infinitas indireções, frameworks,
  camadas, e padrões.”
-- Adam Bien
Forma leve de desenhar
      aplicações

   Entity, objetos persistentes



   Control, lógicas de negócio



   Boundary, interfaces.
Diferença de abordagem

 SOA             DDD
   Foco na     Foco em objetos
interface do    com estado e
    serviço    comportamento

 Tende a ser     tende a ser
   stateless       stateful
Entity Control Boundary Pattern
             Service




   Service      Valido    Persistente
 Facade ou
  Gateway                Data Object
DEMO
ü Aplicação Finace
  –  Java EE 6;
    ü  EJB 3
    ü  JPA
    ü  JSF
    ü  Prime Faces
  –  Netbeans 7.2;
  –  Java DB.
Conclusão e Perguntas
Participe da rede Pangea
       http://pangeanet.org




A primeira rede social sobre arquitetura de software do Brasil.

Mais conteúdo relacionado

Mais procurados

Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Claudio Martins
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaEduardo Bregaida
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - BrazilStephen Chin
 
Enterprise Java Beans
Enterprise Java BeansEnterprise Java Beans
Enterprise Java BeansRubem Azenha
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 
As Novidades do JMS 2.0
As Novidades do JMS 2.0As Novidades do JMS 2.0
As Novidades do JMS 2.0Bruno Borges
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Apostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesApostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesRosicleia Frasson
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 

Mais procurados (20)

JSF & REST
JSF & RESTJSF & REST
JSF & REST
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7
 
EJB
EJBEJB
EJB
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 
Introducao EJB 3
Introducao EJB 3Introducao EJB 3
Introducao EJB 3
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
 
Enterprise Java Beans
Enterprise Java BeansEnterprise Java Beans
Enterprise Java Beans
 
Aula1
Aula1Aula1
Aula1
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
As Novidades do JMS 2.0
As Novidades do JMS 2.0As Novidades do JMS 2.0
As Novidades do JMS 2.0
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Java Web 1 Introducao
Java Web 1 IntroducaoJava Web 1 Introducao
Java Web 1 Introducao
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Apostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e PrimefacesApostila Java Web com JSF, JPA e Primefaces
Apostila Java Web com JSF, JPA e Primefaces
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
JPA com Hibernate
JPA com HibernateJPA com Hibernate
JPA com Hibernate
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 

Semelhante a Repensando padrões e boas práticas java ee

Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma JavaFilipe Portes
 
Java OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMIJava OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMIYitzhak Stone
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEBruno Borges
 
Desconstruindo EJB
Desconstruindo EJBDesconstruindo EJB
Desconstruindo EJBLuiz Borba
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesRafael Ponte
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Gilberto Holms
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 
Desenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkDesenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkVitor Silva
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEBruno Borges
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7pt_programar
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 

Semelhante a Repensando padrões e boas práticas java ee (20)

Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EESerra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
 
GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma Java
 
Java OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMIJava OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMI
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
 
Desconstruindo EJB
Desconstruindo EJBDesconstruindo EJB
Desconstruindo EJB
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 
Desenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkDesenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A Framework
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 

Mais de Adriano Tavares

Palestra Transformação Ágil - CBGPL 2019
Palestra Transformação Ágil - CBGPL 2019Palestra Transformação Ágil - CBGPL 2019
Palestra Transformação Ágil - CBGPL 2019Adriano Tavares
 
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de softwareTDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de softwareAdriano Tavares
 
Transformação ágil em uma grande empresa, um post-it por vez!
Transformação ágil em uma grande empresa, um post-it por vez! Transformação ágil em uma grande empresa, um post-it por vez!
Transformação ágil em uma grande empresa, um post-it por vez! Adriano Tavares
 
DevOps, por onde começar
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começarAdriano Tavares
 
Disciplined Agile Delivery - indo além do Scrum
Disciplined Agile Delivery - indo além do ScrumDisciplined Agile Delivery - indo além do Scrum
Disciplined Agile Delivery - indo além do ScrumAdriano Tavares
 
Arquitetura Ágil, uma abordagem disciplinada
Arquitetura Ágil, uma abordagem disciplinadaArquitetura Ágil, uma abordagem disciplinada
Arquitetura Ágil, uma abordagem disciplinadaAdriano Tavares
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de softwareAdriano Tavares
 
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Adriano Tavares
 
Modelagem de dados e objetos
Modelagem de dados e objetosModelagem de dados e objetos
Modelagem de dados e objetosAdriano Tavares
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Adriano Tavares
 

Mais de Adriano Tavares (13)

Palestra Transformação Ágil - CBGPL 2019
Palestra Transformação Ágil - CBGPL 2019Palestra Transformação Ágil - CBGPL 2019
Palestra Transformação Ágil - CBGPL 2019
 
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de softwareTDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
TDC2018 - Adriano Tavares - Design Thinking para arquitetos de software
 
Transformação ágil em uma grande empresa, um post-it por vez!
Transformação ágil em uma grande empresa, um post-it por vez! Transformação ágil em uma grande empresa, um post-it por vez!
Transformação ágil em uma grande empresa, um post-it por vez!
 
DevOps, por onde começar
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começar
 
Disciplined Agile Delivery - indo além do Scrum
Disciplined Agile Delivery - indo além do ScrumDisciplined Agile Delivery - indo além do Scrum
Disciplined Agile Delivery - indo além do Scrum
 
Arquitetura Ágil, uma abordagem disciplinada
Arquitetura Ágil, uma abordagem disciplinadaArquitetura Ágil, uma abordagem disciplinada
Arquitetura Ágil, uma abordagem disciplinada
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de software
 
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
 
Pangea 21-07-2009
Pangea 21-07-2009Pangea 21-07-2009
Pangea 21-07-2009
 
JPA - MGJUG
JPA - MGJUGJPA - MGJUG
JPA - MGJUG
 
Modelagem de dados e objetos
Modelagem de dados e objetosModelagem de dados e objetos
Modelagem de dados e objetos
 
Gestao agil de projetos
Gestao agil de projetosGestao agil de projetos
Gestao agil de projetos
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1
 

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!"); } }
  • 8. EJB 2 Interfaces public interface HelloWorldRemoteHome extends EJBHome { HelloWorldRemote create() throws CreateException, RemoteException; } public interface HelloWorldRemote extends EJBObject { void sayHello() throws RemoteException; } public interface HelloWorldLocalHome extends EJBLocalHome { HelloWorldLocal create() throws CreateException; } public interface HelloWorldLocal extends EJBLocalObject { void sayHello(); }
  • 9. EJB 2 XML Deployment Descriptor <ejb-jar> <display-name>HelloWorldEJB</display-name> <enterprise-beans> <session> <display-name>HelloWorldSB</display-name> <ejb-name>HelloWorldBean</ejb-name> <home>...helloworld.HelloWorldRemoteHome</home> <remote>...helloworld.HelloWorldRemote</remote> <ejb-class>...helloworld.HelloWorldBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>HelloWorldBean</ejb-name> <method-name>sayHello</method-name> </method> <trans-attribute>RequiresNew</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
  • 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.
  • 13. EJB 2: Modelo de programação Pesado
  • 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 } }
  • 28. Core J2EE patterns hoje ü Continuam populares; ü Alguns padrões validos, outros opcionais, outros obsoletos; ü Problemas resolvidos no JavaEE.
  • 29. Real World Java EE Patterns (2009) (2012)
  • 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.
  • 32. Composite Entity Problema ü A persistência com CMP 2.1 não suporta relacionamentos muito bem; Solução Obsoleto ü JPA ü Entidades JPA orientadas a objeto.
  • 33. Value Object Assembler Problema ü Montagem de DTOs Solução Obsoleto ü JPA + EJB 3.
  • 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.
  • 36. Arquiteturas JavaEE Enxutas “Soluções pragmáticas ao invés de infinitas indireções, frameworks, camadas, e padrões.” -- Adam Bien
  • 37. Forma leve de desenhar aplicações Entity, objetos persistentes Control, lógicas de negócio Boundary, interfaces.
  • 38. Diferença de abordagem SOA DDD Foco na Foco em objetos interface do com estado e serviço comportamento Tende a ser tende a ser stateless stateful
  • 39. Entity Control Boundary Pattern Service Service Valido Persistente Facade ou Gateway Data Object
  • 40. DEMO ü Aplicação Finace –  Java EE 6; ü  EJB 3 ü  JPA ü  JSF ü  Prime Faces –  Netbeans 7.2; –  Java DB.
  • 42.
  • 43. Participe da rede Pangea http://pangeanet.org A primeira rede social sobre arquitetura de software do Brasil.