JasperServer – Backup/Export Repositório

O JasperServer é uma excelente opção gratuita para desenvolver relatórios de forma profissional, rápida (na maioria das vezes) e segura. Não sei porque parece que não ganhou muitos adaptos ou os usuários não costumam falar sobre a ferramenta :). É muito difícil achar algum material sobre Jasper/iReports. Então vou dando minhas trumbicadas diárias e postando aqui as soluções que encontro e/ou invento.

Hoje precisei publicar um repositório do JasperServer em um servidor de desenvolvimento. Já vi por ai que muita gente dizendo que faz o backup/export usando o dump do banco do jasper server. Não me pareceu uma opção muito segura e resolvi procurar uma outra forma de fazer e dai lembrei do js-export e js-import que usei para migrar do jasperserver 3.1 para o 3.5 (Upgrade do JasperServer 3.1 para o 3.5). Esses dois scripts, como o nome já diz, exportam e importam dados do repositório do JS. Para exportar todos os dados do repositório, use o comando:

Linux:

js-export.sh --everything --output-zip js-backup.zip

Windows:

js-export.bat --everything --output-zip js-backup.zip

Onde –everything diz que tudo será exportado, –output-zip indica que o formato de saída será um arquivo compactado e js-backup.zip é o arquivo de saída.

obs.: Os scripts citados estão no diretório <JASPERSERVER_HOME>/scripts

Para exportar apenas um ou N repositórios, basta usar a opção –uris.

Linux:

js-export.sh --uris /reports/samples,/reports/cms --output-zip js-backup.zip

Windows:

js-export.bat --uris /reports/samples,/reports/cms --output-zip js-backup.zip

Para importar os dados, execute o js-import:

Linux:

js-import.sh --input-zip js-backup.zip

Windows:

js-import.bat --input-zip js-backup.zip

Se o repositório já existir, use a opção –update.

Não se desespere se aparecer um erro do tipo:
blábláblá bundles.jsexceptions_messages, locale pt_BR blábláblá
jsexception.folder.details.not.found

ou ainda:
blábláblá jsexception.uri.not.found

Fique calmo, provavelmente foi um erro de digitação no js-export. Cuidado com as “/” e com as letras maiúsculas e minúsculas. Ao informar o caminho para o repositório, coloque extamente o caminho apresentado no JasperServer.

Abraços e até o próximo post.

Upgrade do JasperServer 3.1 para o 3.5

O JasperServer chegou a sua versão 3.5. O servidor de relatórios está bem mais estável e ganhou algumas novas funcionalidades, dentre elas gráfico de gantt e criptografia para os usuários e dados de acesso JDBC.

Vou tentar resumir neste post os passos necessários para atualizar sua versão 3.1 para a versão 3.5. No site do projeto existe um guia em pdf para realizar este procedimento (baixe aqui). Aqui vou tentar ser um pouco mais prático e objetivo.

Passo 1

Baixe os binários do jasper server: JasperServer-3.5.0-bin.zip

Passo 2

Crie uma cópia de backup da pasta do jasperserver em webapps. Ex.: C:\Arquivos de programas\jasperserver-3.0\apache-tomcat\webapps\jasperserver

Passo 3

Apague a pasta original do jasperserver em webapps deixando o seu backup criado no passo anterior.

Passo 4

Crie um dump completo da base de dados do JasperServer no MySQL.
Ex.:  mysqldump –user=root –password jasperserver > js-db-3.1-dump.sql
Não sabe o que é mysqldump? Nunca ouviu falar? Pare tudo que você está fazendo e leia isso aqui

Passo 5

Abra o arquivo js.jdbc.properties em <JasperServer-3.1>/scripts/config e verifique se está configurado corretamente (nome da base de dados, porta, usuário, senha, etc). No meu caso C:\Arquivos de programas\jasperserver-3.1\scripts\config\js.jdbc.properties.

Feito isso, exporte seu repósitorio utilizando a ferramenta de importação e exportação que acompanha sua instalação do JasperServer. No prompt de comando vá até a pasta scripts/ e execute:

