quarta-feira, 27 de maio de 2015

PostGreSQL - Conexões idle

Uns dois meses atrás uma aplicação que tinha desenvolvido para um cliente usando JDBC e hospedada na Amazon, estava dando erro de conexão.

Pesquisando vi que existe o comando:

select * FROM pg_stat_activity

que informa os states das conexões.

E este para fechar as conexões (use com cuidado):

select pg_terminate_backend(pg_stat_activity.pid)
from pg_stat_activity
where pg_stat_activity.datname = 'database' AND pid <> pg_backend_pid();

Pesquisando ainda, encontrei vários links informando para usar o método close nos objetos: Connection, ResultSet e PreparedStatement. Revisei o código adicionando o método close sempre que necessário o que resolveu o meu problema.

Segue então aí a dica de sempre usar close quando estiver usando JDBC.

Nota: Prefira PreparedStatement em vez de Statement para evitar SQL Injection.

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