Integrando o Spring ao Tapestry

spring-logo.pngRecebi hoje o e-mail de um leitor que, após conferir os tutoriais sobre o Tapestry (a última parte, sendo mais específico), não gostou muito do HiveMind. Já imaginava que isso aconteceria, pois o HiveMind é um framework atípico e difícil de se entender (principalmente pela escassez de documentação).

Uma vez que o framework Spring é bem mais conhecido (e melhor documentado) que o HiveMind, então estarei mostrando aqui o que deve ser feito para que beans gerenciados pelo Spring possam ser injetados em páginas Tapestry.

UPDATE: A aplicação Tapestry-Guestbook (mostrada na última parte dos tutoriais sobre o Tapestry) foi modificada seguindo as instruções contidas neste post. Assim, caso seja de seu interesse, você pode ver na prática como a integração do Tapestry com o Spring foi implementada.

Baixando e instalando o Tapestry-Spring

O Tapestry-Spring é um plugin para Tapestry que serve para, como poderia explicar, integrar o Spring com o Tapestry. :P Tudo o que você precisa fazer para instalar este plugin é baixar o binário (v1.0.0) e adicionar o JAR no CLASSPATH da sua aplicação.

Configurando o Spring

Com o Tapestry-Spring instalado, precisamos agora configurar a aplicação web para levantar o Spring. Primeiramente, crie o arquivo applicationContext.xml, no diretório WEB-INF:

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3.  
  4. <beans>
  5.     <bean id="BEANID" class="com.foo.bar.MyBean" />
  6. </beans>
  7.  

Finalmente, altere o arquivo web.xml:

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3.  
  4. <web-app>
  5.    
  6.     <context-param>
  7.         <param-name>contextConfigLocation</param-name>
  8.         <param-value>/WEB-INF/applicationContext.xml</param-value>
  9.     </context-param>
  10.    
  11.     <listener>
  12.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  13.     </listener>
  14.  
  15.     <!– continua… –>
  16. </web-app>
  17.  

Injetando beans Spring em páginas Tapestry

Agora vem a parte mais complicada. :P Na sua página Tapestry, utilize a anotação @InjectObject para injetar o bean:

  1.  
  2.  
  3. // imports…
  4.  
  5. public abstract class MyTapestryPage extends BasePage {
  6.    
  7.     @InjectObject("spring:BEANID")
  8.     public abstract MyBean getMyBean();
  9.  
  10.     // continua …
  11. }
  12.  

Enjoy!

PS: A versão do Spring utilizada nos meus testes foi a versão 1.2.9, embora eu acredite que os procedimentos aqui explicados devam ser válidos para as versões 2.x.

Tags: , , , , , , ,