Spring + Tapestry Um novo paradigma de desenvolvimento web

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Spring + Tapestry Um novo paradigma de desenvolvimento web - Presentation Transcript

    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
    5. Organização do spring
    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=\"cliente\" class=\"com.mgjug.persistencia.cliente.Cliente\"> <property name=\"cartaoCredito\"> <ref bean=\"cartao\"/> </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=\"cliente-01-existente-banco\" class=\"com.mgjug.persistencia.cliente.Cliente\"> <property name=\"aniversario\"> <value>1982/01/14</value> </property> <property name=\"cartaoCredito\"> <ref bean=\"cartao-01-existente-banco\"/> </property> <property name=\"name\"> <value>Cliente1</value> </property> <property name=\"id\"> <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(\"id\", 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=\"transactionInterceptor\" class=\"org.springframework.transaction.interceptor.Transact ionProxyFactoryBean\" abstract=\"true\"> <property name=\"transactionManager\"> <ref bean=\"transactionManager\"/> </property> <property name=\"transactionAttributes\"> <props> <prop key=\"insert*\">PROPAGATION_REQUIRED</prop> <prop key=\"update*\">PROPAGATION_REQUIRED</prop> <prop key=\"*\">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=\"apresentacaoManager\" parent=\"transactionInterceptor\"> <property name=\"target\"> <bean class=\"com.mgjug.negocio.ApresentacaoManagerImpl\" autowire=\"byName\" dependency-check=\"objects\"/> </property> </bean>
    21. Rollback declarativo ● EJBs: } catch(MyCheckedException e){ context.setRollbackOnly(); throw e; } ● Spring: <property name=\"interceptorNames\"> - 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=\"securityAspect\" class=\"com.mgjug.aspectj.LogAspect\" factory-method=\"aspectOf\"> <property name=\"sessionFactory\"> <ref local=\"sessionFactory\"/> </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

    + adorepumpadorepump, 11 months ago

    custom

    435 views, 0 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 435
      • 435 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 8
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories