JPA2 + Hibernate – Criando Funções Customizadas

Olá Galera!

Neste post vou dar uma dica bem bacana de como customizar funções de banco que podem ser chamadas a partir de uma consulta JPQL.

O cenário que vou descrever aqui como exemplo é um dos que provavelmente mais exigirão esta abordagem.

Considere os seguintes registros em uma tabela de movimentações:

Captura de tela de 2017-11-15 13:12:57

Imagine então que você precise recuperar uma média dos valores destas movimentações por dia, usando a JPQL. Uma primeira implementação poderia ser como a do método de teste abaixo:

Captura de tela de 2017-11-15 14:26:12

O resultado desta execução será o seguinte:

Captura de tela de 2017-11-15 14:26:55

Claramente o resultado não foi o que esperávamos. Temos apenas dois dias específicos com movimentações, mas o resultado não veio agrupado.

O problema está no fato de que a data das movimentações é armazenada juntamente com a hora, ou seja, um TIMESTAMP. Armazenar apenas a data em algumas situações, ignorando a hora, não é uma opção, e precisamos encontrar uma forma de conseguir agrupar apenas pela data.

A mesma consulta, executada diretamente no banco de dados com a utilização de uma função, resolve o problema, trazendo o resultado esperado:

Captura de tela de 2017-11-15 14:32:45

A questão é: como utilizar este tipo de função na consulta JPQL?

A resposta está na customização do dialeto utilizado pelo Hibernate. Abaixo um exemplo de implementação que nos ajudará a resolver o problema acima:

Captura de tela de 2017-11-15 14:40:37

Nesta implementação estamos estendendo a classe PostgreSQL95Dialect, registrando uma function chamada “truncate_date” cuja implementação chama a função DATE do Postgres com um parâmetro. A classe a ser estendida pode ser uma de várias disponíveis na API.

Depois de implementada precisamos registrar nossa customização na configuração do persistence.xml:

Captura de tela de 2017-11-15 14:45:31

Agora basta ajustar a consulta JPQL para utilizar a função customizada:

Captura de tela de 2017-11-15 14:46:58

E ao executar o método de testes teremos o seguinte resultado:

Captura de tela de 2017-11-15 14:48:24

 

É isto galera, fica a dica. Espero que seja útil.

 

[]’s

Anúncios

KeyError: ‘SQLALCHEMY_TRACK_MODIFICATIONS’

Olá pessoal!

Esta é uma dica rápida para quem usa Python, mais especificamente para quem desenvolve projetos com o Flask.

Se ao executar um projeto você obtiver o erro abaixo ao solicitar seus dados…

KeyError: 'SQLALCHEMY_TRACK_MODIFICATIONS'

… o problema pode ser a versão da dependência Flask-SQLAlchemy. Tive este problema com a versão 2.3.2 desta dependência, e resolvi fazendo um downgrade para a versão 2.1.

A primeira coisa a fazer é verificar a versão da dependência Flask-SQLAlchemy:

$ pip show Flask-SQLAlchemy

Se sua versão for a 2.3.2, faça a desinstalação da mesma (em alguns casos pode ser necessário utilizar o sudo):

$ pip uninstall Flask-SQLAlchemy

Instale então a versão 2.1 (em alguns casos pode ser necessário utilizar o sudo):

$ pip install Flask-SQLAlchemy==2.1

Verifique novamente a versão instalada:

$ pip show Flask-SQLAlchemy

Depois disso tente executar novamente seus serviços.

Fica a dica!

Robo 3T – Ferramenta Gráfica para o MongoDB

Estou praticamente no início de minha jornada com o MongoDB, mas a cada dia que passa me sinto mais satisfeito em trabalhar com ele.

Além de usar o MongoDB diretamente no console, tenho trabalhado mais diretamente com o desenvolvimento Java + MongoDB através do Java Driver.

Até então não tinha procurado por nenhuma ferramenta gráfica para trabalhar com o MongoDB, mas hoje descobri o Robo 3T, antigo (e conhecido) Robomongo. Trata-se de uma ferramenta gratuita para se trabalhar com o MongoDB de forma gráfica.

Admito que não conhecia nenhum dos dois, mas a julgar pela comunidade do Robomongo trata-se de uma ferramenta bem popular, adquirida recentemente pela 3T Software Labs, desenvolvedora do Studio 3T, antigo MongoChef.

Para maiores detalhes sobre as funcionalidades acesse a página do projeto. A seguir mostro uma rápida visão da instalação e uso da ferramenta para criar uma primeira conexão e consulta a coleções.

