Lançado o MentaBean - Persistencia simples via configuração programática

É bizonho.

Mas como você faria o mesmo (no mesmo nível de complexidade) com configuração programática?

Massa cara, tomara que vingue !!

[quote=Maurício Linhares]

É bizonho.

Mas como você faria o mesmo (no mesmo nível de complexidade) com configuração programática?[/quote]

A outra opção que o Struts2 documenta na sua documentação oficial é o uso de XML para validação, colocando expressões Java (código Java) no meio do XML: http://struts.apache.org/2.x/docs/validation.html

(reparem que é difícil achar alguma citação na documentação do Struts2 sobre configuração programática. Existe mesmo?)

<!DOCTYPE validators PUBLIC 
         "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
 <validators>
   <!-- Field Validators for email field -->
   <field name="email">
       <field-validator type="required" short-circuit="true">
           <message>You must enter a value for email.</message>
       </field-validator>
       <field-validator type="email" short-circuit="true">
           <message>Not a valid e-mail.</message>
       </field-validator>
   </field>
   <!-- Field Validators for email2 field -->
   <field name="email2">
      <field-validator type="required">
           <message>You must enter a value for email2.</message>
       </field-validator>
      <field-validator type="email">
           <message>Not a valid e-mail2.</message>
       </field-validator>
   </field>
   <!-- Plain Validator 1 -->
   <validator type="expression">
       <param name="expression">email.equals(email2)</param>
       <message>Email not the same as email2</message>
   </validator>
   <!-- Plain Validator 2 -->
   <validator type="expression" short-circuit="true">
       <param name="expression">email.startsWith('mark')</param>
       <message>Email does not start with mark</message>
   </validator>
 </validators>

Já o Mentawai, desde da sua versão 1.0 de Agosto de 2005, procura fazer assim:


public class HelloWorldValidator extends ValidationFilter {
 
     private static final String FIELD_REQUIRED_ERROR = "Field required!";
     private static final String INVALID_USERNAME_LENGTH = "Username length invalid!";
     private static final String INVALID_AGE = "Invalid age!";
     private static final String INVALID_PASSWORD_LENGTH = "Invalide password length!";
     private static final String PASSWORD_DOES_NOT_MATCH = "Passwords do not match!";
 
