SlideShare a Scribd company logo
Spring vs. Java EE QConSP 2012
Spring vs. Java EE QConSP 2012
LIGHTWEIGHT
WEB APP CHAMPIONSHIP
QCONSP #3
Duelo de titãs



                 SPRING vs
                 JAVA EE
QCONSP #3   JUÍZES
QCONSP #3   THE CHALLENGER
JAVA EE
  PLATFORM
  • lutador experiente
  • mudou a tática no Java EE 5
  • ganhou confiança: CDI
  • perdeu peso para ser ágil
  • quer lutar na nuvem
    Patrocinado por: Oracle, Red Hat, IBM and
                      other


QCONSP #3                         THE CHALLENGER
QCONSP #3   THE CHAMPION
THE SPRING
  FRAMEWORK
  • sem derrota desde 2004
  • nocauteou o J2EE
  • luta em qualquer container
  • golpes fortes com POJOs
  • sabe explorar bem seu oponente
  Patrocinado por: Spring Source



QCONSP #3                            THE CHAMPION
QCONSP #3   FIGHT CARD
“Spring always depended on Java EE.”
                Bill Burke




QCONSP #3                    FIGHT CARD
Princípio UFC
                (princípio hollywood)




       “Don’t fight us, we fight you!”




QCONSP #3                               ROUND #1
CDI




QCONSP #3         ROUND #1
"Spring does, truly, embody many of
        the best practices of 2004."
                 Gavin King




QCONSP #3                         ROUND #1
IoC / DI




QCONSP #3              ROUND #1
IoC / DI
           Spring                              JavaEE
@Controller                       @Named
@Scope(“request”)                 @RequestScoped
public class ContatoBean {        public class ContatoBean {

  @Autowired //@Inject              @Inject
  private ContatoDAO dao;           private ContatoDAO dao;




QCONSP #3                                        ROUND #1
Persistência




QCONSP #3                  ROUND #2
Persistência
            Spring                              JavaEE
@Repository                        @Stateless
public class ContatoDAO {          public class ContatoDAO {

  @PersistenceContext                 @PersistenceContext
  private EntityManager manager;      private EntityManager manager;



                          persistence.xml
                        definição datasource




QCONSP #3                                         ROUND #2
Persistência




QCONSP #3                  ROUND #2
Persistência
@Repository
               Spring                 @Stateless
                                                      JavaEE
public class ContatoDAO {             public class ContatoDAO {

    @Autowired                          @Resource
    private JdbcTemplate template;      private DataSource ds;

                                        public void salva(Contato c){
    public void salva(Contato c) {        try {
      template.update(                     Connection con = ds.getConn..();
        "insert ... values (?, ?)",        PreparedStatement ps =
        c.nome(), c.idade());            con.prepareStatement(“insert ..”);
    }                                      ps.setString(1, c.nome());
}                                          ps.setString(1, c.idade());
                                           ps.execute();
                                           ps.close();
                                          }catch(..){} ...




QCONSP #3                                               ROUND #2
Persistência




QCONSP #3                  ROUND #2
Persistência


             Spring Data




QCONSP #3                  ROUND #2
Transação e Exceção




QCONSP #3               ROUND #3
Transação e Exceção
            Spring                               JavaEE
@Transactional(...)                @TransactionAttribute(...)
@Repository                        @Stateless
public class ContatoDAO {          public class ContatoDAO {

  @PersistenceContext                @PersistenceContext
  private EntityManager manager;     private EntityManager manager;



<bean id=”xxxTransactionManager”   ejb-jar.xml
 .../>




QCONSP #3                                         ROUND #3
Transação e Exceção




QCONSP #3               ROUND #3
Transação e Exceção
             Spring                                   JavaEE
@Transaction(rollbackFor=              @ApplicationException(rollback=true)
                 DaoException.class)   public class DaoException
public class ContatoController{                        extends Exception{}




•HandlerExceptionResolver              •<error-page>
•AOP Proxies                           •filtros ou interceptadores




QCONSP #3                                               ROUND #3
QCONSP #3   ROUND #4
Web-Peso leve




QCONSP #3                   ROUND #4
Web-Peso leve
@Controller
                    Spring                        @Named
                                                                      JavaEE
@Transactional                                    @RequestScoped
public class ContatoController {                  public class ContatoMB {

