Skip to content


Decidindo a implementação de persistência da sua aplicação

Algum tempo atrás o Fabiano me perguntou qual implementação de persistência em Java eu julgava a melhor opção. Na época conversamos um pouco sobre isso e eu estava para escrever sobre o assunto faz tempo.

Essa semana falei novamente sobre o assunto numa thread do CEJUG e então vou finalmente expôr algumas opiniões por aqui.

Provavelmente a implementação de persistência que está mais “na moda” atualmente é a Java Persistence Architecture (JPA) ou frameworks independentes com a mesma proposta, como o Hibernate e o Toplink. Realmente a proposta desta tecnologia é excelente. Quem programa usando orientação a objetos de verdade sempre prefere manipular classes de domínio ricas, e não gosta muito de lidar com as diferenças de paradigma que existem entre este modelo e o modelo relacional de bancos de dados.

A JPA aparentemente é bem fácil de usar, colocando anotações para mapear as classes e atributos em tabelas e colunas do banco de dados e colocando algumas anotações para declarar os relacionamentos entre as entidades. O problema que eu vejo é que as anotações de JPA são um tanto confusas. Em algumas situações você vê uma quantidade razoável de opções, e não fica tão óbvia a forma que você tem que usar as anotações.

Além disso, o esforço de analisar o comportamento da JPA é muitas vezes considerável. Você não escreve as queries, mas precisa acompanhar muito bem as queries que estão sendo geradas, se está sendo feito JOIN ou múltiplas queries, etc. Esse tipo de coisa a JPA abstrai da gente, mas muitas vezes os comportamentos não são triviais, e o esforço de monitorar isso não é desprezível. Uma anotação mal colocada pode te trazer problemas graves de performance e alguns dias de análise para otimização.

Eu gosto bastante da idéia de frameworks de mapeamento objeto-relacional. Quem trabalha verdadeiramente com orientação a objetos sempre quer ter a comodidade de usar este paradigma na aplicação toda. Entretanto, essas opções que temos em Java são complexas e muitas vezes não trazem ganhos de produtividade comparando com alternativas como o Ibatis por exemplo.

A parte mais chata da persistência em Java é escrever o código JDBC de gravação de objetos no BD e recuperação dos mesmos. Aqueles tratamentos altamente repetitivos e trabalhosos de conversão de colunas do BD de diferentes tipos para seus atributos das classes. Eu odeio escrever esse tipo de código, e o Ibatis ajuda demais nesse sentido, sem introduzir complexidade.

Uma coisa positiva que eu vejo no Ibatis é que ele é bem simples de usar e muito óbvio e previsível. Você manipula as coisas com o paradigma relacional, que embora tenha seus defeitos é amplamente conhecido de todo mundo e fácil de manipular. Usamos a DSL que é provavelmente a mais bem-sucedida até hoje (SQL).

A implementação de mapeamento objeto-relacional do Django (framework Python) por exemplo é excepcional, extremamente inteligente e produtiva. Muito dificilmente trocaria ela pelo Ibatis (assumindo que trocar fosse uma opção). Mas já há algum tempo eu estou desiludido com a JPA e vejo o Ibatis como uma opção com melhor custo-benefício.

Em situações em que o time todo domina plenamente JPA e já têm uma boa experiência com a mesma, é possível que o time ganhe um pouco de produtividade ao usá-la. Entretanto, em muitas situações o custo-benefício pode ser pior do que usar o Ibatis.

Já presenciei alguns casos em que a adoção de JPA em diferentes equipes prejudicou mais do que ajudou.  Os principais motivos para isso foram:

  • Falta de experiência geral do time com a tecnologia
  • Modelos legados de BD que não permitem um mapeamento de classes tão interessante
  • Grande esforço de tunning

Eu e outros profissionais que eu respeito muito já passamos por esse tipo de situação, em que acabou prevalecendo o pragmatismo e a visão do que é valor para o negócio.

Eu li uma entrevista com o Carlos Ghosn (o brasileiro presidente da Renault e Nissan) na qual ele falou que a Nissan passou a ter bons resultados quando os engenheiros pararam de colocar ítens que eles achavam “bonitos” nos projetos, mas que os usuários nem percebiam. O argumento era mais ou menos esse: o usuário quer que o carro funcione bem, não importa para ele se o revestimento do motor vai ser de adamantium e resistente a criptonita :)

Decisões técnicas devem ser tomadas com foco no valor de negócio, em vez de focar na tecnologia que ficará mais bonita no currículo. Não esqueçam do exemplo do Carlos Ghosn ;)

Posted in java, posts em português.

Tagged with , , , , , , , , , .


One Response

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Emerson Macedo says

    Excelente Bruno, só tive tempo de ler agora sua visão sobre o assunto, mas sempre é tempo. O que eu acho sobre isso é que para os modelos legados é tiro no pé querer colocar Hibernate/JPA. No caso de um projeto novo eu concordo contigo que vai do time conhecer ou não a ferramenta. Caso contrário, melhor usar o que todos saibam.



Some HTML is OK

