SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Spring + Tapestry
Um novo paradigma de desenvolvimento
                 web
Spring Framework


           MGJUG
João Vitor Lacerda Guimarães
    joao.vitor@gmail.com

        29/06/2005
Agenda
●   O que é o Spring?
●   Como ele é organizado?
●   Inversão de controle
●   Integração com a parte web
●   Acesso a banco de dados
    –   Hibernate e JDBC
●   Transações declarativas
●   Utilizando mocks
●   Conclusão
Spring Framework
● Um container leve que fornece aspectos prontos
  para serem utilizados
● Diminui o código escrito

● Integra com diversos frameworks, não reinventa a

  roda
● Portável entre diversos servidores de aplicações

● Pouco ou não invasivo, você escolhe o que vai

  utilizar
● Torna seu código mais testável

● Converte diversas checked exceptions em

  unchecked
● Versão atual é a 1.2.1
Organização do spring
Inversão de controle
●   Muda-se o instanciador do objeto
●   Define-se dependências no objeto
    instanciado (através de get/set ou de
    contrutores)
●   Pode injetar objetos obtidos via jndi
    –   a classe que recebe não precisa de fazer
        lookups
●   Favorece a utilização de interfaces
●   Spring fornece constructor-injection e
    setter-injection
Vantagens do IOC
●   Teste fica fácil
    –   Teste o seu componente isolado
●   Manutenção fica fácil
    –   Alterações bem localizadas
●   Configuração fica fácil
    –   Desacoplado da lógica do sistema
    –   Pode variar de acordo com o contexto
●   Reutilização fica fácil
    –   Componentes com baixo acoplamento são
        mais fáceis de serem reutilizados
Dependency Injection
●   Código Java
public class Cliente {
  private CartaoCredito cartaoCredito;
  public void setCartaoCredito(CartaoCredito cartaoCredito)
   {
     this.cartaoCredito = cartaoCredito;
  }
}
●   Configuração XML
<bean id=quot;clientequot;
      class=quot;com.mgjug.persistencia.cliente.Clientequot;>
  <property name=quot;cartaoCreditoquot;>
    <ref bean=quot;cartaoquot;/>
  </property>
</bean>
Autowire
●   no(default)
    –   Especifica-se todas as propriedades que
        devem ser setadas e quais serão os seus
        valores.
●   byName
    –   O Spring monta o objeto injetando beans de
        mesmo nome das dependências
●   byType
    –   Idem ... mesmo tipo das dependências
Inversão de controle (autowire no)
<bean id=quot;cliente-01-existente-bancoquot;

 class=quot;com.mgjug.persistencia.cliente.Clientequot;>
    <property name=quot;aniversarioquot;>
        <value>1982/01/14</value>
    </property>
    <property name=quot;cartaoCreditoquot;>
        <ref bean=quot;cartao-01-existente-bancoquot;/>
    </property>
    <property name=quot;namequot;>
        <value>Cliente1</value>
    </property>
    <property name=quot;idquot;>
        <value>1</value>
    </property>
</bean>
Mais autowire

●   byName
      Deve existir no contexto do Spring um bean
      com o nome da dependência. O id dessa
      dependência é único
●   byType
      Deve existir no contexto do Spring apenas
      um bean com o tipo da dependência a ser
      injetada.
Integrando com a web
●   ContextLoaderListener carrega os beans
    noServletContext – pode ser obtido com:
●   WebApplicationContext ctx =
    WebApplicationContextUtils.
    getWebApplicationContext(servletContext);
●   Struts - ContextLoaderPlugin e ActionSupport
●   WebWork - SpringObjectFactory
●   JSF - DelegatingVariableResolver
●   Tapestry - sobrescreve BaseEngine e coloca o
    contexto do spring no Global
Exceções padronizadas
●   Converte exceções para uma hierarquia única e
    coerente.
JDBC de um jeito simples
●   O JDBCTemplate fornece facilitadores para
     acessar o banco de dados.
●   Abstração do controle de abertura de
    conexão, statements.
●   query, queryForList, queryForMap, update
Integração com Hibernate
●   Fornece suporte às versões 2.1.x e 3.x
●   Pacotes utilitários
    –   org.springframework.orm.hibernate
    –   org.springframework.orm.hibernate3
●   Principais classes
    –   HibernateDaoSupport (superclasse para DAO)
    –   HibernateTemplate (executa acessos)
