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!

 

 

 

 

WeaverFX – Um concorrente para o Apache Pivot?

Esta semana, participando de um post do GUJ, fiquei sabendo da existência de uma plataforma RIA que muito se assemelha ao Apache Pivot.

O WeaverFX tem a mesma proposta: uma plataforma que permita a criação de aplicações ricas que possam rodar tanto no desktop quanto na web, na forma de applets.

Só hoje tirei um tempo para olhar o site, e ver alguns exemplos. Minha opinião pessoal? Não gostei.

Tenho que admitir que não me dei ao trabalho de criar uma aplicação de exemplo, me contentando apenas com os exemplos apresentados no site do projeto, mas isso foi devido à primeira impressão que tive.

Primeiramente há o fato de que é necessário instalar uma runtime específica para que se possa executar as aplicações. Uma vez que o Apache Pivot não me exige isto, já conto um ponto negativo para o WeaverFX em relação ao Apache Pivot.

 

 

Outra coisa que definitivamente não me agradou foi o “acabamento” dos componentes, e do resultado final das aplicações.

 

 

 

 

 

Apenas para efeito comparativo, eis uma imagem de uma aplicação que fiz em Pivot:

 

 

Ok, o post é tendencioso, admito que prefiro o Apache Pivot, mas também não me coloco na obrigação de ser imparcial =)

Há pessoas que gostaram do WeaverFX, e acredito que realmente é uma questão de escolha. Eu já fiz a minha =)

 

Para quem quiser saber mais sobre o projeto, acessem o site: http://www.weaverfx.com/

Dica: Prototipação com Balsamiq

Esta é uma dica rápida, de uma ferramenta que veio ao encontro de minhas necessidades, e pode ser o que você também procura.

Há algum tempo deixei de usar o iPlotz, e hoje uma colega de trabalho me indicou o Balsamiq.

Não vou explicar muito, apenas colocar uma imagem de uma tela e deixar o link para quem tiver interesse.

 

 

A instalação é fácil, mas é preciso ter instalada a plataforma AIR da Adobe (o que também é fácil conseguir – há um link na página de instalação para se chegar na instalação do AIR).

Eis a página do projeto: http://balsamiq.com/

 

Está dada a dica!