Da água pro vinho, o caminho do desenvolvimento web Java

2,206 views

Published on

Palestra sobre desenvolvimento web Java, realizada no QCon SP 2010.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,206
On SlideShare
0
From Embeds
0
Number of Embeds
362
Actions
Shares
0
Downloads
17
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • - CGIs invocavam aplicações dentro da máquina, passando valores através de variáveis de ambiente - Servlets inovaram ao passar a usar threads p/ request em vez de criar novos processos
  • DRY CoC Frameworks de persistência integrados REST Linguagens de tipagem dinâmica Foco no código
  • - Web server embutido - Scaffold - Gerador de CRUD c/ Ajax - CoC - É a opção com mais sucesso comercial - Forte comunidade no Brasil e no mundo - Excelentes ferramentas para TDD/BDD - Tem feito excelente uso da plataforma Java, reduzindo drasticamente as questões de escalabilidade
  • - Semelhante a RoR em muitos aspectos. - Framework for perfectionists with deadlines - Criado para atender com qualidade aos prazos curtos de um ambiente editorial muito dinâmico - Geração de um Admin de conteúdo muito poderoso, que poupa muito tempo de desenvolvimento - Framework Python - Enorme comunidade, muito ativa
  • - Mto semelhante a RoR, mas ideal para devs que vieram de Java e querem aproveitar skills - Feito em Groovy, sobre Spring, Hibernate e Sitemesh. - Oferece os enormes benefícios de Spring/Hibernate de forma bem menos complexa, mas sem tirar o poder. - É a opção de mais fácil integração com Java - Gera WAR padrão Java - Comunidade bem menor do que Django e Rails - Será que tem futuro dentro da VMWare?
  • Threads em vez de processos Enorme evolução da JVM NIO: IO não bloqueante C10k Comets
  • Attribute-oriented programming Annotations + generics CoC IoC POJOs x Herança + Interfaces ↑ Código ↓ Ferramentas
  • Testes fora do container IoC TDD, BDD Containers cada vez mais leves Testes de controllers do VRaptor
  • CB são adequados p/ aplicações RIA, não sites AB cada vez mais RESTFul Stateless x Stateful Nível diferente de controle de JS O futuro é RESTFul!
  • - Linguagem com características OO e funcionais - Vista como sucessora natural de Java, embora provavelmente não vejamos uma opção com a adoção de Java - Estaticamente tipada - 2 a 3x menos código comparando com Java - Lift roda em qualquer servlet container 2.4+ Java. Podemos usar qualquer lib Java. - Comets, XML, JSON, JPA
  • Da água pro vinho, o caminho do desenvolvimento web Java

    1. 1. Da água ao vinho o caminho do desenvolvimento web Bruno Pereira
    2. 2. Palestrante <ul><li>Desenvolvedor sênior – Concrete Solutions
    3. 3. 7 anos de experiência com Java
    4. 4. 8 anos de experiência com web
    5. 5. Um dos pioneiros em REST no Brasil </li></ul>
    6. 6. BP do Bem
    7. 13. Escalabilidade
    8. 14. Clean Code
    9. 15. Testing
    10. 16. Action-based x Component-based
    11. 17. Powered by Java 5
    12. 18. @ Resource public class ProcessoController { private ProcessoDAO dao; private Result result; public ProcessoController(ProcessoDAO dao, Result result) { this.dao = dao; this.result = result; } @ Get @ Path (&quot; /processo/index &quot;) public List<Processo> index() { return dao.buscarTodos(); } }
    13. 19. @ Post @ Path (&quot; /processo &quot;) public void cadastro(Processo processo) { dao.salvar(processo); result.use(Results. json() ). from (processo) . serialize (); } @ Get @ Path (&quot; /processo/{processo.id} &quot;) public void buscar(Processo processo) { processo = dao.buscar(processo.getId()); if (processo != null) { result.use(Results. xml() ). from (processo) . serialize (); } else { result.use( Status .class). notFound (); } }
    14. 20. MockResult result = new MockResult(); ClienteController controller = new ClienteController(..., result); controller. list (); List<Client> clients = result. included (&quot;clients&quot;); //cast automático Assert.assertNotNull(clients);
    15. 21. /articles/archive? date =08/01/08& page =2 public static void archive(Date date , Integer page ){ List<Article> articles = Articles.fromArchive( date , page ); render(articles); } public static void show (Long id) { Article article = Article.findById(id); render(article); } public static void edit (Long id, String title) { Article article = Article.findById(id); article.title = title; article.save(); show (id); // redirect to show }
    16. 22. // Templates Article article = Article.findById(id); User user = User.getConnected(); render( article , user ); // JPA public void messages(int page) { User connectedUser = User.find(&quot;byEmail&quot;, connected()); List<Message> messages = Message. find ( &quot;user = ? and read = false order by date desc&quot;, connectedUser). from (page * 10). fetch (10); render (connectedUser, messages); }
    17. 23. Java EE 6 <ul><li>Separação em profiles
    18. 24. IoC + ampla
    19. 25. Criteria
    20. 26. JSR-311
    21. 27. Async Servlets
    22. 28. POJOs. </li></ul>
    23. 30. Selectors/ Traversing $('div #corpo div .destaque ') $(' /html/body//p ') $('p :eq(0) ') $('div :even ') $('div :has(p) ') $('span#description'). prev() $('div#disclaimer'). find('li')
    24. 31. Events/ Manipulation $('input:submit'). click(function() { $(this). attr ('disabled', 'disabled'); }); $('p'). mouseover(function() { $(this). css ('cursor', 'pointer'); });
    25. 32. Page Speed
    26. 33. YSlow
    27. 34. Java in the Enterprise
    28. 39. Contato twitter.com/blpsilva http://brunopereira.org [email_address]

    ×