Tuesday, November 27, 2012

SQLite com Hibernate/JPA?


Neste artigo irei postar uma solução que é a integração entre o SQLite e o Hibernate/JPA

Mas afinal o que é SQLite?

SQLite é o banco de dados mais utilizado no mundo. Pensa em quantos dispositivos Androids e iOS encontrados no mercado?

Segundo a Wikipédia

"SQLite é uma biblioteca em linguagem C que implementa um banco de dados SQL embutido. Programas que usam a biblioteca SQLite podem ter acesso a banco de dados SQL sem executar um processo SGBD separado. SQLite não é uma biblioteca cliente usada para conectar com um grande servidor de banco de dados, mas sim o próprio servidor. A biblioteca SQLite lê e escreve diretamente para e do arquivo do banco de dados no disco."

Criei um projeto maven e está hospedado na seguinte url https://github.com/juniorware/sqlite-jpa

O propósito deste projeto e realizar uma prova de conceito entre o bando de dados SQLite e o Hibernate, com propósitos futuros de utilizá-lo como uma forma de utilizar TDD, ao invés de base dados relacionais aonde dificulta o ambiente de desenvolvimento.

O arquivo persistence.xml abaixo possui uma peculiaridade a classe SQLiteDialect, o dialeto do SQLite no Hibernate ainda não foi implementado, então é necessário criar um dialeto:



O dialeto SQLite para o Hibernate, pode ser visto a partir desta url:

https://github.com/juniorware/sqlite-jpa/blob/master/sqlite-jpa/src/main/java/com/blogspot/thedevside/util/SQLiteDialect.java

Este projeto por enquanto, só possui uma classe persistente irei criar outros tópicos para aprofundar mais o assunto.

Até a próxima :)



Wednesday, February 29, 2012

Como traduzir o componente Calendar para português no PrimeFaces 3

O Primefaces na sua versão 2.x já traduzia o calendário por padrão, porém no PrimeFaces 3 é necessário colocar estas configurações.

Criar um arquivo javascript e colocar o seguinte código:

PrimeFaces.locales['pt_BR'] = {
    closeText : 'Fechar',
    prevText : 'Anterior',
    nextText : 'Próximo',
    currentText : 'Começo',
    monthNames : [ 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho','Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ],
    monthNamesShort : [ 'Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago','Set', 'Out', 'Nov', 'Des' ],
    dayNames : [ 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta','Sábado' ],
    dayNamesShort : [ 'Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb' ],
    dayNamesMin : [ 'D', 'S', 'T', 'Q', 'Q', 'S', 'S' ],
    weekHeader : 'Semana',
    firstDay : 1,
    isRTL : false,
    showMonthAfterYear : false,
    yearSuffix : '',
    timeOnlyTitle : 'Só Horas',
    timeText : 'Tempo',
    hourText : 'Hora',
    minuteText : 'Minuto',
    secondText : 'Segundo',
    ampm : false,
    month : 'Mês',
    week : 'Semana',
    day : 'Dia',
    allDayText : 'Todo Dia'
};

e no componente do calendário colocar a seguinte valor em negrito na tag abaixo.

<p:calendar locale="pt_BR" showButtonPanel="true" navigator="true" id="ptCal"/>

Não esquecer de importar o javascript nas páginas que utilizaram o componente p:calendar do PrimeFaces ou se preferir colocar em um template.

Sunday, August 21, 2011

Mudando o remetente de e-mail do Liferay Portal Workflow Notifications

Quando configuramos o Liferay para controlar o conteúdo que é inserido no portal por padrão é enviado um e-mail para os usuários que possuem o papel Portal Content Reviwer, neste e-mail o nome do remetente é Liferay Portal Workflow Notifications e o e-mail do remetente é no-replay@liferay.com, para alterar o nome do remetente será necessário alterar o arquivo kaleo-spring.xml no caminho abaixo:
../liferay-portal-tomcat-6.0.6/tomcat-6.0.29/webapps/kaleo-web/WEB-INF/classes/META-INF.

Na figura abaixo existe um bean chamado com.liferay.portal.workflow.kaleo.runtime.notification.EmailNotificationSender, dentro dele possui duas propriedades fromAddress (com o valor no-reply@liferay.com) e fromName (com o valor Liferay Portal Workflow Notifications), e só alterá-los e ser feliz. :-) (Se o servidor estiver executando, será necessário reiniciá-lo)





Sunday, August 14, 2011

Configurando o Liferay para enviar e-mail utilizando o Gmail

Para enviar e-mails no Liferay utilizando uma conta do Gmail é muito simples.

1º passo - Configurar a sua conta para enviar e receber e-mails (veja link).
2º passo - Configurar o Liferay de acordo com a figura abaixo.


No Control Panel clique em Server Administration e então clique em Mail.
Na figura acima os campos que estiverem com uma linha vermelha devem ser alterados.
No campo Incoming POP Server  é o Servidor de entrada POP e deve ser preenchido com este valor pop.gmail.com
No campo Incoming Port é a Porta de Entrada e deve ser preenchido com este valor 995.
Os campos User a Secure Network Connection deve ser marcado porque o G-Mail utiliza SSL (conexão de rede segura) obrigatoriamente.
No campos User Name deve ser preenchido com o e-mail do G-Mail.
No campo Outgoing SMTP Server é o campo que corresponde ao Servidor SMTP de saída e dever ser assim preenchido smtp.gmail.com.
No campo Outgoing Port é a Porta de Saída e deve ser preenchido com este valor 465.

