Your SlideShare is downloading. ×
Spring + Tapestry Um novo paradigma de desenvolvimento web
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Spring + Tapestry Um novo paradigma de desenvolvimento web

839
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
839
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
22
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

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=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