or, reply to this post via trackback.



  • anxiety medications
  • buy augmentin
  • treatment of congestive heart failure
  • prescription pills
  • skin care treatment
  • naturally lower cholesterol
  • natural teeth whitening
  • how does levitra work
  • hard stool constipation treatment
  • hepatitis b symptoms treatment
  • anti-smoking websites
  • tadalafil professional
  • alcoholism treatment program
  • dog thyroid
  • antibiotics pregnancy
  • generic for zocor
  • body building product
  • hair loss
  • zoloft 50mg
  • buy body building prescription
  • how sleeping helps
  • muscle spasms
  • cancer medication
  • cholesterol zocor
  • parkinson's drugs
  • arrhythmias and treatments
  • muscle pain treatment
  • osteoporosis help
  • cialis cheap
  • natural dog remedies
  • hypertension medications pharmacy
  • elavil dose
  • most effective weight loss products
  • celebrex buy online
  • health product woman
  • living with heart failure
  • weight loss after preganancy
  • diabetes treatment drugs
  • low back pain relief
  • prevention of lung diseases
  • treatment of aids
  • viagra on-line
  • online medications without a prescription
  • buy acto plus
  • antidiabetic medications
  • generic plavix
  • pain med without a prescription
  • levaquin urinary
  • on line pharmacy
  • osteoarthritis medicine knees
  • 5mg cialis generic
  • discount viagra generic
  • canadian pharmacies
  • treating hair loss
  • new drug for arthritis
  • help with snoring problems
  • natural medicine for bone loss
  • pravastatin
  • alcoholism treatment
  • antibiotics no prescription
  • order perscription drugs online
  • discount birth control perscriptions
  • cheap phentermine online
  • arthritis of the neck
  • womens hair loss
  • buy diabetes drugs
  • propecia for hair loss
  • zantac prevacid
  • weight loss supplements that work
  • little penis
  • buy kamagra jelly
  • heart attack woman
  • dog skin remedies
  • cholesterol reducing medicines
  • cost of clomid
  • drugs used for hypertension
  • pain cure
  • over-the-counter diuretics
  • women body building
  • propecia pharmacy
  • levitra facts
  • discount medicine
  • attention deficit hyperactive disorder
  • prescription drugs on line
  • online medication
  • drugs that reduce swelling
  • tramadol generic name
  • cat hairball remedies
  • alternative hair loss cures
  • women taking viagra
  • drugs fda
  • viagra and buy
  • treatment of breast cancer
  • benefits of vitamin d
  • cure acne
  • what are the effects of klonopin
  • list of free prescription drugs
  • anxiety celexa
  • problems breathing
  • prescription clonazepam
  • cure hypertension
  • prescription drugs without prescription
  • infertility treatment
  • muscle burning pain
  • menopause cures
  • med orders
  • dementia treatment
  • types of blood pressure medicine
  • bodybuilding drugs
  • aids treatment
  • buy valium in uk
  • buy 10 mg cialis
  • buy medication
  • metronidazole dose
  • prozac and pregnancy
  • rapid hair loss
  • side effects of valium
  • treatment for hepatitis c
  • sildenafil kamagra
  • viagra with out prescription
  • help for sleeping problems
  • phentermine without prescription
  • fast weight loss cheap pills
  • sleep aids
  • next day medication
  • diet pills without a prescription
  • online generic drugs
  • retin a buy
  • buy viagra soft online
  • control blood pressure
  • online pharmacies no prescriptions
  • withdrawal zoloft
  • sleep disorders
  • cialis cheap
  • blood cholesterol
  • dog antibiotics
  • trental drug
  • where to get viagra
  • cures for hair loss
  • list of antibiotics drugs
  • order diovan
  • claritin versus zyrtec
  • drug discount codes
  • viagra cheap prescription
  • discount stop smoking prescription
  • allegra drug
  • viagra users
  • obesity diet help
  • hair loss product treatment price
  • phentermine pills
  • prozac pill
  • retin a cheap
  • strong erection
  • zoloft discount
  • prescription pain medicines
  • best male enhancement drugs
  • help with snoring problems
  • prevention of lung diseases
  • canada drug pharmacy
  • female sexual enhancement pills
  • where to buy ambien
  • effects side viagra
  • buy all drugs
  • healthy dog foods
  • plan b pregnancy
  • new adhd drugs
  • body building sites
  • cheap pain medications
  • alzheimers drugs
  • levitra effect
  • phentermine 90 pills
  • smoking cessation drugs
  • online drug stores
  • how do you prevent bone loss
  • mexican pharmacy online
  • thyroid pill pet
  • medical heart failure
  • viagra for sale without a prescription
  • diabetes meds
  • cholesterol and health
  • chronic itching and swelling in skin
  • discount anxiety drugs
  • cheap viagra in uk
  • quitting zyban
  • order phentermine diet pill
  • online pharmacy carisoprodol
  • how to relieve back pain
  • medications to help clot blood
  • new adhd drugs
  • what is valium used for
  • taking zoloft
  • doxycycline dose
  • order diovan
  • gaining muscle mass
  • discount medicine
  • coreg dosage
  • drugs for pain
  • cheap no prescription viagra
  • coupon claritin
  • soma price