Muito simples, configurei aqui e funcionou direitinho, igual a uma uva. rsrsr =)

Se por acaso aparecer este erro é porque a sua conta não foi configurada corretamente ou o seu usuário/senha estão incorretos!

12:59:39,451 ERROR [MailEngine:154] javax.mail.AuthenticationFailedException
    at javax.mail.Service.connect(Service.java:306)
    at com.liferay.util.mail.MailEngine._send(MailEngine.java:459)
    at com.liferay.util.mail.MailEngine.send(MailEngine.java:366)
    at com.liferay.util.mail.MailEngine.send(MailEngine.java:110)
    at com.liferay.mail.messaging.MailMessageListener.doMailMessage(MailMessageListener.java:101)
    at com.liferay.mail.messaging.MailMessageListener.doReceive(MailMessageListener.java:115)
    at com.liferay.mail.messaging.MailMessageListener.receive(MailMessageListener.java:43)
    at com.liferay.portal.kernel.messaging.InvokerMessageListener.receive(InvokerMessageListener.java:63)
    at com.liferay.portal.kernel.messaging.ParallelDestination$1.run(ParallelDestination.java:61)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)

Referencial:
Configurar cliente de correio utilizando uma conta do g-mail.


No próximo artigo irei explicar como criar um workflow no Liferay. =)

Thursday, August 11, 2011

Configurando o portal Liferay com Tomcat e MySQL

Pre-requisitos: Sistema operacional com o MySQL e JDK 6.0 instalado.

1º passo - Baixar a última versão do Liferay Portal Standard Edition bunbled with Tomcat 6.x no site http://www.liferay.com/downloads/liferay-portal.

2º passo - Extrair o arquivo baixado no diretorio de sua preferencia (chamado daqui por diante de $LIFERAY_PORTAL, por exemplo, C:\portal\liferay-portal-6.0.6).

3 - Remover os arquivos $TOMCAT_DIR/webapps/sevencogs-hook.war,  $TOMCAT_DIR/webapps/sevencogs-theme.war e $TOMCAT_DIR/webapps/sevencogs-mobile-theme.war. O nome $TOMCAT_DIR se refere a pasta do tomcat-6.x.x no diretorio $LIFERAY_HOME. O nome $TOMCAT_DIR se refere ao endereço C:\portal\liferay-portal-6.0.6\tomcat-6.0.29 (exemplo).

4 - Criar um banco de dados chamado lportal e uma conta com usuario/senha chamado lportal/lportal no MySQL, exemplo:

drop database if exists lportal;
create database lportal character set utf8;
grant all on lportal.* to 'lportal'@'localhost' identified by 'lportal' with grant option;
grant all on lportal.* to 'lportal'@'localhost.localdomain' identified by 'lportal' with grant option;


5 - Criar um arquivo chamado portal-ext.properties no diretorio $TOMCAT_DIR/webapps/ROOT/WEB-INF/classes, e adicionar as seguintes linhas:
##MySQL
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost:3306/lportal?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=lportal
jdbc.default.password=lportal

6 - Executar o script $TOMCAT_DIR/bin/startup.bat se estiver no Windows ou $TOMCAT_DIR/bin/startup.sh e estiver no Linux.

Saturday, May 7, 2011

Erro de fonte não disponível na JVM ao gerar pdf com JasperReport

Se você está se deparando com o erro parecido com isso  net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Courier New' is not available to the JVM. See the Javadoc for more details ao gerar um pdf utilizando o jasperreport, pode ser que a versão da sua JRE não contenha esta fonte "Courier New", eu passei por este erro ao atualizar uma biblioteca do jasper-report em um sistema aonde eu trabalho, a solução adotada foi criar um jar e fazer com que o framework reconheça esta fonte. Então crie um jar com a estrutura presente na figura abaixo:

Criar um arquivo xml chamado fonts.xml (1) dentro do pacote net.sf.jasperreports.fonts e um arquivo chamado jasperreports_extension.properties (3) com as configurações presentes na figura abaixo:


 O arquivo courbd.tff (2) é o arquivo que contém a fonte que está faltando na sua JVM.

Se o erro que ocorreu com você foi de outro tipo de fonte não tem problema é só alterar o arquivo fonts.xml e colocar o arquivo que contém o fonte na raiz do jar.

Pesquisa de referência:
Download da fonte: http://truetype-font.com/C-COURBD.TTF-Courier-New-Bold.html
Jar contendo a solução: http://sites.google.com/site/xmedeko/code/misc/jasperreports-pdf-font-mapping
Configuração dos arquivos: http://www.redstream.nl/2010/05/31/solving-the-jasperserver-truetype-font-issue/

Tuesday, April 12, 2011

Visualizando o código-fonte de um arquivo .class

Se você está precisando de visualizar o código-fonte a partir de um arquivo .class, então utilize o Java Decompiler, ele roda tanto no Windows, Linux e Mac. Existem outros no mercado como o DJ Java Decompiler, porém ele só roda do “Ruindows”, é necessário realizar instalação e também quando “decompila” converte  acentuações em código UTF-8, e NÃO É GRATUITO : (

Não é necessário instalar o  Java Decompiler, é leve, multi-plataforma, É GRATUITO :), e não define no seu “Ruindows” os arquivos .class como programa padrão.