Pesquisar

quarta-feira, 30 de abril de 2008

JPA em ambiente de produção (I)

Algo interessante a se notar é que algumas configurações podem ajudar a reduzir o impacto do uso de um framework ORM/persistência...
Por exemplo, "algumas" implementações do JPA oferecem a possibilidade de que o próprio framework crie, atualize e delete o esquema de tabelas, todavia esse tipo de recurso pode ser não desejável em ambientes de produção.

Veja o exemplo da implementação hibernate:
propriedade hibernate.hbm2ddl.auto
"Automatically validate or export schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly."

Ou seja, toda primeira vez que criarmos uma "session factory" [no caso EntityManagerFactory do JPA] o framwork vai tentar criar, validar ou etc. mesmo que o banco com as tabelas já existam. Pra quem dúvida basta observar o console, irá notar que o jpa tentar criar com ddl todo o esquema.

Outro caso é a implementação toplink:
propriedade toplink.ddl-generation ...

Enfim é interessante desligar essas opções em produção, aproveitar para deixar livre para outras coisas como logger...

terça-feira, 29 de abril de 2008

Testes unitários são criados para serem usados

É incrível ver pessoas escrevendo testes unitários apenas pra dizer que testam, não os usam realmente.
Um dos reais benefícios dos testes está em como um bom conjunto de testes pode ajudar em manutenções futuras do software, é necessário guardar esse conjunto de testes.A cada manutenção no software você pode rodar TODOS os testes (não só os novos que você fez... pra essa nova característica) e notar se houve alguma mudança em outras partes do código, não pense que sempre uma pequena mudança não irá afetar outras.
Alias não pense ou ache, teste!


Testes podem ajudar mais do que parece.
Faça, use, guarde e reuse seus testes.

sexta-feira, 25 de abril de 2008

dsl externa - como uma especificação pode te ajudar a compreender-las

Procurando ajuda sobre uma especificidade do java, encontrei a seguinte referência: The Java Language Specification, Third Edition

Neste "livro", sobre a especificação do java, há dois capítulos interessantíssimos para quem está interessado em dsl. Os capítulos são:
Grammars
Lexical
Para se desenvolver uma mini linguagem de um domínio especifico (dsl) é importante conhecer conceitos sobre como criar-la e como as coisas funcionam. (não é necessário nem citar que conhecer o domínio em questão é IMPRESCINDÍVEL ou mesmo criar uma "linguagem" comum entre desenvolvedores e experts do domínio [ubiquitous language])
Nestes capítulos há bons textos que explicam sobre o desenvolvimento de uma sintaxe, palavras chaves, totens e outros aspectos interessantes. Com toda certeza os capitulos não irão cobrir todo o assunto, falta vários outros aspectos como "compilação"... mas acredito que os mesmos possam ajudar.

PS: perdão pelo título (nada criativo).

terça-feira, 1 de abril de 2008

Sistemas são todos iguais... (até onde vai o reuso)

Fale-se sempre de domínio (especifico) para cada sistema... Também é bem dito que do domínio se aproveita pouco ou nada, aproveitamos mais de camadas de infraestrutura.

Mesmo assim "há grupos de pessoas" que insistem em vender um portal (sistema) que serve pra toda situação, ou seja, o portal da Globo.com pode ser também o portal da Gamespot.com, mesmo que portais (ou qualquer "coisa") tenham conceitos similares, um mesmo conceito de notícia para um portal pode ser totalmente diferente de outro, talvez pode até marcar o sucesso de um portal a visão desse "conceito" voltado aquele domínio especifico.

As empresas que compram esses portais "gerais" sempre recaem em se adaptar para usufruir do bem adquirido. Mais ou menos assim, "o cliente deve moldar seu negócio para que o mesmo caiba no sistema."

Comprei uma placa de vídeo de uma empresa (xfxforce.com), a placa de vídeo não oferece o controle de velocidade da ventoinha (fazendo um barulho ensurdecedor), logo pensei: "- Entrarei no site e vou mandar um email enfim tentar um contato para saber o que posso fazer."

Tive uma ótima surpresa, a empresa XFX oferece um sistema de suporte que agiliza e muito o processo de suporte dessa empresa (domínio especifico) funciona mais ou menos assim:

Todo produto que compra deles tem um número serial.
Logo você se cadastra no site e cadastra seu produto.
(não preciso descrever o que comprei apenas coloco o serial)
Bem depois de registrado o produto posso abrir um ticket para suporte.
Esse tal ticket funciona como um bilhete no qual você escreve sua dúvida/reclamação/sugestão para um técnico da XFX.
Assim o ticket fica em estado de "Com o técnico".
Tão logo o técnico responder ao ticket, o sistema envia um email avisando...
O ticket fica em estado "Com cliente"... e assim vai até resolver o problema.

Obviamente há mais recursos, mas o ponto aqui é este sistema funciona muito bem para o negocio da XFX (domínio especifico). Talvez se uma outra empresa quisesse criar um sistema para suporte online poderia com certeza aproveitar as idéias do sistema da XFX todavia não teria muito sucesso se usasse o mesmo sistema completamente.

As vezes o reaproveitamento das idéias juntamente com o entendimento do domínio especifico podem transformar um sistema (mcdonald) em algo com muita qualidade voltado realmente a resolver "aquele problema" não "o problema" de todos [lembra um pouco de arquitetura de referência] , que merece até mesmo citações como essa...