SlideShare a Scribd company logo
1 of 42
CDI
V4?
controllers
@Resource                                               V3
public class ProductController {

	   private final ProductDAO dao;
	   private final Result result;

	
    public ProductController(ProductDAO dao, Result result) {
	   	 this.dao = dao;
	   	 this.result = result;
	   }
	
	   public void add(Product product) {
	   	 dao.save(product);
	   	 result.include("message", "Product saved!");
	   }
}
@Controller                                             V4
public class ProductController {

	   private final ProductDAO dao;
	   private final Result result;
                                                       CDI
    @Inject
    public ProductController(ProductDAO dao, Result result) {
	   	 this.dao = dao;
	   	 this.result = result;
	   }
	
	   public void add(Product product) {
	   	 dao.save(product);
	   	 result.include("message", "Product saved!");
	   }
}
@Controller                                          CDI
public class ProductController {

	   @Inject private ProductDAO dao;
	   @Inject private Result result;
	
	   public void add(Product product) {
	   	 dao.save(product);
	   	 result.include("message", "Product saved!");
	   }
}
V4
package br.com.caelum.example.controller;

public class ProductController {

	   private ProductDAO dao;
	
	   public void add(Product product) {
	   	 dao.save(product);
	   }
}
V4
package br.com.caelum.example.controller;

public class ProductController {

	   private ProductDAO dao;

	   public void index() {                   /product
        ....
	   }
	
	   public void add(Product product) {
	   	 dao.save(product);
	   }
}
V4
package br.com.caelum.example.controller;

public class RootController {

	   private ProductDAO dao;
	
	   public void list() {                    /list
	   	 ...
	   }

    public void index() {                   /
	   	 ...
	   }
}
CDI


                                               V4
@Controller
package br.com.caelum.example.customPackage;
components
V3
@Component
public class ProdutoDao {

	   private final EntityManager entityManager;
	
    public ProductDao(EntityManager entityManager) {
	   	 this.entityManager = entityManager;
	   }
	
	   public void save(Product product) {
       entityManager.persist(product);
	   }
}
CDI
public class ProdutoDao {

	   @Inject private EntityManager entityManager;
	
	   public void save(Product product) {
       entityManager.persist(product);
	   }
}
component factories
@Component
@RequestScoped
public class EntityManagerCreator implements
                               ComponentFactory<EntityManager> {

	   private final EntityManagerFactory factory;
	   private EntityManager entityManager;

	   public EntityManagerCreator(EntityManagerFactory factory) {
	   	 this.factory = factory;
       entityManager = factory.createEntityManager();
	   }

	   public EntityManager getInstance() {
	   	 return entityManager;
	   }

	   @PreDestroy
	   public void destroy() {                              V3
	   	 entityManager.close();
	   }
}
CDI
public class EntityManagerProducer {



	   public EntityManager create(EntityManagerFactory factory) {
	   	 return factory.createEntityManager();
	   }
	   	
	   public void close(@Disposes EntityManager entityManager) {
	   	 entityManager.close();
	   }
}
CDI
public class EntityManagerProducer {

	   @Produces @RequestScoped
	   public EntityManager create(EntityManagerFactory factory) {
	   	 return factory.createEntityManager();
	   }
	   	
	   public void close(@Disposes EntityManager entityManager) {
	   	 entityManager.close();
	   }
}
CDI
public class EntityManagerProducer {

	   @Produces @RequestScoped
	   public EntityManager create(EntityManagerFactory factory) {
	   	 return factory.createEntityManager();
	   }
	   	
	   public void close(@Disposes EntityManager entityManager) {
	   	 entityManager.close();
	   }
}
interceptors
V3
@Intercepts
@RequestScoped
public class HelloInterceptor implements Interceptor {

    public boolean accepts(ResourceMethod method) {
        return true;
    }

    public void intercept(InterceptorStack stack,
            ResourceMethod method, Object instance) {

        System.out.println("Hello Interceptor ");
        stack.next(method, instance);
    }
}
V4

public class HelloInterceptor implements ControllerInterceptor {

	   public void intercept(InterceptorStack stack) {
	   	 System.out.println("Hello Interceptor");
	   	 stack.next();
	   }

}
public class LogUri implements ControllerInterceptor {
                                                         V4
    @Inject private HttpServletRequest request;

