Boas blogadas Java e afins

EJB 3: Dead Or Alive? (em inglês), artigo por Adam Bien, 2008-08-22, em Javalloby DZone. Veja também Absolute Beginner EJB 3 / JPA Series – the Essential Bootstraps And Background Information, no Weblog de Adam Bien.

Why you should consider Tapestry 5 (em inglês), artigo por Joshua Java, 2008-08-21. Veja também a discussão do artigo em TheServerSide.COM. A versão 5.0.14 do framework open source de apresentação web Tapestry foi recentemente lançada e o Tapestry 5 está quase atingindo o nível de release estável (GA). A nova geração do Tapestry, criado e mantido pelo contundente Howard Lewis, vem se mostrando cada vez mais sólida e madura, buscando superar algum criticismo contra as mudanças profundas e quebras de compatibilidade retroativa introduzidas na evolução pelas versões 3, 4 e 5 do Tapestry.

JavaFX is Dead, Long Live JavaFX (em inglês), por Per Olesen, 2008-08-22, impressões sobre o Java FX Preview SDK, disponível para download gratuito.

CodeGear promove encontros on-line para desenvolvedores Java (em português), notícia por Paula Zaidan, 2008-08-20, em JavaFree. Durante dois dias (21 e 28 de agosto) de sessões on-line, gratuitas e em português, especialistas da companhia apresentam as novas funcionalidades do JBuilder 2008, no JBuilder Day América Latina. A divisão CodeGear pertencia à Borland e foi recentemente comprada pela Embarcadero.

Four harmful Java idioms, and how to fix them (em inglês) – Rewrite convention and optimize your code for maintainability. Artigo por John O’Hanley, 2008-07-29, em JavaWorld.com.

Spring Recipes: A Problem-Solution Approach, crítica de livro escrita por Meera Subbarao, 2008-08-21, em Javalobby DZone.

OpenXava 3.0.3: JPA Application Engine (em inglês), notícia por Javier Paniza, 2008-08-19. Veja mais sobre o OpenXava no site do projeto.

Jt – Java Pattern Oriented Framework (Jt 2.7), TheServerSide.COM. Veja também Jt Framework project em java.net.

Presentation: Future Directions for Agile, por David Anderson, 1h 32min;
Presentation: 10 Ways to Screw Up with Scrum and XP, por Henrik Kniberg, 1h 28min; ambas em inglês, em InfoQ, filmagem de apresentações realizadas durante o evento Agile Conference 2008.

7 Principles Of Clean And Optimized CSS Code (em inglês), artigo por Tony White, 2008-08-18, em Smashing Magazine.

13 hand-picked Vertical and horizontal CSS Menus (em inglês), por Developer Fox, 2008-08-20. Veja também Usando CSS para criar uma barra de abas, por Márcio d’Ávila, 2004-01-07, e referências em Componentes e Bibliotecas JavaScript e AJAX – Menu e Treeview HTML Dinâmico em JavaScript.

Atualizações de segurança Apache

Vulnerabilidades, configurações e atualizações com correções de segurança dos servidores web Apache HTTPd e Java Apache Tomcat foram a pauta das atualizações de hoje no artigo Tutorial Tomcat – Instalação e Configuração Básica (revisão 31) e na página de referências sobre Entidades e Centros de Segurança – Centros de Informação de Segurança de Empresas – Apache Software Foundation.

Confira nos links acima.

Cloud computing – não confundir com grid computing

Cloud computing, ou computação em nuvem (computação nas nuvens, para os mais românticos) é o termo que vem sendo adotado para o seguinte conceito e tendência: uso de recursos computacionais e serviços baseados na Internet (chamada “a Nuvem”, “the Cloud”). Segundo Reuven Cohen, a explicação mais simples para cloud computing pode ser descrita como ‘software centrado na Internet’.

Isso engloba o uso maciço de software como serviço (software as a service – SaaS) através da Internet — o exemplo típico são as aplicações de escritório do Google Docs disponíveis e utilizadas através da Internet, utilizando-se um simples navegador/browser Internet no computador do usuário. Também inclui a tendência de desenvolvimento de aplicações que incorporam serviços e funcionalidades disponibilizadas através da Internet, chegando até o desenvolvimento de software e serviços usando uma plataforma computacional disponibilizada pela Internet, como mostra o artigo A short introduction to cloud platforms — An Enterprise-oriented view [pdf] de David Chappel, agosto 2008.

Atualmente, empresas como Google e IBM encabeçam a promoção e a pesquisa do uso de cloud computing, muitas vezes alardeado como o futuro da informática, como mostra a reportagem Google prepara, hoje, o futuro da informática [vídeo] da Rede Globo, apresentada no Jornal da Globo de 6 de maio de 2008.

Embora profetizado como grande tendência futura para os próximos anos, cloud computing enfrenta também o ceticismo e a crítica, como por exemplo se vê no ensaio do cronista de tecnologia americano John C. Dovorak (reprodução comentada por Antonio Passos), em sua coluna publicada na revista INFO Exame de junho de 2008. Já para o especialista visionário Nicolas Carr, autor do best-seller Does IT Matter (2004) e do livro recente “A grande virada: reconectando o mundo, de Edison a Google” (do inglês The Big Switch: the World from Edison to Google), cloud computing é uma forte previsão, mas a adoção nas grandes empresas não vai acontecer do dia para noite, ainda levará de uns cinco a dez anos para as grandes corporações migrarem em peso sua TI para cloud.

