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...
Spring Framework
● Um container leve que fornece aspectos prontos
  para serem utilizados
● Diminui o código escrito

● In...
Organização do spring
Inversão de controle
●   Muda-se o instanciador do objeto
●   Define-se dependências no objeto
    instanciado (através de...
Vantagens do IOC
●   Teste fica fácil
    –   Teste o seu componente isolado
●   Manutenção fica fácil
    –   Alterações ...
Dependency Injection
●   Código Java
public class Cliente {
  private CartaoCredito cartaoCredito;
  public void setCartao...
Autowire
●   no(default)
    –   Especifica-se todas as propriedades que
        devem ser setadas e quais serão os seus
 ...
Inversão de controle (autowire no)
<bean id=quot;cliente-01-existente-bancoquot;

 class=quot;com.mgjug.persistencia.clien...
Mais autowire

●   byName
      Deve existir no contexto do Spring um bean
      com o nome da dependência. O id dessa
   ...
Integrando com a web
●   ContextLoaderListener carrega os beans
    noServletContext – pode ser obtido com:
●   WebApplica...
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 con...
Integração com Hibernate
●   Fornece suporte às versões 2.1.x e 3.x
●   Pacotes utilitários
    –   org.springframework.or...
HibernateCallback
                         public Collection findByFiltro(
●   Classe utilitária                       fin...
Templates
●   JDBCTemplate
●   JMSTemplate
●   JNDITemplate
●   HibernateTemplate
●   SqlMapTemplate(Ibatis)
●   Persisten...
AOP
●   Os aspectos do Spring são aplicáveis
    somente aos beans gerenciados por ele
●   O Spring fornece aspectos pront...
Transações declarativas
1) Define-se qual será a regra da transação.

<bean id=quot;transactionInterceptorquot;
  class=qu...
Transações declarativas
2) Define-se a instância do objeto que
  precisa da transação

<bean id=quot;apresentacaoManagerqu...
Rollback declarativo
●   EJBs:
     } catch(MyCheckedException e){
        context.setRollbackOnly();
        throw e;
   ...
Aspectos também possuem
          dependências
●   O Spring integra também com o AspectJ
<bean id=quot;securityAspectquot;...
Spring mock
●   O spring-mock fornece classes para
    simplificar a integração dos testes com o
    container leve.
●   E...
EasyMock
                       public void
●   A utilização de       testDeleteCartaoCredito() {

    mocks facilita o   ...
Projetos relacionados
●   Projetos utilizando spring
    –   Appfuse
    –   Trails

●   Sub-Projetos
    –   Acegi Securi...
Upcoming SlideShare
Loading in …5
×

Spring + Tapestry Um novo paradigma de desenvolvimento web

1,116 views

Published on

Published in: Technology, Self Improvement
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,116
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Spring + Tapestry Um novo paradigma de desenvolvimento web

  1. 1. Spring + Tapestry Um novo paradigma de desenvolvimento web
  2. 2. Spring Framework MGJUG João Vitor Lacerda Guimarães joao.vitor@gmail.com 29/06/2005
  3. 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. 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
  5. 5. Organização do spring
  6. 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. 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. 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. 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. 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. 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. 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. 13. Exceções padronizadas ● Converte exceções para uma hierarquia única e coerente.
  14. 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. 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. 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. 17. Templates ● JDBCTemplate ● JMSTemplate ● JNDITemplate ● HibernateTemplate ● SqlMapTemplate(Ibatis) ● PersisteneBrokerTemplate(OJB)
  18. 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. 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. 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. 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. 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. 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. 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. 25. Projetos relacionados ● Projetos utilizando spring – Appfuse – Trails ● Sub-Projetos – Acegi Security – Spring-IDE – Spring-RPC – Spring-Webflow

×