                                                         CDI
	   public void intercept(InterceptorStack stack) {
	   	 System.out.println("URI "+ request.getRequestURI());
	   	 stack.next();
	   }
}
public class LogUri implements ControllerInterceptor {
                                                           V4
    @Inject @RequestAttribute private String requestUri;

                                                           CDI
	   public void intercept(InterceptorStack stack) {
	   	 System.out.println("URI "+ requestUri);
	   	 stack.next();
	   }
}
public class LogUri implements SpecificControllerInterceptor {

    @Inject @RequestAttribute private String requestUri;
    @Inject private ControllerMethod method;

	   public void intercept(InterceptorStack stack) {
	   	 System.out.println("URI "+ requestUri);
	   	 stack.next();
	   }

	   public boolean accepts() {
	   	 return method.getName().startsWith("log");
	   }
}


                                                           V4
@Before(OtherInterceptor.class)
public class LogUri implements SpecificControllerInterceptor {

    @Inject @RequestAttribute private String requestUri;
    @Inject private ControllerMethod method;

	   public void intercept(InterceptorStack stack) {
	   	 System.out.println("URI "+ requestUri);
	   	 stack.next();
	   }

	   public boolean accepts() {
	   	 return method.getName().startsWith("log");
	   }
}


                                                           V4
events
V3
@Intercepts(before=ExecuteMethodInterceptor.class)
@RequestScoped
public class BeforeInvocation implements Interceptor {

    public boolean accepts(ResourceMethod method) {
        return true;
    }

    public void intercept(InterceptorStack stack,
            ResourceMethod method, Object instance) {

        System.out.println("Antes da invocação!!");
        stack.next(method, instance);
    }
}
V4


public class BeforeInvocation {
                                                        CDI
	   public void do(@Observes BeforeMethodExecutionEvent evt) {
	   	 System.out.println("Antes da invocação!!");
	   }
}
V4

public void do(@Observes AfterValidationEvent evt) {
	 ...                                                  CDI
}

public void do(@Observes BeforeRedirectToViewEvent evt) {
	 ...
}

public void do(@Observes BeforeAnythingEvent evt) {
	 ...
}

.....
V3
@Component
@ApplicationScoped
public class CustomRoutes implements RoutesConfiguration {

  public void config(Router router) {
     new Rules(router) {
         public void routes() {
            routeFor("/clist").is(ClienteController.class).list();
         }
     };
  }

}
CDI        V4

public class AppRoutesExtensions {

	   public void register(@Observes CustomRoutesBuilder route) {
        route.of("/clist").is(ClienteController.class).list();
	   }
}
CDI        V4

public class AppRoutesExtensions {

	   public void register(@Observes CustomRoutesBuilder route) {
        route.of("/clist").is(ClienteController.class).list();
	   }
}

public class PluginExtensions {

	   public void register(@Observes CustomRoutesBuilder route) {
        route.of("/_plugin").is(MyPlugin.class).plug();
	   }
}
decorators
V3
@Component
public class CustomPathResolver extends DefaultPathResolver {
   
    @Override
    protected String getPrefix() {
        return "/pasta/raiz/";
    }
}
CDI
@Decorator
public class CustomPathResolver implements PathResolver {
   
    @Inject @Delegate private PathResolver resolver;

    public String getPrefix() {
        return "/pasta/raiz/";
    }

    // delegação
    public String getExtension() {
        return resolver.getExtension();
    }
    public String extractControllerFromName(String baseName) {
        return resolver.extractControllerFromName(baseName);
    }
}
view helpers
CDI
@Named
public class Global {

	   public String getAsa() {
	   	 return "Valor ultra-interessante pra view";
	   }
}
CDI
@Named
public class Global {

	   public String getAsa() {
	   	 return "Valor ultra-interessante pra view";
	   }
}




<p>Valor: ${global.asa}</p>
@Named
                                                CDI
@SessionScoped
public class LoggedUser {

    private User user;

    ...

	   public String getUsername() {
	   	 return user.getUsername();
	   }
}



<p>Usuário Logado: ${loggedUser.username}</p>
E mais:
                qualifiers       CDI

              stereotypes
           interceptors (cdi)
             custom scopes
           proxies e Instance
          portable extensions
           classpath scanning
V4
     baseado no cdi
compatível com vraptor3
 integração com spring

ainda ideias, nada codado
    aberto pra ideias!
V4
           Responda a pesquisa sobre o
            futuro do VRaptor e dê sua
                      opinião!
              http://bit.ly/HWTKmO


