Implementei suporte a relatórios JasperReports no JGnuteca para demonstrar tanto o suporte ao JasperReports quanto o suporte a relatórios criados pelo próprio usuário, ou seja: o usuário, não necessariamente o programador, cria o relatório no iReport (por exemplo) e o publica de modo que o relatório esteja disponível imediatamente e possa ser executado por qualquer pessoa.
Para ver em funcionamento, clique aqui e selecione a opção "Manter Relatórios".
A maior dificuldade que se tem nesse tipo de funcionalidade diz respeito à apresentação e entrada dinâmica dos parâmetros. Essa implementação foi feita de forma simples, mas suporta essa característica, apresentando e repassando ao JasperReports os parâmetros que o usuário acrescentou ao relatório. O Facelets teve um papel importante uma vez que com o seu uso a página JavaServer Faces pode ser alterada dinamicamente, permitindo a montagem da página de entrada de parâmetros em tempo de execução da aplicação.
Atualmente somente parâmetros simples (texto, números, datas, etc.) são suportados, mas em uma próxima iteração pretendo adicionar suporte a seleção de valores (select, radio) e pesquisas (lookups) em tabelas.
Uma outra funcionalidade que considero importante é o suporte a segurança de modo que o usuário ao criar ou registrar o relatório possa indicar que grupos de usuários podem visualizá-lo. Também pretendo implementar essa funcionalidade no futuro, mas primeiro preciso implementar a segurança no JGnuteca ;-) .