HibernateCallback
                         public Collection findByFiltro(
●   Classe utilitária                       final Cliente filtro) {
                           return (Collection)

    para facilitar a         getHibernateTemplate().execute(
                             new HibernateCallback() {
                               public Object doInHibernate(
    criação de métodos           Session session)
                                 throws HibernateException {

    mais específicos             if (filtro != null) {
                                   Criteria criteria =
                                     session.createCriteria(
    (ex. FindByFiltro)                 Cliente.class);
                                   if (filtro.getId() != null) {
                                     criteria.add(
                                        Restrictions.eq(quot;idquot;,
                                              filtro.getId()));
                                   }
                                   //...
                                   return criteria.list();
                                 }
                                 return null;
                                 //...
Templates
●   JDBCTemplate
●   JMSTemplate
●   JNDITemplate
●   HibernateTemplate
●   SqlMapTemplate(Ibatis)
●   PersisteneBrokerTemplate(OJB)
AOP
●   Os aspectos do Spring são aplicáveis
    somente aos beans gerenciados por ele
●   O Spring fornece aspectos prontos como:
    –   DebugInterceptor
    –   PerformanceMonitorInterceptor
    –   TransactionInterceptor
Transações declarativas
1) Define-se qual será a regra da transação.

<bean id=quot;transactionInterceptorquot;
  class=quot;org.springframework.transaction.interceptor.Transact
  ionProxyFactoryBeanquot; abstract=quot;truequot;>
<property name=quot;transactionManagerquot;>
  <ref bean=quot;transactionManagerquot;/>
</property>
<property name=quot;transactionAttributesquot;>
  <props>
    <prop key=quot;insert*quot;>PROPAGATION_REQUIRED</prop>
    <prop key=quot;update*quot;>PROPAGATION_REQUIRED</prop>
    <prop key=quot;*quot;>PROPAGATION_REQUIRED,readOnly</prop>
  </props>
</property>
</bean>
Transações declarativas
2) Define-se a instância do objeto que
  precisa da transação

<bean id=quot;apresentacaoManagerquot;
  parent=quot;transactionInterceptorquot;>
  <property name=quot;targetquot;>
    <bean class=quot;com.mgjug.negocio.ApresentacaoManagerImplquot;
          autowire=quot;byNamequot; dependency-check=quot;objectsquot;/>
  </property>
</bean>
Rollback declarativo
●   EJBs:
     } catch(MyCheckedException e){
        context.setRollbackOnly();
        throw e;
     }
●   Spring:
    <property name=quot;interceptorNamesquot;>          - rollback
      <list>                                    + commit
        <value>
          transactionInterceptor,-MyCheckedException
        </value>
      </list>
    </property>
Aspectos também possuem
          dependências
●   O Spring integra também com o AspectJ
<bean id=quot;securityAspectquot;
      class=quot;com.mgjug.aspectj.LogAspectquot;
      factory-method=quot;aspectOfquot;>
  <property name=quot;sessionFactoryquot;>
    <ref local=quot;sessionFactoryquot;/>
  </property>
</bean>
Spring mock
●   O spring-mock fornece classes para
    simplificar a integração dos testes com o
    container leve.
●   Evita-se a utilização direta do contexto do
    spring nos testes unitários.
●   Testes unitários possuem dependências.
●   Fornece testes transacionais.
EasyMock
                       public void
●   A utilização de       testDeleteCartaoCredito() {

    mocks facilita o       CartaoCredito cartaoCredito =
                                 new CartaoCredito();
    teste de camadas        cartaoCreditoDAOMock.

    da aplicação de             delete(cartaoCredito);

                           controlCartaoCreditoDAO.replay();
    maneira
                           apresentacaoManager.
    independente.                 deleteCartaoCredito(
                                     cartaoCredito);

                           controlCartaoCreditoDAO.verify();

                       }
Projetos relacionados
●   Projetos utilizando spring
    –   Appfuse
    –   Trails

●   Sub-Projetos
    –   Acegi Security
    –   Spring-IDE
    –   Spring-RPC
    –   Spring-Webflow

Mais conteúdo relacionado

Mais procurados

CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationMario Sergio
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTMario Sergio
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao FlywayJadson Santos
 
Curso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endCurso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endMario Sergio
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosphelypploch
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Java enterprise - testcontainers
Java enterprise - testcontainersJava enterprise - testcontainers
Java enterprise - testcontainersSandro Giacomozzi
 
Desenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkDesenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkVitor Silva
 

Mais procurados (20)

React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Spring boot
Spring bootSpring boot
Spring boot
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Aula1
Aula1Aula1
Aula1
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Jsf 2 slideshare
Jsf 2 slideshareJsf 2 slideshare
Jsf 2 slideshare
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web Application
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service REST
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao Flyway
 
Curso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-endCurso de Java (Parte 6) Introdução a Front-end
Curso de Java (Parte 6) Introdução a Front-end
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutos
 
GUJavaSC - Java EE 7 In Action
GUJavaSC - Java EE 7 In ActionGUJavaSC - Java EE 7 In Action
GUJavaSC - Java EE 7 In Action
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Java enterprise - testcontainers
Java enterprise - testcontainersJava enterprise - testcontainers
Java enterprise - testcontainers
 
Desenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A FrameworkDesenvolvimento em .Net - Introducao A Framework
Desenvolvimento em .Net - Introducao A Framework
 
Java em 2021
Java em 2021Java em 2021
Java em 2021
 

Semelhante a Spring + Tapestry: Um novo paradigma de desenvolvimento web

Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Marcelo Rodrigues
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusDenis L Presciliano
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYraquelcarsi
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgjqrd
 
Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Gilberto Holms
 
WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08Gilson Silva
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETslides_teltools
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.Rogério Napoleão Jr.
 
Minicurso Java Server Faces
Minicurso Java Server FacesMinicurso Java Server Faces
Minicurso Java Server FacesJoão Longo
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no FrontendHenrique Gogó
 

Semelhante a Spring + Tapestry: Um novo paradigma de desenvolvimento web (20)

Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta Cactus
 
jsp-intro
jsp-introjsp-intro
jsp-intro
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITY
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
Apache Wicket
Apache WicketApache Wicket
Apache Wicket
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
 
Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5
 
WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 
Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.
 
Minicurso Java Server Faces
Minicurso Java Server FacesMinicurso Java Server Faces
Minicurso Java Server Faces
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 

Mais de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Mais de elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

Spring + Tapestry: Um novo paradigma de desenvolvimento web

  • 1. Spring + Tapestry Um novo paradigma de desenvolvimento web
  • 2. Spring Framework MGJUG João Vitor Lacerda Guimarães joao.vitor@gmail.com 29/06/2005
  • 3. Agenda ● O que é o Spring? ● Como ele é organizado? ● Inversão de controle ● Integração com a parte web ● Acesso a banco de dados – Hibernate e JDBC ● Transações declarativas ● Utilizando mocks ● Conclusão
  • 4. Spring Framework ● Um container leve que fornece aspectos prontos para serem utilizados ● Diminui o código escrito ● Integra com diversos frameworks, não reinventa a roda ● Portável entre diversos servidores de aplicações ● Pouco ou não invasivo, você escolhe o que vai utilizar ● Torna seu código mais testável ● Converte diversas checked exceptions em unchecked ● Versão atual é a 1.2.1
  • 6. Inversão de controle ● Muda-se o instanciador do objeto ● Define-se dependências no objeto instanciado (através de get/set ou de contrutores) ● Pode injetar objetos obtidos via jndi – a classe que recebe não precisa de fazer lookups ● Favorece a utilização de interfaces ● Spring fornece constructor-injection e setter-injection
  • 7. Vantagens do IOC ● Teste fica fácil – Teste o seu componente isolado ● Manutenção fica fácil – Alterações bem localizadas ● Configuração fica fácil – Desacoplado da lógica do sistema – Pode variar de acordo com o contexto ● Reutilização fica fácil – Componentes com baixo acoplamento são mais fáceis de serem reutilizados
  • 8. Dependency Injection ● Código Java public class Cliente { private CartaoCredito cartaoCredito; public void setCartaoCredito(CartaoCredito cartaoCredito) { this.cartaoCredito = cartaoCredito; } } ● Configuração XML <bean id=quot;clientequot; class=quot;com.mgjug.persistencia.cliente.Clientequot;> <property name=quot;cartaoCreditoquot;> <ref bean=quot;cartaoquot;/> </property> </bean>
  • 9. Autowire ● no(default) – Especifica-se todas as propriedades que devem ser setadas e quais serão os seus valores. ● byName – O Spring monta o objeto injetando beans de mesmo nome das dependências ● byType – Idem ... mesmo tipo das dependências
  • 10. Inversão de controle (autowire no) <bean id=quot;cliente-01-existente-bancoquot; class=quot;com.mgjug.persistencia.cliente.Clientequot;> <property name=quot;aniversarioquot;> <value>1982/01/14</value> </property> <property name=quot;cartaoCreditoquot;> <ref bean=quot;cartao-01-existente-bancoquot;/> </property> <property name=quot;namequot;> <value>Cliente1</value> </property> <property name=quot;idquot;> <value>1</value> </property> </bean>
  • 11. Mais autowire ● byName Deve existir no contexto do Spring um bean com o nome da dependência. O id dessa dependência é único ● byType Deve existir no contexto do Spring apenas um bean com o tipo da dependência a ser injetada.
  • 12. Integrando com a web ● ContextLoaderListener carrega os beans noServletContext – pode ser obtido com: ● WebApplicationContext ctx = WebApplicationContextUtils. getWebApplicationContext(servletContext); ● Struts - ContextLoaderPlugin e ActionSupport ● WebWork - SpringObjectFactory ● JSF - DelegatingVariableResolver ● Tapestry - sobrescreve BaseEngine e coloca o contexto do spring no Global
  • 13. Exceções padronizadas ● Converte exceções para uma hierarquia única e coerente.
  • 14. JDBC de um jeito simples ● O JDBCTemplate fornece facilitadores para acessar o banco de dados. ● Abstração do controle de abertura de conexão, statements. ● query, queryForList, queryForMap, update
  • 15. Integração com Hibernate ● Fornece suporte às versões 2.1.x e 3.x ● Pacotes utilitários – org.springframework.orm.hibernate – org.springframework.orm.hibernate3 ● Principais classes – HibernateDaoSupport (superclasse para DAO) – HibernateTemplate (executa acessos)
  • 16. HibernateCallback public Collection findByFiltro( ● Classe utilitária final Cliente filtro) { return (Collection) para facilitar a getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate( criação de métodos Session session) throws HibernateException { mais específicos if (filtro != null) { Criteria criteria = session.createCriteria( (ex. FindByFiltro) Cliente.class); if (filtro.getId() != null) { criteria.add( Restrictions.eq(quot;idquot;, filtro.getId())); } //... return criteria.list(); } return null; //...
  • 17. Templates ● JDBCTemplate ● JMSTemplate ● JNDITemplate ● HibernateTemplate ● SqlMapTemplate(Ibatis) ● PersisteneBrokerTemplate(OJB)
  • 18. AOP ● Os aspectos do Spring são aplicáveis somente aos beans gerenciados por ele ● O Spring fornece aspectos prontos como: – DebugInterceptor – PerformanceMonitorInterceptor – TransactionInterceptor
  • 19. Transações declarativas 1) Define-se qual será a regra da transação. <bean id=quot;transactionInterceptorquot; class=quot;org.springframework.transaction.interceptor.Transact ionProxyFactoryBeanquot; abstract=quot;truequot;> <property name=quot;transactionManagerquot;> <ref bean=quot;transactionManagerquot;/> </property> <property name=quot;transactionAttributesquot;> <props> <prop key=quot;insert*quot;>PROPAGATION_REQUIRED</prop> <prop key=quot;update*quot;>PROPAGATION_REQUIRED</prop> <prop key=quot;*quot;>PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean>
  • 20. Transações declarativas 2) Define-se a instância do objeto que precisa da transação <bean id=quot;apresentacaoManagerquot; parent=quot;transactionInterceptorquot;> <property name=quot;targetquot;> <bean class=quot;com.mgjug.negocio.ApresentacaoManagerImplquot; autowire=quot;byNamequot; dependency-check=quot;objectsquot;/> </property> </bean>
  • 21. Rollback declarativo ● EJBs: } catch(MyCheckedException e){ context.setRollbackOnly(); throw e; } ● Spring: <property name=quot;interceptorNamesquot;> - rollback <list> + commit <value> transactionInterceptor,-MyCheckedException </value> </list> </property>
  • 22. Aspectos também possuem dependências ● O Spring integra também com o AspectJ <bean id=quot;securityAspectquot; class=quot;com.mgjug.aspectj.LogAspectquot; factory-method=quot;aspectOfquot;> <property name=quot;sessionFactoryquot;> <ref local=quot;sessionFactoryquot;/> </property> </bean>
  • 23. Spring mock ● O spring-mock fornece classes para simplificar a integração dos testes com o container leve. ● Evita-se a utilização direta do contexto do spring nos testes unitários. ● Testes unitários possuem dependências. ● Fornece testes transacionais.
  • 24. EasyMock public void ● A utilização de testDeleteCartaoCredito() { mocks facilita o CartaoCredito cartaoCredito = new CartaoCredito(); teste de camadas cartaoCreditoDAOMock. da aplicação de delete(cartaoCredito); controlCartaoCreditoDAO.replay(); maneira apresentacaoManager. independente. deleteCartaoCredito( cartaoCredito); controlCartaoCreditoDAO.verify(); }
  • 25. Projetos relacionados ● Projetos utilizando spring – Appfuse – Trails ● Sub-Projetos – Acegi Security – Spring-IDE – Spring-RPC – Spring-Webflow