@sergio_caelum
                    http://groups.google.com/group/
@paulo_caelum
                           caelum-vraptor-dev
  @caelum

More Related Content

What's hot

JavaFX for Business Application Developers
JavaFX for Business Application DevelopersJavaFX for Business Application Developers
JavaFX for Business Application DevelopersMichael Heinrichs
 
Making the most of your gradle build - Greach 2017
Making the most of your gradle build - Greach 2017Making the most of your gradle build - Greach 2017
Making the most of your gradle build - Greach 2017Andres Almiray
 
Making the most of your gradle build - Gr8Conf 2017
Making the most of your gradle build - Gr8Conf 2017Making the most of your gradle build - Gr8Conf 2017
Making the most of your gradle build - Gr8Conf 2017Andres Almiray
 
Android Design Patterns
Android Design PatternsAndroid Design Patterns
Android Design PatternsGodfrey Nolan
 
Vaadin7 modern-web-apps-in-java
Vaadin7 modern-web-apps-in-javaVaadin7 modern-web-apps-in-java
Vaadin7 modern-web-apps-in-javaJoonas Lehtinen
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring SessionDavid Gómez García
 
The uniform interface is 42
The uniform interface is 42The uniform interface is 42
The uniform interface is 42Yevhen Bobrov
 
10 sharing files and data in windows phone 8
10   sharing files and data in windows phone 810   sharing files and data in windows phone 8
10 sharing files and data in windows phone 8WindowsPhoneRocks
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»SpbDotNet Community
 
Apple Templates Considered Harmful
Apple Templates Considered HarmfulApple Templates Considered Harmful
Apple Templates Considered HarmfulBrian Gesiak
 
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTRT3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTRDavid Gómez García
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limitsDroidcon Berlin
 
Demystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDemystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDanny Preussler
 

What's hot (20)

Vaadin7
Vaadin7Vaadin7
Vaadin7
 
JavaFX for Business Application Developers
JavaFX for Business Application DevelopersJavaFX for Business Application Developers
JavaFX for Business Application Developers
 
Vertx daitan
Vertx daitanVertx daitan
Vertx daitan
 
Making the most of your gradle build - Greach 2017
Making the most of your gradle build - Greach 2017Making the most of your gradle build - Greach 2017
Making the most of your gradle build - Greach 2017
 
Making the most of your gradle build - Gr8Conf 2017
Making the most of your gradle build - Gr8Conf 2017Making the most of your gradle build - Gr8Conf 2017
Making the most of your gradle build - Gr8Conf 2017
 
Android Design Patterns
Android Design PatternsAndroid Design Patterns
Android Design Patterns
 
JavaZone 2014 - goto java;
JavaZone 2014 - goto java;JavaZone 2014 - goto java;
JavaZone 2014 - goto java;
 
droidparts
droidpartsdroidparts
droidparts
 
Vaadin7 modern-web-apps-in-java
Vaadin7 modern-web-apps-in-javaVaadin7 modern-web-apps-in-java
Vaadin7 modern-web-apps-in-java
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring Session
 
The uniform interface is 42
The uniform interface is 42The uniform interface is 42
The uniform interface is 42
 
10 sharing files and data in windows phone 8
10   sharing files and data in windows phone 810   sharing files and data in windows phone 8
10 sharing files and data in windows phone 8
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»
 
Apple Templates Considered Harmful
Apple Templates Considered HarmfulApple Templates Considered Harmful
Apple Templates Considered Harmful
 
Junit 5 - Maior e melhor
Junit 5 - Maior e melhorJunit 5 - Maior e melhor
Junit 5 - Maior e melhor
 
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTRT3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limits
 
Easy Button
Easy ButtonEasy Button
Easy Button
 
04 Data Access
04 Data Access04 Data Access
04 Data Access
 
Demystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDemystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and Toothpick
 

Similar to CDI e as ideias pro futuro do VRaptor

softshake 2014 - Java EE
softshake 2014 - Java EEsoftshake 2014 - Java EE
softshake 2014 - Java EEAlexis Hassler
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
 
Introduction to cdi given at java one 2014
Introduction to cdi given at java one 2014Introduction to cdi given at java one 2014
Introduction to cdi given at java one 2014Antoine Sabot-Durand
 
