Jforum para todos os gostos

O Jforum para quem não conhece, é um projeto Open Source de um dos fóruns de discussões baseado em JAVA, que eu me atrevo a dizer, dos mais famosos do planeta, no qual se integra com os principais bancos de dados do mercado.
Para se ter uma ideia, o maior fórum de Java, o GUJ, é baseado no Jforum, logicamente que por ser Open Source, o GUJ possui uma versão melhorada e especifica para sua comunidade.

E por que estou falando disto? Um amigo me procurou essa semana e me propôs que eu fizesse um site para divulgar seu produto e além disto ele gostaria que tivesse um pequeno fórum de discussões fechado para os integrantes desta empresa.
Como já tinha trabalhando com Jforum algum tempo atrás para um cliente, mas sem me aprofundar muito, pois acabou que o projeto foi deixado de lado, sugeri a ele esta solução para o fórum dele, pois como seria uma comunidade simples apenas entre os integrantes da empresa, não precisaria de muitas customizações e o projeto principal daria conta do recado.
Então resolvi tirar o projeto Jforum do fundo do baú e voltar a colocar para funcionar. A instalação é bem simples e funcional, você não encontrará problemas ao executar, no próprio site da comunidade tem um passo a passo de como realizar esta instalação (http://jforum.net/install.jsp), bastando apenas ter um container JAVA, no meu caso eu utilizei o Apache Tomcat6 e o banco de dados PostgreSQL 9.3.
Ao finalizar a instalação ele lhe redireciona para a página principal do fórum e tudo começa a funcionar maravilhosamente bem, porém ao clicar no primeiro tópico que ele cria automaticamente um erro é apresentado

java.sql.SQLException: ERROR: operator doesn't exist : character varying = integer

Pela exceção, vemos claramente que se trata de alguma query do sistema onde está se comparando campo string com integer. Depois de vasculhar o fórum javaranch(http://www.coderanch.com/forums/f-114/jforum), encontrei a solução sem precisar baixar o código fonte do projeto, pois o Jforum lê estas querys diretamente de um arquivo chamado generic_queries.sql que fica localizado na pasta WEB-INF/config/database/generic/. Veja que maravilha, se estas querys ficassem diretamente no código fonte do projeto eu teria que baixar, ajustar e gerar uma nova versão do Jforum, porém apenas tive que mexer na seguinte linha do arquivo:

AND rv.role_value = ?

Ao consultar o banco de dados verifiquei que este campo role_value trata-se de um campo character varying e dentro das classes do Jforum o parâmetro para comparação da clausula where é integer, acredito que nas versões anteriores do JAVA ele fazia essa conversão automaticamente, porém muito me admira não terem soltado algum patch de atualização para este problema. Enfim, para corrigir basta converter o parâmetro para text, ficando da seguinte maneira:

AND rv.role_value = ?::text

Quando achei que tinha terminado, encontrei outro problema ao tentar acessar o painel do administrador, o seguinte erro era apresentado:

by: net.jforum.exceptions.DatabaseException: java.sql.SQLException: ERROR: operator does not exist: timestamp without time zone > integer 
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse 

E mais uma vez é nítido que esta exceção está vinculada a um erro de query, mais uma vez ao consultar o javaranch(http://www.coderanch.com/forums/f-114/jforum), verifiquei que uma condição que não era mais aceita nas novas verões do postgreSQL estava sendo utilizada.
Para ajustar basta apenas abrir novamente o arquivo generic_queries.sql e alterar as seguintes query:

ForumModel.statsFirstPostTime = SELECT MIN(post_time) FROM jforum_posts WHERE post_time > 0

ForumModel.statsFirstRegisteredUserTime = SELECT MIN(user_regdate) FROM jforum_users WHERE user_regdate > 0

PARA

ForumModel.statsFirstPostTime = SELECT MIN(post_time) FROM jforum_posts WHERE extract('day' from post_time) > 0
ForumModel.statsFirstRegisteredUserTime = SELECT MIN(user_regdate) FROM jforum_users WHERE extract('day' from user_regdate) > 0

Pronto seu painel de administrado vai funcionar normalmente. Após isso fiz mais alguns testes e não encontrei problemas, caso você tenha encontrado mais algum e ajustou compartilhe aqui conosco.
Há!, Mais uma coisa, Você vai perceber que algumas imagens não estão aparecendo no seu fórum, como a de criação de um novo tópico. Para que elas apareçam você deve renomear a pasta es_US da pasta images para pt_BR.
Abraços!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s