js-export.bat –everything –output-zip js-3.1-export.zip

Passo 6

Descompacte os binários do JasperServer 3.5. Copie o arquivo mysql_master.properties que está no diretório buildomatic/sample_conf para a raiz do diretório buildomatic com o nome default_master.properties. No final você terá um caminho como esse: <JasperServer-3.5>\buildomatic\default_master.properties.

Abra o arquivo default_master.properties e ajuste as propriedades de conexão e diretórios de acordo com a sua realidade. Repare na propriedade appServerDir. Ai você deve indicar a raiz da instalação do tomcat e não do jasperserver. Se sua instalação usa um tomcat embeded, você deve setar algo como: C:\\Arquivos de programas\\jasperserver-3.0\\apache-tomcat. Sim, precisa das barras duplas.

Feito isso, atualize as configurações do buildomatic com os comandos:

js-ant clean-config
js-ant gen-config

Copie o arquivo js-3.1-export.zip para a pasta buildomatic

Passo 7

Execute os comandos abaixo dentro da pasta buildomatic:

js-ant drop-js-db

js-ant create-js-db

js-ant init-js-db-ce

js-ant import-minimal-ce

js-ant import-upgrade-ce

js-ant import-sample-data-upgrade-ce

js-ant deploy-webapp-ce

Passo 8

Inicie o JasperServer

Passo 9

Verifique se está tudo funcionando corretamente e seja feliz 😀

Recomendo usar a versão 3.5 do iReport para criar os relatórios para o JasperServer 3.5 mesmo porque relatórios feitos na versão 3.5 não funcionam nas versões anteriores do JasperServer.

É isso ai … até o próximo post

IReport – Páginas sobrepondo

Organizar o layout de relatórios no ireport não é uma tarefa das mais triviais, principalmente quando tem sub-relatórios e gráficos no meio do samba. É muito comum uma página sobrepor outra a depender da altura alcançada pelo elemento anterior – resultado de uma consulta de um sub-relatório por exemplo. Bom, consegui encontrar uma solução (ridícula por sinal … daquelas que da raiva de não ter pensado de tão óbvia que é). Todos componentes no ireport tem uma propriedade chamada position type. Essa propreidade pode assumir os valores:

  • Fix relative to top
    Valor padrão da propriedade, indica que o componente irá permanecer na mesma posição.
  • Fix relative to bottom
    A distância entre o componente e a base da banda não altera. O comportamente é parecido com o fix relative to top só que na direção inversa.
  • Float
    O componente “flutua” na banda. Ele é empurrado de acordo com a altura do elemento mais acima.

A “mágica” está em definir a propriedade position type do subreport como float. Pronto, ai sim tudo vai ser exibido como você gostaria que fosse exibido.

A solução está no guia do IReport

Até o próximo post

PostgreSQL + JasperServer / Transaction Read Only

Em breve devo fazer um post dedicado ao iReport e ao JasperServer. Um excelente solução para desenvolver relatórios para web com ferramentas open sources … masssss, pra quem já usa e teve ou está tendo dor de cabeça com o driver jdbc para postgresql e transações, vai ai minha dica :).

Meu Cenário

Tenho uma view que recebe os dados vindo de uma função que faz inserts em lote numa tabela (temporária) e no final da transação esses dados são excluídos.

Problema

Como a transação está definida como somente leitura (em algum lugar das profundezas dos milhares de arquivos de configuração do Java) a operação de insert/delete não é permitida e você ganha uma exception 🙂

Nas configurações do JasperServer, num dos inumeros arquivos de configuração e pastas do Java, deve existir um lugar onde você pode definir que a transação não é somente leitura. Bom, eu não “falo” java fluente e tive muita dificuldade em resolver o problema. Cansei de tentar achar a tal propriedade na sopa de letrinhas (JNDI, JDBC, BEAN, JSF, J2EE, etc) e resolver procurar a solução do outro lado … no banco. E não é que funcionou????

Basta na sua função/procedure colocar:
SET TRANSACTION READ WRITE;

Mais infos: http://www.postgresql.org/docs/8.1/interactive/sql-set-transaction.html