Integrating Security Roles into Microsoft Silverlight Applications
Integrating Security Roles into Microsoft Silverlight ApplicationsIntegrating Security Roles into Microsoft Silverlight Applications
Integrating Security Roles into Microsoft Silverlight ApplicationsDan Wahlin
 
Enterprise Guice 20090217 Bejug
Enterprise Guice 20090217 BejugEnterprise Guice 20090217 Bejug
Enterprise Guice 20090217 Bejugrobbiev
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-DurandSOAT
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT TalkConstantine Mars
 
Architecture Components
Architecture Components Architecture Components
Architecture Components DataArt
 
Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02rhemsolutions
 
Android Architecture - Khoa Tran
Android Architecture -  Khoa TranAndroid Architecture -  Khoa Tran
Android Architecture - Khoa TranTu Le Dinh
 
3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в JavaDEVTYPE
 
My way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon SpainMy way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon SpainChristian Panadero
 

Similar to CDI e as ideias pro futuro do VRaptor (20)

SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Devoxx 2012 (v2)
Devoxx 2012 (v2)Devoxx 2012 (v2)
Devoxx 2012 (v2)
 
Codemotion appengine
Codemotion appengineCodemotion appengine
Codemotion appengine
 
softshake 2014 - Java EE
softshake 2014 - Java EEsoftshake 2014 - Java EE
softshake 2014 - Java EE
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
VRaptor 4 - JavaOne
VRaptor 4 - JavaOneVRaptor 4 - JavaOne
VRaptor 4 - JavaOne
 
Introduction to cdi given at java one 2014
Introduction to cdi given at java one 2014Introduction to cdi given at java one 2014
Introduction to cdi given at java one 2014
 
Integrating Security Roles into Microsoft Silverlight Applications
Integrating Security Roles into Microsoft Silverlight ApplicationsIntegrating Security Roles into Microsoft Silverlight Applications
Integrating Security Roles into Microsoft Silverlight Applications
 
Enterprise Guice 20090217 Bejug
Enterprise Guice 20090217 BejugEnterprise Guice 20090217 Bejug
Enterprise Guice 20090217 Bejug
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT Talk
 
Architecture Components
Architecture Components Architecture Components
Architecture Components
 
Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
Jersey Guice AOP
Jersey Guice AOPJersey Guice AOP
Jersey Guice AOP
 
Android Architecture - Khoa Tran
Android Architecture -  Khoa TranAndroid Architecture -  Khoa Tran
Android Architecture - Khoa Tran
 
3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java
 
My way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon SpainMy way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon Spain
 
An intro to cqrs
An intro to cqrsAn intro to cqrs
An intro to cqrs
 

More from Caelum

Performance Web além do carregamento
Performance Web além do carregamentoPerformance Web além do carregamento
Performance Web além do carregamentoCaelum
 
Desafios de Performance Web - BrazilJS
Desafios de Performance Web - BrazilJSDesafios de Performance Web - BrazilJS
Desafios de Performance Web - BrazilJSCaelum
 
Performance na web: o modelo RAIL e outras novidades
Performance na web: o modelo RAIL e outras novidadesPerformance na web: o modelo RAIL e outras novidades
Performance na web: o modelo RAIL e outras novidadesCaelum
 
Progressive Web Apps: o melhor da Web appficada
Progressive Web Apps: o melhor da Web appficadaProgressive Web Apps: o melhor da Web appficada
Progressive Web Apps: o melhor da Web appficadaCaelum
 
Tudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcsetTudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcsetCaelum
 
Como o HTTP/2 vai mudar sua vida
Como o HTTP/2 vai mudar sua vidaComo o HTTP/2 vai mudar sua vida
Como o HTTP/2 vai mudar sua vidaCaelum
 
Métricas e a automatização do controle de qualidade
Métricas e a automatização do controle de qualidadeMétricas e a automatização do controle de qualidade
Métricas e a automatização do controle de qualidadeCaelum
 
HTTP/2, SPDY e Otimizações Web - Front In Maceió 2014 - Sérgio Lopes
HTTP/2, SPDY e Otimizações Web - Front In Maceió 2014 - Sérgio LopesHTTP/2, SPDY e Otimizações Web - Front In Maceió 2014 - Sérgio Lopes
HTTP/2, SPDY e Otimizações Web - Front In Maceió 2014 - Sérgio LopesCaelum
 
Offline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio LopesOffline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio LopesCaelum
 