    @Autowired                                      private Contato contato;
    private ContatoDAO dao;                         private List<Contato> contatos;

    @RequestMapping("/adicionar")                   @Inject
    public ModelAndView adicionar(Contato c){       private ContatoDAO dao;
      dao.salva(c);
      ModelAndView mv = new ModelAndView("ok");     public void salvar(){
      mv.addObject("contatos", dao.lista);              dao.salva(contato);
      return mav;                                       zeraForm();
}                                                   }




QCONSP #3                                                               ROUND #4
Web-Peso pesado




QCONSP #3                 ROUND #4
Web-Peso pesado
                 Spring                                              JavaEE
public class EncodingPostProcessor             public class UtilMB {
        implements BeanPostProcessor {
                                                   public String reset() {
public Object postProcessBeforeInitialzation         FacesContext context =
          (Object bean, String name)                      FacesContext.getCurrentInstance();
                    throws BeansException            Application application =
{if(bean instanceof                                       context.getApplication();
       AnnotationMethodHandlerAdapter) {             ViewHandler viewHandler =
                                                          application.getViewHandler();
HttpMessageConverter<?>[] convs =                    UIViewRoot viewRoot =
((AnnotationMethodHandlerAdapter)                         viewHandler.createView(context,
bean).getMessageConverters();                             context.getViewRoot().getViewId());
                                                     context.setViewRoot(viewRoot);
for (HttpMessageConverter<?> conv : convs) {         return "success";
                                                   }
   if(conv instanceof                          }
           StringHttpMessageConverter) {

((StringHttpMessageConverter) conv)
.setSupportedMediaTypes(Arrays
.asList(new MediaType("text", "
Charset.forName("UTF-)
}



QCONSP #3                                                              ROUND #4
Web


    Action-based vs. Component-based




QCONSP #3                      ROUND #4
Web-Service - SOAP




QCONSP #3               ROUND #5
Web-Service - SOAP
               Spring                                                JavaEE
@WebService                                    @WebService
public class ContatosWS extends                public class ContatosWS{
               SpringBeanAutowiringSupport{
                                                   @Inject
   @Autowired                                      ContatoDAO dao;
   private ContatoDAO dao;
                                                   public List<Contato> listaDeContatos(){
   public List<Contato> listaDeContatos() {           return dao.lista();
     if(dao==null{                                 }
processInjectionBasedOnCurrentContext(this);
     }                                         }
      ...;
   }
}




QCONSP #3                                                             ROUND #5
Web-Service - REST




QCONSP #3               ROUND #5
Web-Service - REST
@Controller
                 Spring                           @Path("/")
                                                                     JavaEE
public class ContatoResource {                    public class ContatoResource {

    @Autowired                                        @Inject
    private ContatoDAO dao;                           private ContatoDAO dao;

    @RequestMapping(                                  @GET
      value = "/contatos/{id}",                       @Path("/contatos/{id}")
      produces={"application/json"},                  @Produces({"application/json"})
       method=RequestMethod.GET)                      public Contato load(@PathParam("id")
    @ResponseBody                                                                    Long id){
    public Contato load(@PathVariable("id")              return dao.busca(id);
                                     Long id) {       }
         return dao.busca(id);                    }
    }
}




QCONSP #3                                                              ROUND #5
Mensageria




QCONSP #3                ROUND #6
Mensageria
                       JavaEE - JMS
 InitialContext ic = new InitialContext();
 ConnectionFactory cf = (ConnectionFactory)ic.lookup("Factory");
 Connection con = cf.createConnection(..);

 Session session = con.createSession(false,AUTO_ACKNOWLEDGE);
 TextMessage msg = session.createTextMessage("oi jms");
 Queue queue = (Queue)ic.lookup("jms/queue/loja");
 QueueSender sender = session.createSender(queue);

 sender.send(textMessage);

 con.close();




QCONSP #3                                       ROUND #6
Mensageria
                       JavaEE - JMS
 InitialContext ic = new InitialContext();
 ConnectionFactory cf = (ConnectionFactory)ic.lookup("Factory");
 Connection con = cf.createConnection(..);

 Session session = con.createSession(false,AUTO_ACKNOWLEDGE);
 TextMessage msg = session.createTextMessage("oi jms");
 Queue queue = (Queue)ic.lookup("jms/queue/loja");
 QueueSender sender = session.createSender(queue);

 sender.send(textMessage);

 con.close();




QCONSP #3                                       ROUND #6
Mensageria
                   Spring - JMSTemplate
 @Autowired JmsTemplate template;
 @Autowired Queue queue;

 public void enviaMensagem() {
    this.template.send(queue, new MessageCreator() {
        public Message createMessage(Session s) throws JMSException {
               return session.createTextMessage("oi jms");
        }
    });
 }




QCONSP #3                                            ROUND #6
Mensageria
                   Spring - JMSTemplate
 @Autowired JmsTemplate template;
 @Autowired Queue queue;

 public void enviaMensagem() {
    this.template.send(queue, new MessageCreator() {
        public Message createMessage(Session s) throws JMSException {
               return session.createTextMessage("oi jms");
        }
    });
 }




QCONSP #3                                            ROUND #6
Mensageria




QCONSP #3                ROUND #6
Mensageria


            Spring Integration




QCONSP #3                        ROUND #6
Segurança




QCONSP #3               ROUND #7
Segurança
                                    JavaEE - JAAS
<security-constraint>                          @RolesAllowed({"cliente"})
 <web-resource-collection>                     public void salva(Contato contato){
    <url-pattern>/adiciona.jsf</url-pattern>     //...
 </web-resource-collection>                    }
 <auth-constraint>
    <role-name>*</role-name>                   @PermitAll, @DenyAll ...
 </auth-constraint>
</security-constraint>

<login-config>
 <auth-method>FORM</auth-method>v
   <form-login-config>
    <form-login-page>/login.jsf
   </form-login-page>
  </form-login-config>
</login-config>

<security-role>
 <role-name>*</role-name>
</security-role>




QCONSP #3                                                           ROUND #7
Segurança
                                    JavaEE - JAAS
<security-constraint>                          @RolesAllowed({"cliente"})
 <web-resource-collection>                     public void salva(Contato contato){
    <url-pattern>/adiciona.jsf</url-pattern>     //...
 </web-resource-collection>                    }
 <auth-constraint>
    <role-name>*</role-name>                   @PermitAll, @DenyAll ...
 </auth-constraint>
</security-constraint>

<login-config>
 <auth-method>FORM</auth-method>v
   <form-login-config>
    <form-login-page>/login.jsf
   </form-login-page>
  </form-login-config>
</login-config>

<security-role>
 <role-name>*</role-name>
</security-role>




QCONSP #3                                                           ROUND #7
Segurança




QCONSP #3               ROUND #7
Segurança
                                Spring Security
<sec:authentication-manager>                   @Secured({"cliente"})
   <sec:authentication-provider                public void salva(Contato contato){
       user-service-ref="userDAO" />             //...
   </sec:authentication-manager>               }

<sec:http auto-config="true">
  <sec:intercept-url                           <sec:authorize access="hasRole('cliente')">
       pattern="/contatos.spring"                 um jsp restrito
       access="ROLE_USER" />                   </sec:authorize>

  <sec:form-login
    login-page="/login-form.spring"
    default-target-url="/contatos.spring"
    login-processing-url="/login" />

  <sec:logout logout-url="/logout"
   logout-success-url="/login-form.spring"/>

</sec:http>




QCONSP #3                                                           ROUND #7
Infra-Spring




QCONSP #3                  ROUND #8
Infra-Spring




QCONSP #3                  ROUND #8
QCONSP #3   ROUND #8
Infra-JavaEE




QCONSP #3                  ROUND #8
Infra-JavaEE




QCONSP #3                  ROUND #8
Infra-Cloud




QCONSP #3                 ROUND #8
Extras

      “We will create new projects
     where no good solution exists.”
             SpringSource




QCONSP #3                      ROUND #9
Extras




QCONSP #3            ROUND #9
Extras




QCONSP #3            ROUND #9
Extras




QCONSP #3            ROUND #9
Especifição
                  vs
            Implementação




QCONSP #3               ROUND #10
Especifição
                  vs
            Implementação




QCONSP #3               ROUND #10
Especifição
                  vs
            Implementação




QCONSP #3               ROUND #10
Especifição
                  vs
            Implementação

     “Standards are for standardizing,
           and not innovating.”
            Ed Burns (Líder JSF-Spec )




QCONSP #3                                ROUND #10
Especifição
                  vs
            Implementação




QCONSP #3               ROUND #10
Especifição
                  vs
            Implementação

    "Stick to the standard when you can,
    leave the standards when you need."
      Antonio Goncalves (JCP Expert Member)




QCONSP #3                            ROUND #10
QCONSP #3   SCORE
QCONSP #3   SCORE
QCONSP #3   SCORE
QCONSP #3   OBRIGADO!
PERGUNTAS?

QCONSP #3       OBRIGADO!

More Related Content

PDF
JavaScript and AJAX
PDF
Vaadin 7
PDF
PDF
Vaadin7 modern-web-apps-in-java
PDF
Vaadin 7
PPTX
Surface flingerservice(서피스플링거서비스초기화)
PPTX
JEE.next()
PDF
In the Brain of Hans Dockter: Gradle
JavaScript and AJAX
Vaadin 7
Vaadin7 modern-web-apps-in-java
Vaadin 7
Surface flingerservice(서피스플링거서비스초기화)
JEE.next()
In the Brain of Hans Dockter: Gradle

What's hot (19)

PDF
Sustaining Test-Driven Development
PDF
Vaadin 7 Today and Tomorrow
PDF
React, Redux and es6/7
PDF
Huahin Framework for Hadoop, Hadoop Conference Japan 2013 Winter
PPTX
Jdk(java) 7 - 6 기타기능
PDF
クラウド・アプリケーション・アーキテクチャ
PDF
Actionsscript cheat sheet_letter
PDF
Actionsscript Cheat Sheet Letter
PDF
Vaadin today and tomorrow
PDF
Petcube epic battle: architecture vs product. UA Mobile 2017.
PDF
Highlights from Java 10, 11 and 12 and Future of Java at JUG Koblenz
PPTX
Spring Framework Petclinic sample application
PPT
The Next Step in AS3 Framework Evolution - FITC Amsterdam 2013
PPTX
Mvc express presentation
PPTX
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
PDF
WebGL - 3D in your Browser
PDF
mvcExpress training course : part1
PDF
Testing Your JavaScript & CoffeeScript
PPTX
Jdk 7 4-forkjoin
Sustaining Test-Driven Development
Vaadin 7 Today and Tomorrow
React, Redux and es6/7
Huahin Framework for Hadoop, Hadoop Conference Japan 2013 Winter
Jdk(java) 7 - 6 기타기능
クラウド・アプリケーション・アーキテクチャ
Actionsscript cheat sheet_letter
Actionsscript Cheat Sheet Letter
Vaadin today and tomorrow
Petcube epic battle: architecture vs product. UA Mobile 2017.
Highlights from Java 10, 11 and 12 and Future of Java at JUG Koblenz
Spring Framework Petclinic sample application
The Next Step in AS3 Framework Evolution - FITC Amsterdam 2013
Mvc express presentation
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
WebGL - 3D in your Browser
mvcExpress training course : part1
Testing Your JavaScript & CoffeeScript
Jdk 7 4-forkjoin
Ad

Viewers also liked (11)

PPTX
Angular JS - Introduction
PPTX
Angular js
PDF
Angular JS blog tutorial
PPTX
Angular JS
PPTX
Why angular js Framework
PDF
AngularJS application architecture
PDF
Microservices - java ee vs spring boot and spring cloud
PDF
AngularJS - What is it & Why is it awesome ? (with demos)
PDF
AngularJS Basics with Example
PPTX
AngularJS Architecture
PPTX
Introduction to Angularjs
Angular JS - Introduction
Angular js
Angular JS blog tutorial
Angular JS
Why angular js Framework
AngularJS application architecture
Microservices - java ee vs spring boot and spring cloud
AngularJS - What is it & Why is it awesome ? (with demos)
AngularJS Basics with Example
AngularJS Architecture
Introduction to Angularjs
Ad

Similar to Spring vs. Java EE QConSP 2012 (20)

PPT
比XML更好用的Java Annotation
ODP
Supercharging reflective libraries with InvokeDynamic
PDF
Overview of Android Infrastructure
PDF
Overview of Android Infrastructure
KEY
Multi Client Development with Spring
PDF
Spring 3: What's New
PDF
Get ready for spring 4
ODP
Spring 4 final xtr_presentation
DOCX
Java beans
PDF
Modern Android app library stack
KEY
MVC on the server and on the client
PDF
Tdd iPhone For Dummies
PDF
Building Scalable Stateless Applications with RxJava
PDF
Spring Web Services: SOAP vs. REST
PPTX
PDF
Spring 3.1 and MVC Testing Support
PDF
MVC on the Server and on the Client: How to Integrate Spring MVC and Backbone...
KEY
Multi Client Development with Spring
PDF
Data Types/Structures in DivConq
PPTX
SCWCD : Thread safe servlets : CHAP : 8
比XML更好用的Java Annotation
Supercharging reflective libraries with InvokeDynamic
Overview of Android Infrastructure
Overview of Android Infrastructure
Multi Client Development with Spring
Spring 3: What's New
Get ready for spring 4
Spring 4 final xtr_presentation
Java beans
Modern Android app library stack
MVC on the server and on the client
Tdd iPhone For Dummies
Building Scalable Stateless Applications with RxJava
Spring Web Services: SOAP vs. REST
Spring 3.1 and MVC Testing Support
MVC on the Server and on the Client: How to Integrate Spring MVC and Backbone...
Multi Client Development with Spring
Data Types/Structures in DivConq
SCWCD : Thread safe servlets : CHAP : 8

Recently uploaded (20)

PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Unlocking AI with Model Context Protocol (MCP)
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
cuic standard and advanced reporting.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
KodekX | Application Modernization Development
PDF
Electronic commerce courselecture one. Pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Encapsulation theory and applications.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Unlocking AI with Model Context Protocol (MCP)
The AUB Centre for AI in Media Proposal.docx
cuic standard and advanced reporting.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Understanding_Digital_Forensics_Presentation.pptx
KodekX | Application Modernization Development
Electronic commerce courselecture one. Pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
The Rise and Fall of 3GPP – Time for a Sabbatical?
Review of recent advances in non-invasive hemoglobin estimation
Encapsulation theory and applications.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Encapsulation_ Review paper, used for researhc scholars
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Per capita expenditure prediction using model stacking based on satellite ima...
NewMind AI Monthly Chronicles - July 2025
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Diabetes mellitus diagnosis method based random forest with bat algorithm

Spring vs. Java EE QConSP 2012

  • 4. QCONSP #3 Duelo de titãs SPRING vs JAVA EE
  • 5. QCONSP #3 JUÍZES
  • 6. QCONSP #3 THE CHALLENGER
  • 7. JAVA EE PLATFORM • lutador experiente • mudou a tática no Java EE 5 • ganhou confiança: CDI • perdeu peso para ser ágil • quer lutar na nuvem Patrocinado por: Oracle, Red Hat, IBM and other QCONSP #3 THE CHALLENGER
  • 8. QCONSP #3 THE CHAMPION
  • 9. THE SPRING FRAMEWORK • sem derrota desde 2004 • nocauteou o J2EE • luta em qualquer container • golpes fortes com POJOs • sabe explorar bem seu oponente Patrocinado por: Spring Source QCONSP #3 THE CHAMPION
  • 10. QCONSP #3 FIGHT CARD
  • 11. “Spring always depended on Java EE.” Bill Burke QCONSP #3 FIGHT CARD
  • 12. Princípio UFC (princípio hollywood) “Don’t fight us, we fight you!” QCONSP #3 ROUND #1
  • 13. CDI QCONSP #3 ROUND #1
  • 14. "Spring does, truly, embody many of the best practices of 2004." Gavin King QCONSP #3 ROUND #1
  • 15. IoC / DI QCONSP #3 ROUND #1
  • 16. IoC / DI Spring JavaEE @Controller @Named @Scope(“request”) @RequestScoped public class ContatoBean { public class ContatoBean { @Autowired //@Inject @Inject private ContatoDAO dao; private ContatoDAO dao; QCONSP #3 ROUND #1
  • 18. Persistência Spring JavaEE @Repository @Stateless public class ContatoDAO { public class ContatoDAO { @PersistenceContext @PersistenceContext private EntityManager manager; private EntityManager manager; persistence.xml definição datasource QCONSP #3 ROUND #2
  • 20. Persistência @Repository Spring @Stateless JavaEE public class ContatoDAO { public class ContatoDAO { @Autowired @Resource private JdbcTemplate template; private DataSource ds; public void salva(Contato c){ public void salva(Contato c) { try { template.update( Connection con = ds.getConn..(); "insert ... values (?, ?)", PreparedStatement ps = c.nome(), c.idade()); con.prepareStatement(“insert ..”); } ps.setString(1, c.nome()); } ps.setString(1, c.idade()); ps.execute(); ps.close(); }catch(..){} ... QCONSP #3 ROUND #2
  • 22. Persistência Spring Data QCONSP #3 ROUND #2
  • 24. Transação e Exceção Spring JavaEE @Transactional(...) @TransactionAttribute(...) @Repository @Stateless public class ContatoDAO { public class ContatoDAO { @PersistenceContext @PersistenceContext private EntityManager manager; private EntityManager manager; <bean id=”xxxTransactionManager” ejb-jar.xml .../> QCONSP #3 ROUND #3
  • 26. Transação e Exceção Spring JavaEE @Transaction(rollbackFor= @ApplicationException(rollback=true) DaoException.class) public class DaoException public class ContatoController{ extends Exception{} •HandlerExceptionResolver •<error-page> •AOP Proxies •filtros ou interceptadores QCONSP #3 ROUND #3
  • 27. QCONSP #3 ROUND #4
  • 29. Web-Peso leve @Controller Spring @Named JavaEE @Transactional @RequestScoped public class ContatoController { public class ContatoMB { @Autowired private Contato contato; private ContatoDAO dao; private List<Contato> contatos; @RequestMapping("/adicionar") @Inject public ModelAndView adicionar(Contato c){ private ContatoDAO dao; dao.salva(c); ModelAndView mv = new ModelAndView("ok"); public void salvar(){ mv.addObject("contatos", dao.lista); dao.salva(contato); return mav; zeraForm(); } } QCONSP #3 ROUND #4
  • 31. Web-Peso pesado Spring JavaEE public class EncodingPostProcessor public class UtilMB { implements BeanPostProcessor { public String reset() { public Object postProcessBeforeInitialzation FacesContext context = (Object bean, String name) FacesContext.getCurrentInstance(); throws BeansException Application application = {if(bean instanceof context.getApplication(); AnnotationMethodHandlerAdapter) { ViewHandler viewHandler = application.getViewHandler(); HttpMessageConverter<?>[] convs = UIViewRoot viewRoot = ((AnnotationMethodHandlerAdapter) viewHandler.createView(context, bean).getMessageConverters(); context.getViewRoot().getViewId()); context.setViewRoot(viewRoot); for (HttpMessageConverter<?> conv : convs) { return "success"; } if(conv instanceof } StringHttpMessageConverter) { ((StringHttpMessageConverter) conv) .setSupportedMediaTypes(Arrays .asList(new MediaType("text", " Charset.forName("UTF-) } QCONSP #3 ROUND #4
  • 32. Web Action-based vs. Component-based QCONSP #3 ROUND #4
  • 34. Web-Service - SOAP Spring JavaEE @WebService @WebService public class ContatosWS extends public class ContatosWS{ SpringBeanAutowiringSupport{ @Inject @Autowired ContatoDAO dao; private ContatoDAO dao; public List<Contato> listaDeContatos(){ public List<Contato> listaDeContatos() { return dao.lista(); if(dao==null{ } processInjectionBasedOnCurrentContext(this); } } ...; } } QCONSP #3 ROUND #5
  • 36. Web-Service - REST @Controller Spring @Path("/") JavaEE public class ContatoResource { public class ContatoResource { @Autowired @Inject private ContatoDAO dao; private ContatoDAO dao; @RequestMapping( @GET value = "/contatos/{id}", @Path("/contatos/{id}") produces={"application/json"}, @Produces({"application/json"}) method=RequestMethod.GET) public Contato load(@PathParam("id") @ResponseBody Long id){ public Contato load(@PathVariable("id") return dao.busca(id); Long id) { } return dao.busca(id); } } } QCONSP #3 ROUND #5
  • 38. Mensageria JavaEE - JMS InitialContext ic = new InitialContext(); ConnectionFactory cf = (ConnectionFactory)ic.lookup("Factory"); Connection con = cf.createConnection(..); Session session = con.createSession(false,AUTO_ACKNOWLEDGE); TextMessage msg = session.createTextMessage("oi jms"); Queue queue = (Queue)ic.lookup("jms/queue/loja"); QueueSender sender = session.createSender(queue); sender.send(textMessage); con.close(); QCONSP #3 ROUND #6
  • 39. Mensageria JavaEE - JMS InitialContext ic = new InitialContext(); ConnectionFactory cf = (ConnectionFactory)ic.lookup("Factory"); Connection con = cf.createConnection(..); Session session = con.createSession(false,AUTO_ACKNOWLEDGE); TextMessage msg = session.createTextMessage("oi jms"); Queue queue = (Queue)ic.lookup("jms/queue/loja"); QueueSender sender = session.createSender(queue); sender.send(textMessage); con.close(); QCONSP #3 ROUND #6
  • 40. Mensageria Spring - JMSTemplate @Autowired JmsTemplate template; @Autowired Queue queue; public void enviaMensagem() { this.template.send(queue, new MessageCreator() { public Message createMessage(Session s) throws JMSException { return session.createTextMessage("oi jms"); } }); } QCONSP #3 ROUND #6
  • 41. Mensageria Spring - JMSTemplate @Autowired JmsTemplate template; @Autowired Queue queue; public void enviaMensagem() { this.template.send(queue, new MessageCreator() { public Message createMessage(Session s) throws JMSException { return session.createTextMessage("oi jms"); } }); } QCONSP #3 ROUND #6
  • 43. Mensageria Spring Integration QCONSP #3 ROUND #6
  • 45. Segurança JavaEE - JAAS <security-constraint> @RolesAllowed({"cliente"}) <web-resource-collection> public void salva(Contato contato){ <url-pattern>/adiciona.jsf</url-pattern> //... </web-resource-collection> } <auth-constraint> <role-name>*</role-name> @PermitAll, @DenyAll ... </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method>v <form-login-config> <form-login-page>/login.jsf </form-login-page> </form-login-config> </login-config> <security-role> <role-name>*</role-name> </security-role> QCONSP #3 ROUND #7
  • 46. Segurança JavaEE - JAAS <security-constraint> @RolesAllowed({"cliente"}) <web-resource-collection> public void salva(Contato contato){ <url-pattern>/adiciona.jsf</url-pattern> //... </web-resource-collection> } <auth-constraint> <role-name>*</role-name> @PermitAll, @DenyAll ... </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method>v <form-login-config> <form-login-page>/login.jsf </form-login-page> </form-login-config> </login-config> <security-role> <role-name>*</role-name> </security-role> QCONSP #3 ROUND #7
  • 48. Segurança Spring Security <sec:authentication-manager> @Secured({"cliente"}) <sec:authentication-provider public void salva(Contato contato){ user-service-ref="userDAO" /> //... </sec:authentication-manager> } <sec:http auto-config="true"> <sec:intercept-url <sec:authorize access="hasRole('cliente')"> pattern="/contatos.spring" um jsp restrito access="ROLE_USER" /> </sec:authorize> <sec:form-login login-page="/login-form.spring" default-target-url="/contatos.spring" login-processing-url="/login" /> <sec:logout logout-url="/logout" logout-success-url="/login-form.spring"/> </sec:http> QCONSP #3 ROUND #7
  • 51. QCONSP #3 ROUND #8
  • 55. Extras “We will create new projects where no good solution exists.” SpringSource QCONSP #3 ROUND #9
  • 56. Extras QCONSP #3 ROUND #9
  • 57. Extras QCONSP #3 ROUND #9
  • 58. Extras QCONSP #3 ROUND #9
  • 59. Especifição vs Implementação QCONSP #3 ROUND #10
  • 60. Especifição vs Implementação QCONSP #3 ROUND #10
  • 61. Especifição vs Implementação QCONSP #3 ROUND #10
  • 62. Especifição vs Implementação “Standards are for standardizing, and not innovating.” Ed Burns (Líder JSF-Spec ) QCONSP #3 ROUND #10
  • 63. Especifição vs Implementação QCONSP #3 ROUND #10
  • 64. Especifição vs Implementação "Stick to the standard when you can, leave the standards when you need." Antonio Goncalves (JCP Expert Member) QCONSP #3 ROUND #10
  • 65. QCONSP #3 SCORE
  • 66. QCONSP #3 SCORE
  • 67. QCONSP #3 SCORE
  • 68. QCONSP #3 OBRIGADO!
  • 69. PERGUNTAS? QCONSP #3 OBRIGADO!

Editor's Notes