Acesse a página de downloads do projeto e baixe o pacote para seu sistema operacional. No meu caso estou usando o Linux Mint.

Depois de feito o download descompacte o arquivo e acesse o diretório bin, executando o arquivo robo3t. A primeira tela solicitará a criação de uma conexão:

robo3t-1.png

Para uma instalação padrão em sua máquina local, o padrão será o suficiente:

robo3t-2.png

Ao salvar a conexão criada e fazer a conexão será possível visualizar todos os bancos de dados e suas coleções:

robo3t-4.png

E é claro, é possível realizar as operações básicas, e visualizar as estatísticas dos bancos e das coleções:

robo3t-5.png robo3t-6.png

robo3t-7.png

Por hora é isso galera, dica dada!

Eu por aqui vou explorar mais a ferramenta e o próprio MongoDB, e em breve pretendo postar exemplos de desenvolvimento Java com o MongoDB.

 

Abraços!

 

Instalando o WSO2 API Manager como Serviço no Windows

Este post é uma dica rápida sobre como fazer a instalação do WSO2 API Manager no Windows. Este procedimento deve funcionar para qualquer outro produto da WSO2 também, mas no meu caso o processo foi realizado apenas para o API Manager.

Embora a documentação do produto oriente a utilização do YAJSW (Yet Another Java Service Wrapper) versão 11.03, tentativas de realizar este processo com uma versão mais atual do YAJSW, como a 12.09, falham com um erro parecido com o seguinte no console:

apimgr-01

Ainda que seja possível baixar e instalar as versões mais antigas indicadas no manual do produto (11.03 ou ainda 11.11), neste post descobri o NSSM (Non-Sucking Service Manager), que consegue deixar ainda mais simples o processo de configuração do serviço.

Depois de fazer o download da versão mais recente do NSSM (que não é tão nova assim, de Agosto de 2014) basta seguir os passos indicados no manual de uso, que é bem intuitivo.

De qualquer forma aqui vai um passo-a-passo bem rápido:

Depois de descompactar o download, abra um prompt de comando e vá até o diretório referente à plataforma de seu SO:

apimgr-02

Digite o comando abaixo, substituindo 4.WSO2-ApiManager pelo nome do seu serviço:

apimgr-03

Ao executar este comando uma GUI de configuração será aberta. Nela você deve informar a localização do arquivo wso2server.bat da instalação do WSO2 API Manager, e outros detalhes como descrição do serviço, e clicar em install.

apimgr-04

 Após este processo o serviço estará instalado.

apimgr-05

Para remover o serviço basta repetir o procedimento, digitando no prompt de comando o seguinte comando:

nssm remove 4.WSO2-ApiManager

É isto! Espero que seja útil galera.

MongoDB: Instalação no Linux

Há algum tempo atrás me interessei pelo MongoDB e resolvi estudá-lo um pouco mais. Fiz um treinamento gratuito disponível no próprio site do fornecedor, e tenho desenvolvido algumas coisas com ele desde então.

Para quem decidir estudar e desenvolver com o MongoDB eu recomendo fortemente, pois apesar de ser uma abordagem totalmente diferente da relacional, à qual estamos mais acostumados, é muito simples de entender e bem satisfatório de usar.

A intenção deste post não é fazer uma introdução ao MongoDB (sugiro, para quem se vira um pouco com o inglês, fazer o curso oferecido pelo site oficial do produto), mas deixar um rápido passo-a-passo de como instalar o MongoDB em um sistema Linux e instalar os driver para algumas linguagens.

Os comandos de instalação abaixo foram os que utilizei com sucesso em minha distribuição Linux (Mint 17.3).

 

Instalação do MongoDB

 

1) Importar a chave pública usada pelo sistema gerenciador de pacotes:

$ sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv EA312927

2) Criar um list file para o MongoDB:

$ echo “deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

3) Atualizar informações dos pacotes:

$ sudo apt-get update

4) Instalar o MongoDB

$ sudo apt-get install -y mongodb-org

Depois de finalizada a instalação, execute o comando abaixo para verificar a versão do MongoDB instalada:

$ mongo –version

img-1

Para inicializar o MongoDB, execute o comando abaixo:

$ sudo service mongod start

img-2

A instância do MongoDB armazena seus arquivos de dados no diretório /var/lib/mongodb, e seus arquivos de logs no diretório /var/log/mongodb por padrão, e executa com a conta de usuário mongodb. Se necessário é possível alterar os diretórios de log e dados no arquivo /etc/mongod.conf.

