da água pro vinho, o caminho do desenvolvimento web java
TRANSCRIPT
Da gua ao vinho
o caminho do desenvolvimento web
Bruno Pereira
Palestrante
Desenvolvedor snior Concrete Solutions
7 anos de experincia com Java
8 anos de experincia com web
Um dos pioneiros em REST no Brasil
BP do Bem
- CGIs invocavam aplicaes dentro da mquina, passando valores atravs de variveis de ambiente
- Servlets inovaram ao passar a usar threads p/ request em vez de criar novos processos
DRY
CoC
Frameworks de persistncia integrados
REST
Linguagens de tipagem dinmica
Foco no cdigo
- Web server embutido - Scaffold - Gerador de CRUD c/ Ajax - CoC - a opo 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 questes 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 dinmico
- Gerao de um Admin de contedo 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 benefcios de Spring/Hibernate de forma bem menos complexa, mas sem tirar o poder.
- a opo de mais fcil integrao com Java
- Gera WAR padro Java
- Comunidade bem menor do que Django e Rails
- Ser que tem futuro dentro da VMWare?
Escalabilidade
Threads em vez de processos
Enorme evoluo da JVM
NIO: IO no bloqueante
C10k
Comets
Clean Code
Attribute-oriented programming
Annotations + generics
CoC
IoC
POJOs x Herana + Interfaces
Cdigo Ferramentas
Testing
Testes fora do container
IoC
TDD, BDD
Containers cada vez mais leves
Testes de controllers do VRaptor
Action-based x Component-based
CB so adequados p/ aplicaes RIA, no sites
AB cada vez mais RESTFul
Stateless x Stateful
Nvel diferente de controle de JS
O futuro RESTFul!
Powered by Java 5
@Resourcepublic class ProcessoController {private ProcessoDAO dao;private Result result;
public ProcessoController(ProcessoDAO dao, Result result) {this.dao = dao;this.result = result;}@Get@Path("/processo/index")public List index() {return dao.buscarTodos();}}
@Post @Path("/processo")public void cadastro(Processo processo) {dao.salvar(processo);result.use(Results.json()).from(processo) .serialize();}
@Get @Path("/processo/{processo.id}")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();}}
MockResult result = new MockResult();ClienteController controller = new ClienteController(..., result);controller.list(); List clients = result.included("clients"); //cast automticoAssert.assertNotNull(clients);
/articles/archive?date=08/01/08&page=2public static void archive(Date date, Integer page){ List 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}
//TemplatesArticle article = Article.findById(id);User user = User.getConnected();render(article, user);
//JPApublic void messages(int page) { User connectedUser = User.find("byEmail", connected()); List messages = Message.find( "user = ? and read = false order by date desc", connectedUser).from(page * 10).fetch(10); render(connectedUser, messages);}
Java EE 6
Separao em profiles
IoC + ampla
Criteria
JSR-311
Async Servlets
POJOs.
- Linguagem com caractersticas OO e funcionais
- Vista como sucessora natural de Java, embora provavelmente no vejamos uma opo com a adoo de Java
- Estaticamente tipada
- 2 a 3x menos cdigo comparando com Java
- Lift roda em qualquer servlet container 2.4+ Java. Podemos usar qualquer lib Java.
- Comets, XML, JSON, JPA
Selectors/Traversing
$('div#corpo div.destaque')$('/html/body//p')$('p:eq(0)')$('div:even')$('div:has(p)')$('span#description').prev()$('div#disclaimer').find('li')
Events/Manipulation
$('input:submit').click(function() { $(this).attr('disabled', 'disabled');});$('p').mouseover(function() { $(this).css('cursor', 'pointer');});
Page Speed
YSlow
Java in the Enterprise
Contato
twitter.com/blpsilvahttp://[email protected]