Design Responsivo - MobCamp 2014
Design Responsivo - MobCamp 2014Design Responsivo - MobCamp 2014
Design Responsivo - MobCamp 2014Caelum
 
Além do responsive design: a mudança de paradigma do design adaptativo e os m...
Além do responsive design: a mudança de paradigma do design adaptativo e os m...Além do responsive design: a mudança de paradigma do design adaptativo e os m...
Além do responsive design: a mudança de paradigma do design adaptativo e os m...Caelum
 
Por trás dos frameworks e além do reflection
Por trás dos frameworks e além do reflectionPor trás dos frameworks e além do reflection
Por trás dos frameworks e além do reflectionCaelum
 
Otimizações de Performance Web: Desafios do Mundo Mobile
Otimizações de Performance Web: Desafios do Mundo MobileOtimizações de Performance Web: Desafios do Mundo Mobile
Otimizações de Performance Web: Desafios do Mundo MobileCaelum
 
Introducao a inteligencia artificial na educacao
Introducao a inteligencia artificial na educacaoIntroducao a inteligencia artificial na educacao
Introducao a inteligencia artificial na educacaoCaelum
 
Otimizando o time to market - do zero a produção em poucas iterações
Otimizando o time to market - do zero a produção em poucas iteraçõesOtimizando o time to market - do zero a produção em poucas iterações
Otimizando o time to market - do zero a produção em poucas iteraçõesCaelum
 
All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...Caelum
 
Wsrest 2013
Wsrest 2013Wsrest 2013
Wsrest 2013Caelum
 
Design Responsivo por uma Web única
Design Responsivo por uma Web únicaDesign Responsivo por uma Web única
Design Responsivo por uma Web únicaCaelum
 
Os Caminhos de uma Estratégia Mobile
Os Caminhos de uma Estratégia MobileOs Caminhos de uma Estratégia Mobile
Os Caminhos de uma Estratégia MobileCaelum
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
 

More from Caelum (20)

Performance Web além do carregamento
Performance Web além do carregamentoPerformance Web além do carregamento
Performance Web além do carregamento
 
Desafios de Performance Web - BrazilJS
Desafios de Performance Web - BrazilJSDesafios de Performance Web - BrazilJS
Desafios de Performance Web - BrazilJS
 
Performance na web: o modelo RAIL e outras novidades
Performance na web: o modelo RAIL e outras novidadesPerformance na web: o modelo RAIL e outras novidades
Performance na web: o modelo RAIL e outras novidades
 
Progressive Web Apps: o melhor da Web appficada
Progressive Web Apps: o melhor da Web appficadaProgressive Web Apps: o melhor da Web appficada
Progressive Web Apps: o melhor da Web appficada
 
Tudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcsetTudo que você precisa saber sobre picture e srcset
Tudo que você precisa saber sobre picture e srcset
 
Como o HTTP/2 vai mudar sua vida
Como o HTTP/2 vai mudar sua vidaComo o HTTP/2 vai mudar sua vida
Como o HTTP/2 vai mudar sua vida
 
Métricas e a automatização do controle de qualidade
Métricas e a automatização do controle de qualidadeMétricas e a automatização do controle de qualidade
Métricas e a automatização do controle de qualidade
 
HTTP/2, SPDY e Otimizações Web - Front In Maceió 2014 - Sérgio Lopes
HTTP/2, SPDY e Otimizações Web - Front In Maceió 2014 - Sérgio LopesHTTP/2, SPDY e Otimizações Web - Front In Maceió 2014 - Sérgio Lopes
HTTP/2, SPDY e Otimizações Web - Front In Maceió 2014 - Sérgio Lopes
 
Offline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio LopesOffline Web com Service Workers - Sérgio Lopes
Offline Web com Service Workers - Sérgio Lopes
 
Design Responsivo - MobCamp 2014
Design Responsivo - MobCamp 2014Design Responsivo - MobCamp 2014
Design Responsivo - MobCamp 2014
 
Além do responsive design: a mudança de paradigma do design adaptativo e os m...
Além do responsive design: a mudança de paradigma do design adaptativo e os m...Além do responsive design: a mudança de paradigma do design adaptativo e os m...
Além do responsive design: a mudança de paradigma do design adaptativo e os m...
 
Por trás dos frameworks e além do reflection
Por trás dos frameworks e além do reflectionPor trás dos frameworks e além do reflection
Por trás dos frameworks e além do reflection
 
