Novo projeto web com Java

Olá comunidade do GUJ, após muito tempo do desenvolvimento web com Java, como diz a musica do Rei Roberto Carlos, EU VOLTEI.

Bem após muito tempo desenvolvendo web somente com PHP, Python e Ruby eu tenho um freela com a tecnologia Java.

Bem como é um projeto simples e pequeno dá para fazer em poucas horas e como estou acostumado com frameworks web (rails-like) como Rails, Django, Slim, etc. quero trabalhar em uma linhas como estes frameworks. Pelo que acompanhei nos ultimos tempos o Play! Framework é o framework web hoje que mais se aproxima destes. Bem eu estou acostumado com facilidades vindas do Rails como Modelo.find(1) ou Modelo.create({attr: 1, attr2: 2}) e coisas do tipo. Hoje fui começar com o Play 2.0.4 porém as coisas no site oficial achei muito complicada, fiquei completamente perdido. Em fim coisas de iniciante né? Baixei um PDF do livro Play Framework Cookbook, porém a versão abordada no livro é a familia 1.x e parece que as coisas ficaram bem diferentes para a versão da familia 2.x.

Bem eu já tenho meu modelo de banco de dados em mente e eu consegui criar as classe de modelo e o relacionamento JPA com as anotações @OneToMany por exemplo. Agora eu preciso de saber como implementar as buscas (finders), como trabalhar com as rotas, passar parametros, construir minha views e coisas assim. Como o projeto tem apenas umas 4 páginas é um bom projeto para começar a usar a ferramenta. Por isso, se alguém puder me ajudar tanto aqui no forum ou via GTalk e Skype eu agradeço.

Bem vamos separar o que preciso para definir de forma organizada.

  1. Como implementar os finders (findAll, findByEmail, findByAttribute…)
  2. Como montar as rotas de formas organizadas
  3. Como construir as views.
  4. Como montar meus testes automatizados (pelo menos os jUnit da vida)
  5. Talvez como usar o console.

Grato por quaisquer ajuda.

Aqui tem uma aplicação completa utilizando JSF com JPA: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate.

Aqui mostra como utilizar o JPA para realizar os mapeamentos de relacionamento: JPA: Mini Livro - Primeiros passos e conceitos detalhados.

Olá Hebert, obrigado pelos links. Pode me ajudar com o Play Framewok também.

[quote=paulopatto]Olá Hebert, obrigado pelos links. Pode me ajudar com o Play Framewok também.[/quote]No momento não, sorry.

Cara, comecei a estudar o Play sexta ou sábado, minha experiência é mínima também. :smiley:

Mas vamos tentar trocar uma ideia… realmente, achei a documentação meio confusa em relação às versões, algumas coisas não estão tão bem documentadas nela (como trabalhar com ajax por exemplo).

O Play vem com um framework ORM chamado EBean. Você usa as anotações do JPA para o mapeamento e, para fazer as consultas acho que a maneira mais conveniente é usar as classes Model e Finder. Na tua entidade, você pode estender de play.db.ebean.Model, aí ela vai ter métodos de salvar, atualizar, remover, etc. Para as operações de busca, se utiliza a classe Finder. Dá pra ver a documentação dela aqui:

http://www.playframework.org/documentation/api/2.0.4/java/index.html

Nela tem métodos pra buscas com restrições, paginação, etc. Na documentação do Play é comum criar métodos estáticos na tua entidade, e estes métodos estáticos utilizarem este Finder, algo assim:

public class Person extends Model { //estendendo de model herdamos metodos save, update, delete...
   @Id
   public Long id; //getters e setters gerados automaticamente
   public String name;

   public static Finder<Long, Person> find = new Finder<Long, Person>(Long.class, Person.class); //O finder, aqui estatico

   public static List<Person> findByName(String name) {
      return find.where().ilike("name", "%" + name + "%").findList(); //executando a consulta por nome
   }
}

Não me parece muito testável isto (no sentido que é difícil injetar um objeto pra simular os resultados das buscas). Não sei se é desta maneira que se faz em projetos maiores, mas é o que tá na documentação e em alguns screencasts que eu vi.

Acho que se faz tudo pelo arquivo routes. Tem alguma dúvida em específico?

Você pode criar templates. Estes templates podem conter código Scala dentro. É bem simples o funcionamento do template, basicamente quando se quer escrever código, se utiliza “@” na frente, caso contrário ele é html (ou o que vc estiver escrevendo). Tem umas classes helper pra escrever formulários (import helper._). Quando você cria um projeto novo, ele vem com um arquivo chamado main.html.scala, que é o esqueleto para tudo. Nos outros templates você pode invocar este template e passar o conteúdo pra dentro dele.

Ele já vem com o JUnit. Basta colocar seus testes no package test e rodar, no console, play test. Ele já vem com o selenium configurado pelo que entendi, mas ainda não cheguei no ponto de testar isto. Mas parece que basta executar e já era, veja:

http://www.playframework.org/documentation/2.0.4/JavaFunctionalTest

Enfim, to aprendendo ainda, mas acho que é mais ou menos isso…

Abraço.

Poxa Wagner bem didática sua explicação me add no Skype ou gmail (paulopatto) para que possamos trocar umas idéias.

Se quer trabalhar na linha do RAILS dá uma olhada no Mentawai que é full-stack e bem alto-nível em termos de abstração. O famoso “stay out of the way”.

http://www.mentaframework.org

O Play tb é bom, mas mudou muito na versão 2.0. Ficou mais enrolado na minha opinião.

O Mentawai tem o MentaBean, meio que como um active record da vida. http://mentabean.soliveirajr.com

Saoj, obrigado pela resposta. Tem algum guia de iniciantes com o básico do fluxo (criação da camada de modelo, relacionamntos, controllers e criação de views) no metawai? Olha lembro que quando trabalhava com Java já existia o Mentawai e não gostava dele por que era apenas mais um framework que exigia muitos XML isso ainda existe?