Thursday, July 21, 2011

Como foi o #TDC2011, um pequeno resumo

Novamente tenho a satisfação em escrever sobre o The Developer's Conference, um evento criado e realizado pela Globalcode. Vou resumir como foi a participação da YaW a 5a edição do The Developer's Conference, o TDC2011. Essa é a nossa 5a participação, nessa última edição colaborando na organização de 2 trilhas!

O evento seguiu a mesma estratégia do ano, organizado em diversas trilhas, com uma diferença: esse ano foram 25 trilhas dividas em 5 dias de evento, rolando muito conteúdo, networking, trabalho e diversão. O mix entre as 25 comunidades foi sensacional, com certeza esse é um dos principais diferenciais da conferência.


Primeiro dia do TDC2011: Coordenação

Trabalhei junto com o Neto Marin na coordenação/organização da trilha Android. Foram 8 palestras nos mais variados níveis, falando sobre arquitetura do Android; boas práticas e dicas de performance no desenvolvimento para Android; como devemos pensar em relação as interface gráfica tanto para smartphones quanto para os tablets; um pouco sobre desenvolvimento de Games em Android e até a integração de APIs para Android com redes sociais. Essa trilha contou com a presença de alguns palestrantes do Google, como o ilustre Tim Bray.



Ainda no primeiro dia do TDC2011 o Rafael Nunes atuou, também, na coordenação/organização na trilha Cloud, junto com o Bruno Souza (JavaMan). Nessa trilha além de uma boa visão sobre as tecnologias para desenvolvimento em Cloud, muito se falou sobre oportunidades de negócios para soluções em Cloud Computing.



Segundo dia do TDC2011: Palestra


Quinta-feira foi um dia mais que especial para nós da comunidade Java, nesse dia rolou o lançamento oficial do Java 7. O lançamento foi mundial, ocorreu simultaneamente em São Francisco,  Londres e em São Paulo durante o TDC2011.

Nesse dia participamos na trilha Java com a palestra do Wellington Pinheiro e o Marcelo Castro (instrutor da Globalcode Alphaville) sobre as novidades do Java 7, com vários exemplos das novidades que tornam o Java uma linguagem mais simples e relativamente menos verbosa. Estive nessa trilha como congressista.




Terceiro dia do TDC2011: Congressista


Na sexta-feira participei da trilha Mobile como congressista, assisti palestras com Roger Brinkley falando um pouco sobre o que a Oracle tem feito com o Java ME (Mobile & Embedded), assisti  palestras com o pessoal da Nokia, e Daniel Galpin do Google apresentando licenciamento e como fazer negócio no Android Marketing.

Tive a oportunidade de conhecer um pouco sobre o desenvolvimento da plataforma mobile da Microsoft, o Windows Phone, gostei do conceito de interface gráficas com metro, mas acho que eles tem muito a fazer pra chegar perto do Android e OS. No final do dia ainda assisti a ótima palestra do Felipe Rodrigues na trilha Ruby, falando sobre "Starting up", com foco empreendedor em fazer acontecer. Depois só diversão, happy hour com os amigos!


Quarto dia do TDC2011: Palestra

No sábado participei da trilha Java EE, que contou com a presença ilustre do Arun Gupta da Oracle. Apresentei a palestra "RichFaces 4: Desenvolvimento Web com JSF2 mais rico", demonstrando alguns componentes da suíte de componentes JSF da JBoss.


Último dia do TDC2011: Diversão

Domingão e eu ja estava bem cansado, nem por isso deixei de ir no dia mais "relax" do TDC2011, era a vez da trilha Arduíno e a trilha Games. Fiquei como congressista no auditório, participando da trilha Stadium, com um resumo das principais palestras do dia.


Pensa que acabou, não...

As manifestações no twitter foram constantes e bem interessantes, hashtag #TDC2011 bombou! A conta TheDevConf mantinha o timeline sempre atualizado com informações das palestras e feedback do evento. Outra característica genial do evento foi a transmissão GRATUITA via web, para quem não pode vir para Sampa. A Globalcode fez uma parceria com o Subway, em todos os dias os participantes podiam comer sem nenhum custo adicional dentro da Faculdade Anhembi Morumbi.

Muitas palestras foram filmadas, logo logo a Globalcode deve disponibilizar o acessos a esses vídeos.


Tem mais?