A verificação de que o processo mongod iniciou com sucesso pode ser feita através do arquivo de log /var/log/mongodb/mongod.log, com uma linha como esta:

[initandlisten] waiting for connections on port <port> (where <port> is the port configured in /etc/mongod.conf, 27017 by default)

Para parar ou reiniciar o serviço do MongoDB use os comandos abaixo:

$ sudo service mongod stop

img-3

$ sudo service mongod restart

img-4

Para iniciar o console do MongoDB digite o comando abaixo:

$ mongo

img-5.png

> show dbs

img-6

Para sair do console do MongoDB basta digitar CTRL+C.

Para a instalação em outras distribuições ou sistemas operacionais, você pode consultar as instruções no site do projeto.

 

Instalação do Driver para Python

A instalação do driver do MongoDB para Python pode ser feita através do pip, com o comando abaixo:

$ sudo pip install pymongo

Caso não tenha ainda o pip instalado, execute o comando abaixo para instalá-lo:

$ sudo apt-get install python-pip

 

Instalação do Driver para PHP

A instalação do driver do MongoDB para PHP pode ser feita através do pecl, com o comando abaixo:

$ sudo pecl install mongo

Caso não tenha o pecl instalado, execute os comandos abaixo para a instalação:

$ sudo apt-get install php5-dev

$ sudo apt-get install php-pear

Depois de instalado o driver é necessário habilitar a extensão do MongoDB para o PHP, incluindo no arquivo php.ini a seguinte linha, na seção de extensões:

extension=mongo.so

O arquivo php.ini costuma estar no seguinte local:

/etc/php5/apache2/php.ini

Depois de salvar a alteração, reinicie o apache:

sudo /etc/init.d/apache2 restart

Depois disso você pode criar um arquivo chamado info.php com o conteúdo abaixo, e incluí-lo no seu diretório de publicação do apache:

<?php phpinfo(); ?>

Depois, ao acessar o arquivo, deve ser possível encontrar uma seção relacionada ao MongoDB:

img-10.png

 

Instalação do Driver para Java

Para o desenvolvimento em Java, supondo que você esteja usando o Maven, basta adicionar a dependência ao seu pom.xml:

img-9

 

Por hora é isto!

Em breve pretendo publicar posts com exemplos de utilização do MongoDB nestas linguagens, e algumas outras dicas conforme os estudos avançarem.

 

Abraços!

 

 

 

 

Jogo da Memória em Java Swing (Refatorado)

Desde que comecei a escrever neste blog um dos posts mais acessados é, sem dúvida, o do Jogo da Memória.

Como explicado lá no post original, o código foi baseado em um trabalho desenvolvido na faculdade. Na ocasião havia desenvolvido o projeto no JCreator, de forma bem simples. O código não estava lá muito bom, e os ícones não estavam adequadamente referenciando os autores (peguei da internet a esmo), mas mesmo assim era uma boa referência para se aprender a usar alguns dos recursos do Swing.

Uma das minhas primeiras tarefas ao voltar a escrever aqui depois de algum tempo é passar os códigos dos posts para o github, para facilitar o acesso aos mesmos, mas ao fazer isto para o post do Jogo da Memória achei melhor dar uma repaginada no projeto.

A primeira coisa foi colocar o código em um projeto Mavem, desenvolvido no Eclipse. Depois fiz uma refatoração no código, para deixá-lo um pouco melhor, removendo coisas desnecessárias e simplificando um pouco a interface inicial.

Por fim utilizei conjuntos de ícones identificados e com os autores devidamente referenciados. Claro que se você quiser poderá alterar o conjunto de ícones conforme sua necessidade.

Como agora o código está no github não há necessidade de colocá-lo aqui na íntegra, e você pode ter acesso ao mesmo através deste repositório.

Abaixo seguem algumas imagens da nova versão:

1

2

4

3

5

 

Espero que esta nova versão possa ajudar ainda mais pessoas em seus estudos.

Abraços!

 

 

De volta à ativa!

Olá!

Depois de muito tempo afastado do blog decidi voltar à  ativa. Foram anos sem escrever aqui, mas a vontade sempre estava presente.

Minha primeira tarefa, antes de escrever novos artigos será refatorar alguns dos códigos já postados, e incluir os mesmos no github para facilitar o acesso aos projetos.

Espero que você, que já acompanha o blog, continue acessando os artigos e dicas, e que as novidades possam lhe ajudar de alguma forma.

Pra você que está acessando pela primeira vez, seja bem-vindo!