Otimizações de Performance Web: Desafios do Mundo Mobile
Otimizações de Performance Web: Desafios do Mundo MobileOtimizações de Performance Web: Desafios do Mundo Mobile
Otimizações de Performance Web: Desafios do Mundo Mobile
 
Introducao a inteligencia artificial na educacao
Introducao a inteligencia artificial na educacaoIntroducao a inteligencia artificial na educacao
Introducao a inteligencia artificial na educacao
 
Otimizando o time to market - do zero a produção em poucas iterações
Otimizando o time to market - do zero a produção em poucas iteraçõesOtimizando o time to market - do zero a produção em poucas iterações
Otimizando o time to market - do zero a produção em poucas iterações
 
All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...
 
Wsrest 2013
Wsrest 2013Wsrest 2013
Wsrest 2013
 
Design Responsivo por uma Web única
Design Responsivo por uma Web únicaDesign Responsivo por uma Web única
Design Responsivo por uma Web única
 
Os Caminhos de uma Estratégia Mobile
Os Caminhos de uma Estratégia MobileOs Caminhos de uma Estratégia Mobile
Os Caminhos de uma Estratégia Mobile
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 

Recently uploaded

Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 

Recently uploaded (20)

Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 

CDI e as ideias pro futuro do VRaptor

  • 1. CDI
  • 2. V4?
  • 4. @Resource V3 public class ProductController { private final ProductDAO dao; private final Result result; public ProductController(ProductDAO dao, Result result) { this.dao = dao; this.result = result; } public void add(Product product) { dao.save(product); result.include("message", "Product saved!"); } }
  • 5. @Controller V4 public class ProductController { private final ProductDAO dao; private final Result result; CDI @Inject public ProductController(ProductDAO dao, Result result) { this.dao = dao; this.result = result; } public void add(Product product) { dao.save(product); result.include("message", "Product saved!"); } }
  • 6. @Controller CDI public class ProductController { @Inject private ProductDAO dao; @Inject private Result result; public void add(Product product) { dao.save(product); result.include("message", "Product saved!"); } }
  • 7. V4 package br.com.caelum.example.controller; public class ProductController { private ProductDAO dao; public void add(Product product) { dao.save(product); } }
  • 8. V4 package br.com.caelum.example.controller; public class ProductController { private ProductDAO dao; public void index() { /product .... } public void add(Product product) { dao.save(product); } }
  • 9. V4 package br.com.caelum.example.controller; public class RootController { private ProductDAO dao; public void list() { /list ... } public void index() { / ... } }
  • 10. CDI V4 @Controller package br.com.caelum.example.customPackage;
  • 12. V3 @Component public class ProdutoDao { private final EntityManager entityManager; public ProductDao(EntityManager entityManager) { this.entityManager = entityManager; } public void save(Product product) { entityManager.persist(product); } }
  • 13. CDI public class ProdutoDao { @Inject private EntityManager entityManager; public void save(Product product) { entityManager.persist(product); } }
  • 15. @Component @RequestScoped public class EntityManagerCreator implements ComponentFactory<EntityManager> { private final EntityManagerFactory factory; private EntityManager entityManager; public EntityManagerCreator(EntityManagerFactory factory) { this.factory = factory; entityManager = factory.createEntityManager(); } public EntityManager getInstance() { return entityManager; } @PreDestroy public void destroy() { V3 entityManager.close(); } }
  • 16. CDI public class EntityManagerProducer { public EntityManager create(EntityManagerFactory factory) { return factory.createEntityManager(); } public void close(@Disposes EntityManager entityManager) { entityManager.close(); } }
  • 17. CDI public class EntityManagerProducer { @Produces @RequestScoped public EntityManager create(EntityManagerFactory factory) { return factory.createEntityManager(); } public void close(@Disposes EntityManager entityManager) { entityManager.close(); } }
  • 18. CDI public class EntityManagerProducer { @Produces @RequestScoped public EntityManager create(EntityManagerFactory factory) { return factory.createEntityManager(); } public void close(@Disposes EntityManager entityManager) { entityManager.close(); } }
  • 20. V3 @Intercepts @RequestScoped public class HelloInterceptor implements Interceptor {     public boolean accepts(ResourceMethod method) {         return true;     }     public void intercept(InterceptorStack stack, ResourceMethod method, Object instance) {         System.out.println("Hello Interceptor ");         stack.next(method, instance);     } }
  • 21. V4 public class HelloInterceptor implements ControllerInterceptor { public void intercept(InterceptorStack stack) { System.out.println("Hello Interceptor"); stack.next(); } }
  • 22. public class LogUri implements ControllerInterceptor { V4 @Inject private HttpServletRequest request; CDI public void intercept(InterceptorStack stack) { System.out.println("URI "+ request.getRequestURI()); stack.next(); } }
  • 23. public class LogUri implements ControllerInterceptor { V4 @Inject @RequestAttribute private String requestUri; CDI public void intercept(InterceptorStack stack) { System.out.println("URI "+ requestUri); stack.next(); } }
  • 24. public class LogUri implements SpecificControllerInterceptor { @Inject @RequestAttribute private String requestUri; @Inject private ControllerMethod method; public void intercept(InterceptorStack stack) { System.out.println("URI "+ requestUri); stack.next(); } public boolean accepts() { return method.getName().startsWith("log"); } } V4
  • 25. @Before(OtherInterceptor.class) public class LogUri implements SpecificControllerInterceptor { @Inject @RequestAttribute private String requestUri; @Inject private ControllerMethod method; public void intercept(InterceptorStack stack) { System.out.println("URI "+ requestUri); stack.next(); } public boolean accepts() { return method.getName().startsWith("log"); } } V4
  • 27. V3 @Intercepts(before=ExecuteMethodInterceptor.class) @RequestScoped public class BeforeInvocation implements Interceptor {     public boolean accepts(ResourceMethod method) {         return true;     }     public void intercept(InterceptorStack stack, ResourceMethod method, Object instance) {         System.out.println("Antes da invocação!!");         stack.next(method, instance);     } }
  • 28. V4 public class BeforeInvocation { CDI public void do(@Observes BeforeMethodExecutionEvent evt) { System.out.println("Antes da invocação!!"); } }
  • 29. V4 public void do(@Observes AfterValidationEvent evt) { ... CDI } public void do(@Observes BeforeRedirectToViewEvent evt) { ... } public void do(@Observes BeforeAnythingEvent evt) { ... } .....
  • 30. V3 @Component @ApplicationScoped public class CustomRoutes implements RoutesConfiguration {   public void config(Router router) {      new Rules(router) {          public void routes() { routeFor("/clist").is(ClienteController.class).list();          }      };   } }
  • 31. CDI V4 public class AppRoutesExtensions { public void register(@Observes CustomRoutesBuilder route) { route.of("/clist").is(ClienteController.class).list(); } }
  • 32. CDI V4 public class AppRoutesExtensions { public void register(@Observes CustomRoutesBuilder route) { route.of("/clist").is(ClienteController.class).list(); } } public class PluginExtensions { public void register(@Observes CustomRoutesBuilder route) { route.of("/_plugin").is(MyPlugin.class).plug(); } }
  • 34. V3 @Component public class CustomPathResolver extends DefaultPathResolver {         @Override     protected String getPrefix() {         return "/pasta/raiz/";     } }
  • 35. CDI @Decorator public class CustomPathResolver implements PathResolver {         @Inject @Delegate private PathResolver resolver;     public String getPrefix() {         return "/pasta/raiz/";     } // delegação public String getExtension() {         return resolver.getExtension();     }     public String extractControllerFromName(String baseName) { return resolver.extractControllerFromName(baseName); } }
  • 37. CDI @Named public class Global { public String getAsa() { return "Valor ultra-interessante pra view"; } }
  • 38. CDI @Named public class Global { public String getAsa() { return "Valor ultra-interessante pra view"; } } <p>Valor: ${global.asa}</p>
  • 39. @Named CDI @SessionScoped public class LoggedUser { private User user; ... public String getUsername() { return user.getUsername(); } } <p>Usuário Logado: ${loggedUser.username}</p>
  • 40. E mais: qualifiers CDI stereotypes interceptors (cdi) custom scopes proxies e Instance portable extensions classpath scanning
  • 41. V4 baseado no cdi compatível com vraptor3 integração com spring ainda ideias, nada codado aberto pra ideias!
  • 42. V4 Responda a pesquisa sobre o futuro do VRaptor e dê sua opinião! http://bit.ly/HWTKmO @sergio_caelum http://groups.google.com/group/ @paulo_caelum caelum-vraptor-dev @caelum

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n