Objectify, uma ótima pedida para o Google App Engine
Boa tarde Queridos Leitores.
Eu sei que faz tempo, mas estou aqui postando depois de tantos meses.
Estou vivo, obrigado pela preocupação (tudo bem… ninguém perguntou nada, mas eu gosto de me sentir lembrado as vezes).
Como ninguém sabe, corrigindo, alguns sabem… A programação agora passou a ser apenas um Hobby.
Não estou mais trabalhando com programação, tenho saudades do meu tempo de analista, snif snif.
Mas vamos ao assunto, afinal essa budega não foi feita para falar da minha vida pessoal e ela tão pouco interessa a você, eu sei
A tecnologia que venho apresentar e sugerir seu uso é o Objectify. Também vou deixar uma dica de um código que me facilitou bastante as coisas.
Mas para que serve? Da onde veio? Porque usar isso?
Então, vamos a mais história pessoal (hoje to me sentindo um blogueiro.. haha).
A um tempo venho projetando um sistema para uns controles pessoais, queria que fosse na web e ai surgiu um problema chato, CUSTOS R$$$ (falando nisso, já deu uma olhada nos anúncios? Grato)!
Foi querendo driblar esses CUSTOS que eu decidi utilizar o Google App Engine/J (GAE), que me disponibilizou um ambiente free.
Só que, o GAE não utiliza base de dados com a arquitetura SGBD a qual a maioria de nós estamos acostumados a trabalhar, ele utiliza uma arquitetura chamada BigTable, fazendo com que os frameworks de persistência sejam um pouco diferentes.
Ai você vai falar: Ah, mas você pode utilizar JPA com o GAE.
E eu respondo: Pelo meu uso, pelas minhas pesquisas, eu digo que o JPA no GAE é uma dor de cabeça do cão. As coisas tendem a não funcionar como o esperado.
E nessas pesquisas eu encontrei o Objectify, um framework de persistência de muito fácil instalação e bem simples de ser utilizado.
Como Instalar? Como utilizar?
Você pode encontrar todas essas informações no site oficial do projeto:
http://code.google.com/p/objectify-appengine/
E caso surgir alguma dúvida, pergunte aqui pra podermos trocar algumas experiências.
Então, quando você começar a utilizar o Objectify você vai ver que as relações entre as tabelas aqui não podem ser mapeadas assim:
public class Motor { ... } public class Carro { ... private Motor motor; ... }
Você precisa utilizar uma Key, no exemplo deveríamos utilizar Key
A classe Carro agora ficaria assim:
public class Carro { ... private Key<Motor> motor; ... }
Com essa key você consegue recuperar a real instancia de Motor utilizando o método get(class, id).
Mas fica um tanto chato ter que fazer isso a toda hora. Então eu pensei e comecei a fazer isso nas minhas classes:
public class Carro { ... private Key<Motor> motorId; @Transiant private Motor motor; public Motor getMotor() { if (this.motor == null && motorId != null) { Motor motor = new Motor(); motor.setId(motorId.getId()); this.motor = MotorDAO.get(motor.getClass(), motor.getId()); } return this.motor; } public void setMotor(Motor motor) { this.motor = motor; if (motor != null && motor.getId() != null) { this.motorId = new Key<Motor>(Motor.class, motor.getId()); } } ... }
E até agora tudo ta funcionando belezinha! Posso fazer referencia diretamente nas EL do JSF e zaz.
Então essa seria minha dica de hoje.
PS: Como minha aplicação ainda não esta em produção, tão pouco ta fazendo coisas complexas, pode ser que esse código passe a não funcionar, mas nada que um jeitinho brasileiro não resolva
É isso pessoal, espero que seja útil a você.
Abraço,
Vanio Meurer (vaninhO).