terça-feira, 6 de janeiro de 2015

Erro ao gerar pdf com JasperReports

Numa aplicação de um cliente numa parte da app gerava um pdf e o enviava anexado a um email. No ambiente de desenvolvimento que no meu caso é Windows ou Mac funcionava corretamente ao colocar no servidor de produção que é Linux a mesma rotina retornava os erros:

Could not initialize class 
net.sf.jasperreports.engine.util.JRStyledTextParser
ou
Could not initialize class 
net.sf.jasperreports.engine.export.MatcherExportFilterMappingExtensionsRegistryFactory

Buscando pela web encontrei vários links sobre esse assunto, uso de fonte específica no jasper o que não era o meu caso, setar um valor num jasperreports.properties na pasta class entre outros.

Estava usando o jasperreports-4.1.1 enquanto que a versão atual é a 6.0.0. Olhei os fontes do jasper para ver se vinha uma luz, não tendo uma solução clara preferi atualizar o jar do jasper com a expectativa que o erro em relação ao sistema operacional já estivesse corrigido.

Como o projeto não usa Maven, atualizei manualmente e a cada teste dava um novo erro devido a falta de alguma dependência. Nunca senti tanta falta do Maven

Mas por fim fui gratificado com solução do problema.


domingo, 4 de janeiro de 2015

LIMIT do PostgreSQL != ROWNUM do Oracle

Numa aplicação de um cliente, Flex+Java+JDBC+PostgreSQL, estou ajudando a converter para usar Oracle.

Numa olhada rápida trocamos o comando LIMIT do PostgreSQL nas instruções sql para ROWNUM (no where) por acharmos serem equivalentes.

Na maioria das alterações funcionou corretamente pois tínhamos LIMIT 1, então trocando para WHERE ROWNUM = 1 se obteve o resultado esperado comparando o retorno da aplicação usando PostgreSQL e Oracle.

Mas em outros casos o resultado não foi o esperado, tipo LIMIT 10 trocando para ROWNUM = 10, retornava 1 registro ou nenhum enquanto que o PostgreSQL retornava até 10 registros.

Olhando a documentação dessas instruções se percebeu que não são equivalentes, o LIMIT "limita" a quantidade de registros retornados até o número informado, podendo retornar menos, enquanto que o ROWNUM é uma pseudo coluna que o Oracle "cria" para cada linha retornada, nesse caso ROWNUM = 10 irá retornar somente a linha 10 ou nenhuma caso o restante do WHERE retornasse menos de 10 linhas.

A solução foi fácil, ROWNUM <= 10. 

Veja também:

sábado, 25 de outubro de 2014

AngularJS: Javascript sem stress

Recomendo esse video do Renzo Nuccitelli, explica bem a criação de diretivas.

AngularJS: Javascript sem stress


sábado, 27 de setembro de 2014

Creating Web Apps with AngularJS

I recommend. Igor Costa's Hangout. Video in portuguese.

terça-feira, 22 de abril de 2014

Lexsis - Oportunidade Flex

A Lexsis de Porto Alegre - RS possui oportunidade para Flex. 

Requisito: Java

Quem tiver interesse ou dúvidas, por favor, envie currículo para mpaulo@lexsis.com.br


Lexsis - Oportunidade Delphi

A Lexsis de Porto Alegre - RS possui oportunidade para Delphi. 

Quem tiver interesse ou dúvidas, por favor, envie currículo para mpaulo@lexsis.com.br


sábado, 19 de abril de 2014

Redmine - Plugin Wiki Issue Fields

O Redmine é uma ótima ferramenta open source para gerenciamento de tarefas, possui muitas funcionalidades e o que não vem por default pode ser incluído como plug-in.

No Redmine quando se quer fazer referência a uma tarefa, é só usar o símbolo # seguido do número do ticket, isso irá gerar um link para a tarefa. Da forma default só mostra o id, se quiser mostrar outros atributos como o título um plug-in interessante é o Wiki issue fields.