     public void initValidator() {
         
         add("username", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
         add("username", new StringRule(6, 30), INVALID_USERNAME_LENGTH);
         
         add("age", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
         add("age", new IntegerRule(18, 50), INVALID_AGE);
         
         add("password", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
         add("password", new StringRule(4, 20), INVALID_PASSWORD_LENGTH);
         add("password", new EqualRule("password", "passconf"), PASSWORD_DOES_NOT_MATCH);
         
         add("passconf", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
     }
 
 }

A complexidade foi pra dentro das rules! Viva OO!

CONCLUINDO: Conheço pessoas que gostam, entendem e dominam o XML dos frameworks. Ponto pra eles. Conheço pessoas que adoram Annotatinos e fazem coisas loucas com elas. Ponto pra elas. Conheço pessoas que gostam de configuração programática. Pontos pra elas tb.

Claro, que mal isso pode fazer a um projeto? Nenhum! Só não acho que seja o fundamental, essencial, o mais importante, que a qualidade e/ou destino de um projeto/sistema/aplicação está intimamente ligado a isso. Como vc pode ver aqui, o CV e o fmeyer falaram categoricamente que se não tem testes é um lixo, é inútil.

[/quote]

Concordo, se fosse assim o kernel do linux seria um lixo, e isso parece ser cultura da comu Java. Tá, não é essencial, melhor um bom programador sem testes do que um “puppet SCJP” com 300 kg de siglas no currículo que não faz nada de concreto. Mas que é interesseante a idéia, é bastante!!!

Cara imagina uma lib que gera XML a partir de objetos anotados, imagine um emaranhado de métodos relativamente complexos que é usado para isso. Um teste automatizado poderia pegar um objeto complexo e mandar gerar o XML, e ver se é igual a um valor esperado. Por mínimo que seja o detalhe, o teste falhará em caso de bug, coisa que você não perceberia se deixasse pra testar “na mão”, poderia até perceber, mas com os testes automáticos você sabe que não “esquecerá” nada. Só um exemplo!

“As pessoas” tambem estao vendo que vc esta transformando um ataque a ideia em um ataque a pessoa. E “as pessoas” te acham meio mala por fazer isso.

A proposito, “as pessoas” eh que verificam a minha credibilidade ou a sua, e nao importa o quanto vc fale, grite ou esperneie. Nao cabe a mim julgar a sua credibilidade, mas por algum motivo vc se acha no direito de julgar a minha. Eh curioso.

Isso nunca deixou de ser verdade, e eu nunca contestei isso, mas como eh que vc vai provar pra mim - ou pr"as pessoas" que vc sabe o que ta fazendo ao evoluir o seu sistema sem quebra-lo?

E mesmo assim vcs nao escrevem testes pra ter certeza que nenhuma falta de atencao cagou em tudo? Caralho, ou vcs sao um bando de clones do Knuth, Dijkstra, Booch e afins, ou a gerencia de vcs nao tem a menor ideia do risco que ta correndo (e, pelo que da pra sentir das suas mensagens ate agora, nem vc).

Na verdade eles tem este conceito, só não encorajam muito o uso na documentação :smiley:
pelo menos o hibernate …
Configuração programatica do hibernate, neste mesmo tópico na página 6:
http://www.guj.com.br/posts/list/75/57053.java#299880

Usando reflexão, se fosse colocar tudo manual o código poderia ter ficado bem mais limpo …
mas com reflexão se pode adicionar classes novas com 1 linha :smiley:

[quote=saoj]Dá uma olhada na validação via Annotations do Struts2: (documentação oficial do Struts2: http://struts.apache.org/2.x/docs/validation-annotation.html)

@Validation() public class SimpleAnnotationAction extends ActionSupport { ... }[/quote]
Credo, como é que alguém poderia gostar disso?

É como o guilherme disse num post um tempinho atrás: Annotations Language.

Li tudo, e tirando os ataques pessoais tem algumas coisas de interessantes no meio disso tudo, na verdade até os ataques revelam algumas coisas… rs nem q seja até onde as pessoas vão para defender suas idéias ao invés de usarem argumentos usam ofensas (vc é feio, mas vc é bobo… rs)

Primeiro, a necessidade de um novo framework de persistencia, minha opinião, necessidade não existe. O hibernate e agora JPA são ótimas soluções q se aplicam a muitos casos, senão a maioria, a curva de aprendizado diminuiu bastante, mas tb não são triviais. Aprende-los no meu entender só agrega conhecimento. Sendo um padrão do mercado seria melhor integra-los da forma mais transparente possível, de modo q usa-ls ara operações simpels seja simples. A melhor opinião q eu vi aqui foi do urubatan sobre o wrapper para hibernate no mentawai, aquilo ficaria legal, simples, teria compatibilidade, usaria o poder do hibernate de forma fácil, ótima idéia.

Segunda discussão, programação programática x anotations e xmls, eu acho questão de gosto, não vejo motivos para ataques e defesas tão exaltadas de ambos os lados. O fato do hibernate e outros não incentivarem não desmerece a programação programática, e eu mesmo prefiro hibernate com xml ao invés de annotations.

Terceira discussão, essa mais profunda devido a importancia de testes. O sergio pode ser o melhor de todos os programadores, mas sem testes para comprovar que o sistema é sólido e mantem a compatibilidade é a palavra dele apenas. Minha opinião isso é arrogancia, justamente pq o mentawai visa ser utilizado. Apesar disso eu o uso, não o usaria numa aplicação mais importante devido a isso. Nada contra a pessoa e sim com a segurança. Não importa se quem desenvolveu trabalha sem testes numa empresa q fatura milhoes, bilhoes, etc, ou q o framework nunca deu problema antes, eu não tenho como comprovar isso. Se eu precisar extender e fazer alguma alteração nele, eu não tenho como comprovar se as operações mais simples estão consistentes.

Sergio é obvio q muitas situações não podem ser testadas, isso é básico, o problema é como vc garante q os contratos estão sendo cumpridos, enquanto tudo passa pelas suas mãos pode ser fácil, mas qdo alguem quer extender o sistema como essa pessoa pode ter a certeza q fez certo (ou pelo menos testar isso)?

Não faz falta a ausencia de testes, mas com certeza agregaria valor ao framework e facilitaria o seu uso nos caso q eu comentei acima.

A palavra minha, do Rubem Azenha, do Helio Frota, do Fernando Boaglio, do Davi Luan, do Mavin Froeder e do Alex Fortuna (em memória).

Mas eu concordo com o seu ponto e com o ponto do CV. Teste, em teoria, serviria para garantir que o programador não cometeu uma falha, a final todos podem e cometem falhas. Aí podem entrar dois pontos:

  • Pair programming: Eu programo desde os 13 anos e tenho 31. O Rubem tem 19 anos e quando olhou alguns códigos meus falou: isso aqui e isso aqui podem ser melhorados. Não falou que estava uma merda (e pior que estava pois na correria para finalizar a coisa eu acabei usando IF ao invés de polimorfismo :oops: ) mas mostrou como melhorar. Espero ainda ter contato com ele quando ele tiver 31 anos…

  • Defensive programming: Se cometer um erro, descubra e corrija ele o mais rápido possível. As vezes quando faço alguma alteração, olho o código e faço uma revisão bruta, ou seja, reviso ele no mínimo 3 vezes na minha cabeça, seguindo o fluxo. (Por isso que programação concorrente é uma fábrica de bugs, mas isso é outro assunto) Onde eu posso ter feito cagada aqui que vai me colocar em sérios apuros? As vezes ali mesmo já dá para vc pegar algum erro, um NPE exception que vc não tratou, e por aí vai.

Erros e bugs SEMPRE irão existir. Programar é a arte de resolver problemas rapidamente. Ontem só instalando o tomcat no meu eclipse deu milhões de paus. Tive que concentrar para entender o que estava acontecendo, resolver e seguir em frente. Pra quem não gosta de caçar bugs ou resolver problemas essa profissão é ingrata.

Acabei de baixar o source do Java inteiro. Cadê os teste ??? Não achei!!! Tá em algum lugar lá? O que me garante que eu posso usar e estender o pacote java.util ??? Putz e agora!?

Eu acho que é a boa e velha orientação a objetos !!! OO !!!

Se vc ou eu pegarmos o source do HashMap e modificá-lo, as chances são grandes de que vamos quebrar alguma coisa. Não foi nós que criamos e cá pra nós o algorítimo tem lá suas complexidades.

Mais se vc fizer um MyMap extends HashMap (ou implementar a interface e usar composição antes que me atirem o livro de patterns do GoF na cabeça) vc está livre para fazer o que quiser que será quase impossível quebrar o HashMap.

Ou seja: Se vc modificar o Framework, é bom vc saber o que está fazendo (melhor deixar isso para quem fez a coisa). Já se vc ESTENDER O FRAMEWORK usando os contratos que ele oferece usando as boas práticas de OO (herança, polimorfismo, etc.) vc não corre risco nenhum.

Por isso que dizem que a primeira coisa que vc deve avaliar num framework para saber se ele é estensível, é se todas as suas classes cores e tudo que ele diz ser estensível é implemetnado com interfaces.

Galera esse tópico já (não) deu o que tinha que dar. Tá bom de alguém bloquear ou deletar. Só tá gerando desentendimento e problemas pessoais.
Com todo respeito, vamos ler ou debater sobre outros assunto técnicos.
Entra lá no meu blog e vai ler os posts e clicar no adsense :slight_smile:

Bom, inicialmente gostaria de dizer que acho louvável a iniciativa de software livre. É difícil alguém abdicar de momentos de sua vida em pró de um ideal, de um framework ou software que pode ser usado por todos.
Mas nem por isso (por ter dado trabalho, ou por ser livre) quer dizer que o software é bom ou útil. Ele precisa provar isso como qualquer outro (não julgando versões betas, mas com o tempo).

Eu venho mantendo um projeto OpenSource e sei como tudo é difícil.
Mas uma das minhas preocupações principais foi não reinventar a roda. No meu caso é sobre geração de código e tem vários projetos sobre isso, nesse caso eu quis fazer algo diferente. Algo que me atendesse diante dos problemas dos outros projetos (que não são supra-sumos ou unanimidade como o Hibernate, e possuem muitos problemas).

Voltando ao menta, muitas vezes dei idéias para o projeto e inclusive contribui com códigos. Gosto Sergio por ser um cara correto, um bom programador e ter suas próprias idéias, que podem ser polemicas, certas ou erradas, mas são únicas.
Mas também já postei no fórum do Menta que não entendo a existência de Template dele (que basicamente é um Tiles) se existem coisas melhores e mais simples que podem ser usadas como o SiteMesh. Também não entendo outras coisas do projeto. Mas posso dizer que as idéias do MVC do Menta são legais - e acho que vocês (Sergio) deviam focar nisso. Não deviam perder o foco. Não tentem reinventar um framework de persistência, um framework de IoC, um de template, daqui a pouco vão acabar criando até um container web para funcionar tudo integrado e não ter que configurar nada… Mas acho que esse não é o foco (pelo menos nesse momento… o futuro a ninguém pertence…).

Entre no site do Menta. A logo irá dizer: Mentawai Web Framework. Então minha sugestão é essa, concentre no CORE do Web Framework, esqueça persistência, banco de dados e outras coisas, senão daqui a pouco o Menta vai ser uma pato que corre, nada, voa e pula (em Java), ou seja: faz de tudo, mas não faz nada direito. E eu Sergio estou dando uma opinião de quem quer que o projeto vá para frente, você sabe disso. Minha intenção não é criticar, apesar de me opor a algumas coisas.

Sobre a integração com o banco, leve adiante as idéias do Urubatan de facilitar a configuração do Hibernate para cenários simples (configuração ?automática?). Acho que o Menta vai ganhar muito mais com isso.

Agora sobre Features em geral, com certeza o Core do Menta tem muitas coisas que poderiam ser feitas e são prioritárias a essa. Você pode fazer a integração automática com o Hibernate Validator que eu tinha sugerido e muitas outras coisas que poderiam ser mais importantes para o Core da parte Web do framework.

Eu te dou parabéns pela força, garra e vontade de fazer algo em pró da comunidade. Mas não perca o foco do projeto para o bem dele e nosso =)

Abraços,

[quote=saoj] Me diga onde está o exemplo do Hibernate com configuração programática.

Essas coisas “existem” mas não são incentivadas, documentadas ou comentadas pelos seus autores, logo quase que “inexistem” pois ninguém usa ou fala delas. [/quote]
Só uma ponderação rápida:

  1. Se um dos pontos chave da questão gira em torno da configuração programática;
  2. Sendo o hibernate um software open-source, aceito, maturo, estabelecido;
    2.1 Que possui configuração programática
    2.2 Porém pouco documentada

Não seria mais proveitoso dedicar algum tempo para pesquisar e contribuir com a documentação do hibernate? Para criar artigos, exemplos, etc etc?

Ajudaria a “comunidade”.

Voce esta simplesmente insano. O JDK possui mais de DEZ MIL testes, no TCK, que NAO VEM junto com o JDK. O Fabio Kung postou uma noticia sobre isso pouco abaixo da sua sobre o mentabean!!! Assim reforça a ideia que todos falam que voce esta apenas interessado em escrever, e nunca ler e reaproveitar. Voce realmente achava que eles nao teriam testes unitarios? O JDK seria uma piada. Novamente voce afirma uma coisa, e na verdade é o contrario. Cuidado ao afirmar coisas sobre o java, do hibernate, sem ao menos ter pesquisado.

Voce ja concordou com os patterns do GOF sobre heranca X composicao que tanto falaram. Realmetne acho que voce devia dar uma chacne aos testes unitarios e calar a boca do pessoal daqui. Vale lembrar que testes nao é so para pegar bugs, ele vai forcar a voce programar sem singletons, com mais itnerfaces e mais desacoplado.

O TCK são testes unitaŕios sobre o código-fonte? Então não pode existir VMs proprietárias, ou que pelo menos a Sun não tenha acesso aos fontes?

Exatamente, e testes são mais uma ferramenta para ajudar a detectar erros, e a resolve-los rápido, principalmente qdo o sistema ou framework evolui com o tempo.

Entendi completamenbte seu exemplo (e concordo) apesar de um pouco forçado, pois vc ilustrou ele com uma alteração do core do java, mudar a implementação da classe Map realmente é algo de maior risco.

Mas voltando ao mentawai, há um tempo atrás ele não suportava collections apenas lists no output, eu realmente precisava usar collections, como resolver isso. Eu poderia abrir uma requisição do jira e esperar, poderia eu mesmo abrir o fw e mexer.

Concordo plenamente q mexer num framework sem conhece-lo profundamente é quase dar um tiro no pé, mas tb imagino q mudar de List para Collection não parece ser uma alteração de outro mundo (posso estar enganado), sendo assim um conjunto de testes ajudaria e muito eu efetuar essa alteração, sem precisar esperar os desenvolvedores oficiais do projeto. Além de q o conjunto de testes poderia ajudar na própria compreensão do q acontece nas entrenhas do framework, aquelas coisinhas q são pouco documentadas.

Ou seja é uma ferramenta, achar q testes são a oitava maravilha do mundo é um exagero, mas em muitos sistemas (devido a complexidade, e a forma como são organizados) é a melhor coisa q existe, em outros os testes mais complexos são praticamente inviáveis, cada caso é um caso.

Resumindo eu acho q testes só acrescentam, podem custar tempo, para quem desenvolve e conhece tudo pode ser perda de tempo, mas ajudam quem está quer modificar.

Nao Renato, a sun da o TCK para essas empresas. E é JUSTO disso a noticia do Kung, que tavam reclamando que pras open source ela nao tava dando.

Galera me parece que esses ataques são muito mais pessoal do que outra coisa!

Então uma pergunta para galera que recrimina o uso de qualquer coisa que não possui teste. Para aqueles que dizem que uma classe não existe se não tiver um teste para ela.

Então vcs recriminam o uso JForum também certo? Pois ele não possuiu teste também!

Se vcs não recriminam, pq com o JForum é diferente?

CV e os demais?

O JForum não tem testes? Você já viu o código fonte do JForum alguma vez na sua vida?

Provavelmente nunca.

https://jforum.dev.java.net/source/browse/jforum/tests/

Dá uma olhadinha, talvez você ache alguns testes fantasmas por lá.

Como ja disseram anteriormente, o JForum é uma aplicacao. A API dele é menos importante que suas funcionalidades finais, que é medida pelo usuario. BEM diferente de um framework ou biblioteca. O JForum 3 possui testes sim.

Sergio,

Uma das funcionalidades que tu colocou foi o seguinte:

 
 User u = new User(1);
 
 // não estamos dando load() !!!
 
 u.setAge(44);
 
 session.update(u); // vai gerar update users set age = ? where id = ?

O que acontece se eu fizer isso:

 
 User u = new User(1);
 
 // não estamos dando load() !!!
 
 u.setAge(44);
 u.setPhone(null);
 
 session.update(u); // vai gerar update users set age = ? where id = ?

Ele vai gerar o update somente com Age?

E se eu to querendo setar null na coluna Phone como tenho que fazer?

]['s