Cloud computing não deve ser confundido porém com grid computing, ou computação em grade/grelha. Este último consiste no modelo computacional do uso de um conjunto ou agrupamento de computadores em rede (mas com baixo acoplamento) para computação distribuída de aplicações e serviços, se comportando como uma espécie de super computador virtual, permitindo a realização de tarefas em larga escala.

A utilização de plataformas cloud computing — ou seja, a formação de um grid de computadores disponibilizados através da Internet — é uma forma possível de implementação de grid computing. O caso mais comum atual de grid computing, porém, ainda é a agregação de um conjunto de servidores dentro do ambiente de datacenter de uma corporação, aproveitando o investimento em servidores de pequeno e médio porte para produzir o processamento e a disponibilização de serviços de grande porte.

A definição de Dennis Byron, analista da Research 2.0, apresentada no blog Carreira e Certificações em TI no artigo Computação em nuvem: Microsoft, Google e tempestade à vista, apresenta uma relação objetiva entre os dois conceitos:

O cloud é, basicamente, uma combinação de grid computing, que tratava basicamente de potência de processamento bruta, e software como serviço. Na realidade, cloud é virtualização de rede.

Para saber mais sobre cloud computing:

Para saber mais sobre grid computing:

Para saber mais sobre computação distribuída:

Tiers and Layers – Camadas Físicas e Lógicas

[Atualizado em 31 de outubro de 2008.]

No contexto de arquitetura de software, ambos os termos técnicos Tier e Layer em inglês podem ser traduzidos para português como Camada, em geral relativo a sistemas multi-camadas. Mas cuidado para não haver equívoco ou ambiguidade, pois os dois termos não são meros sinônimos, têm significados distintos.

  • Layer se refere a Camada Lógica de organização dos componentes do sistema ou aplicação.
  • Tier se refere a Camada Física ou Estrutural dos componentes com foco na infraestrutura (hardware, sistema operacional e serviços/servidores) e suas responsabilidades no sistema.

Segundo Peter Eeles, no artigo Layering Strategies, o termo layer (camada) se refere à aplicação do padrão arquitetural genericamente conhecido como Layers Pattern, que estrutura em camadas um sistema que requer decomposição, por algum motivo. Por exemplo, um sistema:

  • que é muito complexo para ser compreendido em seu todo de uma só vez;
  • que é difícil de ser mantido;
  • que é construído por equipes distintas, possivelmente com habilidades e conhecimentos diferentes;
  • cuja maioria dos elementos reusáveis são difíceis de se identificar.

Eis as principais camadas lógicas (layers), segundo Martin Fowler in: Patterns of Enterprise Application Architecture (Addison-Wesley, 2003, ISBN-13 978-032112742-6, 560 p.), Capítulo 1 – Layering, The Three Principal Layers:

Camada Lógica Responsabilidades
Apresentação Interação com usuário (exibição de informações, validação de entrada), provisionamento de serviços.
Domínio / Negócio Lógica específica particular ao sistema ou aplicação.
Acesso a Dados Comunicação com bancos de dados, EIS, sistemas de mensagens, monitores de transação.

Uma boa prática que se prega no projeto da arquitetura de software é que cada camada lógica só deve interagir com a(s) camada(s) imediatamente adjacente(s), visando a maior separação de atribuições (coesão) e o baixo acoplamento.

As camadas físicas (tiers) caracterizam a infraestrutura sobre a qual o sistema ou aplicação executa. As camadas físicas podem variar de acordo com a plataforma e o ambiente tecnológicos específicos que se utiliza. Um modelo canônico de camadas físicas em ambiente web pode ser resumido como a seguir.

Camada Física Caracterização
Cliente Navegador (browser) web, páginas DHTML (HTML, JavaScript, CSS, DOM), componentes/plug-ins adicionais RIA (Flash, Applet Java, JavaFX, ActiveX, XUL etc.), outros objetos MIME (dados, documentos e arquivos em outros formatos).
Rede e Serviço Web Servidor web, protocolo HTTP sobre TCP/IP, processamento de requisição-resposta do cliente web, encaminhamento e integração com servidor de aplicações.
Serviços de Componentes e Aplicação Servidores de aplicação (plataformas mais comuns: Java EE e Microsoft .NET), servidor de objetos distribuídos (EJB, COM+, CORBA etc.).
Serviços de Dados e Integração Servidores de bancos de dados (SGBD), sistemas de mensageria, mecanismos de integração/interação com outros sistemas (EIS).

 

Tipicamente, as camadas lógicas são mapeadas em uma ou mais fatias da camada física da arquitetura. Para exemplificar um mapeamento típico de camadas lógicas em camadas físicas no ambiente web, a apresentação em geral abrange o cliente web, o servidor web e os mecanismos MVC do servidor de aplicação; o domínio ou negócio se concentra no servidor de aplicação; e o acesso a dados se concentra nos servidores de bancos de dados e outros eventuais componentes na camada física de dados e integração.

Contudo, para Eeles, o termo layer é um conceito geral de divisão de um sistema em camadas, que pode ter diversas estratégias de organização e aplicação. Este autor define tier como um caso específico de layer associado a estratégia particular de responsibility-based layering (camadas baseadas em responsabilidades).

Eeles ainda adverte para o fato que mesmo tiers não implicam a efetiva organização ou distribuição física. Um sistema 3-tier pode estar fisicamente em um único hardware, ou ter suas camadas distribuídas entre dois ou mais computadores (grid, cluster, farm etc.).

Para saber mais:

Layers Pattern: