quinta-feira, 19 de julho de 2007

Resenha do artigo: Ajax for Java developers - Write scalable Comet applications with Jetty and Direct Web Remoting (Ajax Reverso)

Este artigo do Philip McCarthy faz uma sucinta revisão sobre ajax e suas restrições no servlet conteiner, e explica qual a estratégia adotada pelo servidor jsp Jetty. Também é explicado o que é o método Comet (coisa nova pra mim) e a utilização do Continuations API do servidor Jetty. Também é demonstrado como integrar essas funcionalidades com o DWR. Ajax é, a um certo tempo, a buzzword do momento e que qualquer site que queria oferecer uma interação mais dinâmica do que uma mera leitura de páginas de revista no computador deve aprender seus fundamentos. O ajax pode simular a interação síncrona do browser com o servidor de 2 formas: criar um poll que é atualizado de tempos em tempos, trazendo evidenciando as atualizações ocorridas no servidor; ou manter a conexão http com o servidor aberta, repassando os dados conforme eles são atualizados, sendo esta última denominada de Comet. A solução do Comet vem tentar resolver o seguinte problema: diversas conexões simultâneas perguntado por atualizações e o servidor respondendo na maioria das vezes "nada ainda". O recurso gasto para estabelecer e responder cada conexão acaba super onerando o servidor. Seria como uma pessoa que toma um taxi para o aeroporto e ficasse perguntando de 5 em 5's para o taxista "já chegamos?". Totalmente estúpido, não acham?
Mas infelizmente tudo não é tão fácil. Como cada conexão aberta consome uma Thread Servlet, acaba-se esgotando a memória do servidor rapidamente. Como a maior parte da latência das respostas http é consulta a disco (db, arquivos, etc.) ou rede (email, IM, busca), esta Thread acaba ficando ociosa, somente aguardando alguma interrupção do servidor para enviar alguma coisa, gastando a preciosa memória do servidor. Jetty 6 & Continuations Jetty 6 explora a java.nio, que permite otimizar a consulta e utilização de recursos de IO. O mecanismo de Continuations permite que o servidor lide com várias conexões http, suspendendo as Threads que somente estão aguardando algo acontecer. Se o tempo da suspensão passar, ou o método resume() for chamado, a Thread é realocada e continua sua execução. DWR 2 & Ajax Reverso Um conceito novo introduzido pelo DWR é o ajax reverso, que nada mais é que um determinado dado que é "empurrado" do servidor para o cliente, sem este dado ser solicitado. Isto é muito último principalmente em aplicações que requerem um certo nível de resposta em tempo real, como no caso de IM's. O DWR utiliza 3 tipos de interação pelo ajax:
  1. a abordagem tradicional do pulling, ou seja, o cliente fica perguntado por atualizações de tempos em tempos
  2. a abordagem do pingback, que é uma aproveitar uma interação que o cliente irá fazer com o servidor e solicitar uma atualização dos dados. Com certeza este tipo de abordagem é a mais performática, mas é pouco útil no caso de clientes de IM's ou monitores (de log, por exemplo);
  3. finalmente temos o tipo Comet, que deixa a conexão aberta e vai enviando os dados conforme estes vão chegando.
O melhor de tudo é que o DWR detecta de forma transparente qual tipo de interação por ajax o cliente está utilizando. Uma tabela comparativa de um benchmark executando uma aplicação web 2.0 que utiliza o método Comet demonstra o tamanho do ganho que se tem utilizando a técnica de tratamento de Threads do Jetty.

Formula

Web 1.0

Web 2.0 + Comet

Web 2.0 + Comet + Continuations

Users

u

10000

10000

10000

Requests/Burst

b

5

2

2

Burst period (s)

p

20

5

5

Request Duration (s)

d

0.200

0.150

0.175

Poll Duration (s)

D

0

10

10

Request rate (req/s)

rr=u*b/20

2500

4000

4000

Poll rate (req/s)

pr=u/d

0

1000

1000

Total (req/s)

r=rr+pr

2500

5000

5000

Concurrent requests

c=rr*d+pr*D

500

10600

10700

Min Threads

T=c

T=r*d

500

-

10600

-

-

875

Stack memory

S=64*1024*T

32MB

694MB

57MB

A solução Jetty 6 & DWR 2 parece como a mais inteligente para servidores que suportam este tipo de aplicação (como cliente de email, monitores de log, Im's), porque assim podem otimizar recursos e evitar overheads desnecessários.
artigo original: http://www.ibm.com/developerworks/java/library/j-jettydwr/index.html?ca=drs- mais detalhes: http://www.webtide.com/downloads/whitePaperAjaxJetty.html mais detalhes: http://alex.dojotoolkit.org/?p=545

Lançada versão 1.0 da ferramenta opensource de MDA Taylor

Taylor é uma ferramenta opensource que tenta alinhar o poder do JEE com o disseminado conhecimento da UML. Através do seu método de análise e diagramação, é possível criar a maior parte do trabalho braçal de aplicações inteiras de forma automatizada. Utilizando os fundamentos da MDA, primeiramente é construído um projeto PIM (Platform Independent Model) e, depois de algumas configurações é gerado o PSM (Platform Specific Model) que, nesse caso é um JEE. Taylor trabalha no esquema de plugin do Eclipse, diminuindo assim a curva de aprendizagem e uso. Dentre as principais características, podemos citar:

  • Suporte ao Eclipse 3.3
  • Suporte JBoss Server
  • Suporte JBoss RichFaces
  • Suporte a EJB3 e JMS
  • Suporte a Portlets JSR 168
  • Utilização de Facelets Templates e TagLibs
  • Componente de geração de menu altamente customizável
  • Geração de CRUD
Na minha opinião, esse é um dos prováveis caminhos que a análise e implementação de sistemas, principalmente os empresariais, irá tomar. Depois de aprendermos os benefícios (ex.: rapidez) e dificuldades (ex.: manutenção) do modelo RAD nos anos 90, começamos a maturar como tornar mais produtivo e inteligente a construção de software. Quando nos deparamos com problemas clássicos que consomem, como a construção de um menu, implementações de DAO, CRUD, etc., vemos que este tipo de trabalho é repetitivo e pouco inteligente, o que nos leva a erros pífios e singelos. Somente com a MDA, rigorosamente guiado pela metodologia, aliado ao conceito de componentes, poderemos deixar de ser escravos do código. fonte: http://taylor.sourceforge.net/ demo: http://taylor.sourceforge.net/demos/demo1.htm

quarta-feira, 18 de julho de 2007

Espeficicação do JEE 6.0 foi aprovada pela JCP

Dia 17/7 a muito aguardada JSR 316 foi aprovada pela JCP. Dentro daqueles que votaram a favor ficaram: Sun, IBM, Red Hat and Google, e contra somente a Apache. De acordo com a ata da reunião, a Apache não tem nenhuma objeção quanto a spec em si, mas sim contra o encaminhamento dado pela Sun. Isso com certeza é algum resquício dos desentendimentos da Apache e a Sun por causa do projeto Harmony. Um dos direcionamentos dado nessa spec é tornar o desenvolvimento de sistemas empresariais mais simples e facilitados, criando profiles para cada tipo de cenário em que o JEE será utilizado. Dentre as novidades dessa versão, temos:

  • Extensibility: uma camada que facilita a utilização de "plugins" na JEE;
  • Profiles: customização de sub-specs do JEE para cada cenário;
  • Pruning: análise da necessidade do suporte retroativo (ex.: EJB 2.1) para as sub-specs;
  • SOA support: esta spec foi a mais direcionada para o suporte a arquitetura orientada a serviços.
Conforme declaração da Sun,
... um melhor suporte as estensões e modularidades é um dos objetivos dessa plataforma, que será muito util para conceitos de modularização. Este trabalho é continuado pela JSR 277 - Java Module System, o qual é o objetivo para o Java SE 7.
mais detalhes: http://jcp.org/en/jsr/detail?id=316 fonte: http://www.internetnews.com/dev-news/article.php/3689516

wingS: Swing para web usando ajax

The wingS team is proud to announce the general availability of wingS 3.0 with Transparent AJAX. wingS is a web application library that uses an API very similar to Swing for rendering content in a browser; Transparent AJAX unburdens the application developer from the complexity of asynchronous replication of conversational state between client and server.
Eu não conhecia este API para construir aplicações web 2.0 mas, depois de uma rápida olhadela, percebe-se que estão indo na mesma direção que o Tobago e Icefaces: querem deixar tudo exageradamente dinâmico e simular um terminal burro no browser. Oras, convenhamos, se o ponto crítico de um sistema web é o delay que existe entre a requisição e a entrega, porque devemos inchar a aplicação com esse tipo de feature? Devemos deixar dinâmico aquilo que realmente é necessário ser dinâmico, com um autosave ou auto upload, etc., mas o menu não precisa ser construído utilizando 10 chamadas http, o campo texto não precisa ficar toda hora verificando se existe alteração, etc. Enfim, até agora a única API interessante e utilizável é o ajax4jsf, que permite adicionar caracteristicas dinâmicas nos bons e velhos conhecidos componentes JSF. fonte: http://www.theserverside.com/news/thread.tss?thread_id=46227

SUN atualiza máquina virtual e corrige falha crítica

A Sun Microsystems liberou uma atualização crítica para a versão de consumo do software Java, poucos dias após o sistema de correções do Java ser criticado por um pesquisador de segurança.

A Java Platform Standard Edition (SE) versão 6, update 2, está disponível no site da Sun desde sexta-feira (13/07) e está sendo entregue aos usuários que usam o sistema de atualização automática, disse a porta-voz Jacki Decoster.

A Sun suporta quatro versões diferentes do Java SE para desktops, e a companhia já havia corrigido versões anteriores antes de lançar a versão 6, update 2, que é a mais atual para usuários finais.

A decisão preocupou a fornecedora de segurança eEye Digital Security, que disse que os crackers poderiam achar uma forma de explorar a falha por meio de engenharia reversa das correções liberadas para as outras edições.

A eEye descobriu a falha em janeiro. É uma falha crítica no Java Network Launching Protocol, usado para rodar programas em Java na web. Crackers podem explorar a falha criando um site malicioso e instalando softwares em qualquer PC com Java que visitar o site, diz a empresa de segurança.

A falha foi descoberta em janeiro e só agora que foi lançada uma atualização?? Por isso que eu acredito que com o lançamento do Harmony esse tipo de atualização será bem mais rápida. Imagine quantas outras empresas (IBM, BEA, Oracle) poderiam ser impactadas por essa falta de criticidade da SUN? Acho que está mais que na hora dela perceber que o java ficou grande demais para somente ela tomar conta.

fonte: http://idgnow.uol.com.br/seguranca/2007/07/16/idgnoticia.2007-07-16.4980350491/

terça-feira, 17 de julho de 2007

Líder do GMAIL afirma: Java é mais rápido que C


O líder de desenvolvimento do GMAIL, Paul Buchheit, afirma em seu blog que com seus testes, mesmo tendo sido tomado todos os tipos de otimizações do GCC o código de seu benchmark roda mais rápido em Java que em C.
E olha que otimização o google entende bem. Sempre quando ouço algum comentário sobre comparação de performance entre Java e C, sempre é feito por pessoas ou que não conhece Java, ou que não conhece C. Agora aqui está a prova cabal que só dá mais lenha para os trolls.


fonte: http://www.guj.com.br/posts/list/64694.java
fonte: http://paulbuchheit.blogspot.com/2007/06/java-is-faster-than-c.html

Lançada a nova release do Web Tools Platform 2.0

Lançada a nova release do Web Tools Platform 2.0, o famoso pacote de ferramentas do projeto eclipse para o desenvolvimento de projetos JEE.

Eclipse Web Tools Platform 2.0 is available for immediate download and can also be installed as part of Europa. This major update delivers its key goals of improved quality, adopter readiness, harmony with other Eclipse projects, and many new features for end users. Eclipse developers will be particularly pleased with the debut of major features and specification updates to EJB3 JPA, JSP 2.0, JSF 1.2, Axis2 Web Services, server support, and source editing. This release also introduces Java EE 5 project support.
Na versão 2.0 apareceu um editor visual para páginas jsp e jsf que, na minha opinião, não ajuda lá grandes coisas. Ele não consegue atender, nem o web designer (porque não renderiza a página de forma fidedigna) e nem o web developer (que necessita olhar as minúcias do código). A grande feature deste projeto é o code complete para jsf (incluindo suporte a reflection dos backbeans) e a paleta de componentes, que já estava disponível na versão anterior. fonte: http://www.eclipse.org/webtools/releases/2.0/index.php

Post 1.0

Olá, este é o primeiro post do JornalJava, blog sobre as notícias mais interessantes do mundo java. Ele foi construído no intuito de ajudar a sincronizar as informações dos desenvolvedores e participantes da comunidade java brasileira. Daqui vou estar apontando para as melhores novidades e disponibilizando minhas opiniões sobre os fatos mais marcantes. Um abraço a todos. JornalJava.com.br

Related Posts with Thumbnails