E agora é a vez do TDC2011 em Floripa que acontece nos dias 20 e 21 de Agosto. As trilhas foram definidas e já é possível submeter propostas de palestras. Nós da YaW estamos super motivados em participar!

Parabéns a Yara e Vinicius, a toda equipe da Globalcode, as empresas parceiras na organização do evento, os palestrantes e congressistas. Veja mais fotos do TDC2011 aqui.

@edermag
www.yaw.com.br

Thursday, July 14, 2011

Emissão de relatórios no Spring Roo e MVC com Jasper Reports

O Spring MVC é uma das tecnologias que mais gostamos e usamos na YaW. Quando uso o termo "gostar" na verdade me refiro a uma tecnologia que atendeu as nossas espectativas do ponto de vista de implementação e mais importante, supriu as necessidades e objetivos do nosso cliente. A nossa experiência com Spring MVC tem sido bem interessante, por isso faz parte de nosso portfólio de soluções.

Nesse post demonstro como intregrar uma aplicação Web desenvolvida pelo Spring MVC com o JasperReports para emissão de relatórios. A integração entre o Spring MVC e JasperReports não tem nenhuma relação com o Spring Roo, mas para facilitar a criação e o desenvolvimento do projeto vou assumir o uso do Spring Roo.

Dependências

Além da biblioteca do JasperReports, dependendo do caso precisamos de outras libs complementares:
  • Spring Support
  • iText (pdf)
  • POI  (xls)


A seguir o trecho do pom.xml (Maven) com configuração dos artefatos. No trecho abaixo também coloco as configurações para o plugin do Maven que automatiza a compilcação dos relatórios jrxml para o formato jasper, utilizado pelo JasperReports:

...
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>net.sf.jasperreports</groupId>
  <artifactId>jasperreports</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>2.1.7</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.6</version>
  <scope>compile</scope>
  <optional>true</optional>
</dependency>
...
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>jasperreports-maven-plugin</artifactId>
  <configuration>
    <sourceDirectory>src/main/webapp/WEB-INF/reports</sourceDirectory>
    <outputDirectory>src/main/webapp/WEB-INF/reports</outputDirectory>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>compile-reports</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>jasperreports</groupId>
      <artifactId>jasperreports</artifactId>
      <version>3.5.3</version>
    </dependency>
    <dependency>
      <groupId>org.apache.log4j</groupId>
      <artifactId>com.springsource.org.apache.log4j</artifactId>
      <version>1.2.15</version>
    </dependency>
  </dependencies>
</plugin>
...

Próxima etapa é configurar no xml do MVC (webmvc-config.xml) o viewResolver do Spring que indica o properties com as configurações de cada relatório.

<bean id="viewResolver" 
  class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
  <property name="basename" value="relatorios"/>
</bean>

O arquivo relatorios.properties (na raiz do diretório de classes) armazena qual a classe que estipula o formato de geração do relatório, a url com o caminho do arquivo do relatório.

No exemplo estou usando o arquivo compilado, o .jasper, mas o Spring aceita a extensão jrxml. A propriedade reportKeyData (opcional) indica o apelido para o DataSource com os dados que o relatório depende. Já o valor relatorioPedidos usado como base das 3 chaves é o identificador do relatório, usamos no retorno do método da Controller que processa o relatório.

relatorioPedidos.(class)=
org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView
relatorioPedidos.url=/WEB-INF/reports/pedidos.jasper
relatorioPedidos.reportDataKey=pedidosDS

A classe JasperReportsMultiFormatView é indicada em relatórios que podem ser emitidos em mais de um formato, ou seja, o mesmo relatório gerado em xls e pdf. Outra alternativa seria utilizar JasperReportsPdfView, nesse caso a emissão ocorre só em pdf.

Pra fechar o método da Controller que processa os dados para emissão do relatório:

...
@RequestMapping("/report")
@Controller
public class ReportController {

  @RequestMapping(value ="/pedido/pdf", method = RequestMethod.GET)
  public String processaRelatorioPedidos(
     @RequestParam String de, @RequestParam String ate,
     ModelMap modelMap) 
  {
    JRBeanCollectionDataSource ds =
      new JRBeanCollectionDataSource(Pedido.findPedidosByDataGeracao(de, ate),false);
    modelMap.put("pedidosDS", ds);
    return "relatorioPedidos";
  }

}

A documentação oficial do Spring disponibiliza um capítulo sobre a integração do Spring MVC com o JasperReports.

@edermag
www.yaw.com.br