Category Archives: lightweight

A complexidade de Java e o comprimento da roupa das mulheres

Em 1926, George Taylor, um economista americano,  formulou a teoria do “Hemline Index“. A teoria correlaciona o comprimento dos vestidos da mulheres com a saúde da economia: quanto mais curto o vestido/saia, mais forte a economia.

Nos anos 40-50 a moda eram saias longas, até o tornozelo. A exuberância dos anos 60 veio com os mini-vestidos e o surgimento das mini-saias. A recessão e a crise do petróleo nos anos 70 aumentou o comprimento da roupa feminina, que diminui novamente no início dos anos 80. Na recessão que iniciou em 1987, fez com que a moda das longas saias e vestidos aumentasse novamente, até serem reduzidas novamente nos anos 90. No mínimo é uma estranha coincidência, certo?

Esta teoria foi validada e revista por Terry Pettijohn, um professor de psicologia na universidade da Carolina (EUA) e por vários outros pesquisadores e institutos de pesquisa de comportamento de consumo. Um resumo muito interessante está resumido neste artigo do jornal New York Times, de agosto de 2008. Desmond Morris utilizou esta teoria como base do seu livro “The Naked Ape“.

Nosso comportamento muda muito de acordo com a situação econômica. Isto já é um fato comprovado. A venda ou não de alguns itens só pode ser explicado por estes “up” e “down” da economia.

O que isto tem a ver com java?

Rod Johnson é um dos líderes da comunidade Java e Java EE. Ele é autor de livros importantes como “Expert One-on-One J2EE Design and Development (2002)“, “J2EE without EJB (Julho 2004, com Juergen Hoeller)“, “Professional Java Development with the Spring Framework (Julho, 2005)”.

Mais um detalhe. Ele é o idealizador do Spring Framework, indiscutivelmente, um dos melhores frameworks Java.

economyJavaEEcomplexity Foi ele quem apresentou um o gráfico ao lado que, utilizando o “Hemline Index“, expõe seu ponto de vista na tentativa de explicar, porque a plataforma Java tornou-se tão complexa.

Veja como temos uma tendência a complicar as coisa – como o comprimento longo das saias femininas -, quando a economia vai mau. E a complexidade diminui nas crises, como esta de 2008/2009.

Ele apresentou suas idéias durante o evento QCon, London 2009. É uma palestra de  pouco mais de 1 hora onde ele explica, com exemplos, alguns motivos que inseriram complexidade na plataforma Java.

Uma das razões é a abordagem de decisão por comitês, utilizado na JCP, que precisa “dar a benção” em toda mudança na linguagem.

Antes de mais nada, eu concordo com o ponto de vista colocado na apresentação. Não leve em conta minha opinião, ou mesmo do autor da apresentação: veja os fatos, os argumentos e tire suas próprias conclusões.

Meus R$ 0,10 na discussão. Como tudo na vida, a decisão por comitês (innovation by committee) é um processo de “trade-off“: ao controlar e burocratizar todo o processo de mudança, eu estou permutando estabilidade por uma menor inovação. É assim com as decisões do JCP e de todo comitê que você criar na sua empresa para controlar mudança.

Veja que isto não é necessariamente ruim. O ponto da discussão não é este. Existem épocas em que as saias são longas e em outros elas são curtas. Mas, tudo tem seu preço. No caso da plataforma Java, o preço foi o incremento de uma complexidade desnecessária.

Você quer saber algumas das razões?

Assisti a palestra do Rod Johnson e fiz um resumo. Se você se interessa pelo assunto, assista a palestra (1h 3min) ou leia meu resumo a seguir.

Que lições podemos tirar dos últimos 10 anos de desenvolvimento da linguagem Java?

Foi assim que R. Johnson iniciou sua palestra. Vou resumi-la em forma de bullets para simplificar a leitura.

Que lições podemos tirar dos erros no desenvolvimento da plataforma Java nos últimos 10 anos?

Dois fatores se destacam:

- O poder que os desenvolvedores tiveram com Java
- Flutuações na economia
- Java iniciou como uma linguagem fácil (ao contrário do que muitos acham), era como “C++–”. Mesmo hoje ainda é simples.
- O DNA de Java é a simplicidade
- O problema não é a linguagem em si. A complexidade foi introduzida ao longo do caminho

Um dos erros foi trazer o “Enterprise” para a linguagem. À esta palavras, em qualquer abordagem, está associada a complexidade. Quem se lembra das “Entity Beans”?

- A complexidade da indústria. Grandes companhias, como IBM, terem “abraçado” Java também tem pontos negativos. “É simplesmente impossível IBM adotar uma tecnologia e não complica-la”, de acordo com R. Johnson
- Abordagem “No pain no gain” (convenhamos, isto é uma falácia)
- Era legal ser complexo. Como desenvolvedor sou diferenciado (isto valeu no início)

Como J2EE evolui para Java EE

- Nos anos 90 Java começou a migrar para o servidor.
nota do autor do blog: Você já programou um “Applet”? Eu já! E utilizava o Notepad! (como sofremos…)
-Não existia muita “regulamentação” para a linguagem (nem havia muitas razões para)
-Ambiente de muita competição: ToLink, Apple WebObjects etc

O Bom e o Ruim

- Muita inovação, muitas opções (bom)
- Mercado de “server-side” era muito fragmentado (bom)
- Risco de ficar “preso” a um fornecedor (ruim)
- Muitas soluções caras (preço da inovação, ruim)

1999 – 2003

- Especificações começam: JCP
- Non-standard não podiam competir com uma plataforma J2EE padronizada:
- ORM versus EJB entity beans
- Velocity versus JSP
- WebObjects versus web tier

1999 – 2003: Bom e Ruim

- Cria-se um grande mercado
- Fornecedores com opções fechadas diminuiram, mas não foram eliminados
- Controle (JCP) estrangula a Inovação
- Idéia de que todos os business objects (EJB) deveriam ser distribuídos
- 2003: início de aplicações Java “leves” (lighter-weight solutions). Exemplo: a adoção em massa do Tomcat
- Os projetos open-source ajudaram a definir o futuro da plataforma e trouxeram inovação: Eclipse, Spring, AspectJ

As “armadilhas” ou Ideas que trouxeram complexidade no J2EE

- Design by committee: tudo precisava ser padronizado. JCP fala de forma privada; composto de grandes fornecedores de software
- Ferramentas que traziam excessiva complexidade
- Não abertura para outras plataformas, a abordagem “Java puro sangue”
- “Desenvolvedores são estúpidos e devem ser controlados”
- “Soluções complexas são melhores”
- “Eu preciso de uma solução que habilite minha arquitetura corporativa”

Os comitês queriam padronizar tudo em Java. Uma verdadeira obsessão do JCP. Citando, Jim Waldo, um engenheiro da Sun:

Reverenciando tudo de bom que os padrões nos trazem, eu acredito que, de certa forma, trazem um grande dano para nossa indústria e a ciência. Ele transforma discussões técnicas em debates políticos. Isto gerou um problema de entendimento do verdadeiro significado dos padrões. Pior de tudo, nos levou a fazer escolha tecnológicas absurdas, que nunca haviam sido implementadas e que não eram a escolha adequada para os problemas que tínhamos em nossas mãos

Exemplos do que foi dito acima:
- CORBA (1990s)
- CMP entity beans
- Muitos ignoraram o sucesso do “TopLink”

O bom exemplo do Linux

Linux é um exemplo de inovação que não fica restrita aos processos de padronização, que são restritos ao Kernel. Na minha opinião, se o processo de desenvolvimento do Linux fosse semelhante ao do Java não teríamos uma distribuição como o Ubuntu.

Qual deveria ser o papel do JCP?

Criar um “mercado” onde as inovações podem ser desenvolvidas a partir dos padrões. Inovação a partir de comitês (innovation by committee), historicamente, produzem resultados medíocres.

Por que a complexidade é “boa”?

- Temos uma tendência natural de achar que “sem dor não haverá ganhos”, ou o adágio “no pain no gain
- Síndrome da “Nova Roupa do Imperador”, ou seja, “não entendi muito bem, é muito complexo, então deve ser bom!”

“É a economia, estúpido!”

[nota do autor do blog: você já leram várias vezes esta frase aqui. E ela é citada por Rod Johnson como um dos motivos de mudanças no horizonte da complexidade. Veja o post sobre a versão 6 da plataforma Java]

- Em um cenário de pós-recessão temos que repensar os investimentos. Economia, economia.
- “Hemline Index”
Economista americano, George Taylor (1926). Relacionou a “exuberância irracional” de nossas ações (pessoas e empresas), com a exuberância da economia.

Inovações da comunidade que fizeram diferença

- Spring
- Hibernate
- Ruby on Rails
- Django
- Grails

Da comunidade open-source para simplificar a vida dos desenvolvedores!

Previsões

- Não teremos um retrocesso para um sistema com complexidade desnecessária
- Portfolio complexos não tem mais espaço. Foco na agilidade, simplicidade. Economia, economia.
- Processo Ágeis vieram para ficar
- Desenvolvedores ainda terão, e precisarão ter mais poder e mais responsabilidades
- Ainda é necessário termos uma plataforma Java que permita uma maior produtividade
- Tradicionais aplicações residentes no servidor cairão em desuso

Resumo

- A pessoa-chave para as mudança é o desenvolvedor
[nota do autor do blog: o desenvolvedor, o arquiteto tem que exercitar o Pensamento Crítico e não aceitar a complexidade simplesmente porque algum comitê, mesmo que seja o JCP, assim o definiu]
- Veja as alternativas, simplifique, estude e tire suas próprias conclusões. Não utilize uma solução porque alguém decidiu que esta é “a” solução

Category: Architecture, JavaEE, lightweight | Tags:

Arquitetura do Twitter e Google Talk: Lições Aprendidas

The only real mistake is the one from which we learn nothing

– John Powell, The Secret of Staying in Love (1990), p. 85

Se você se interessa por arquitetura de software, mais precisamente, sobre questões de escalabilidade de sistemas e soluções (software), o blog Highscalability.com é leitura obrigatória.

Algum tempo atrás eu li no blog acima um post muito interessante sobre a arquitetura de software do Twitter. O título é “Scaling Twitter: Making Twitter 10000 Percent Faster” e além da discussão de como foi a solução de arquitetura que permitiu que o Twitter ficasse 1,000% mais rápido (o post é de 27/06/2009), descreve detalhes de linguagem, tecnologias, problemas e soluções, enfim, uma aula de como funciona o “coração” de software do Twitter (lá quase tudo é open-source).

Não vou reproduzir em detalhes aqui, a leitura é interessante e valem os 10 minutos. O que me chamou a atenção na época foram as lições aprendidas em cada um dos projetos, que o autor apresenta no final do texto.

Estas informações são valiosas, priceless! Como afirmou John Powell (citado acima): “O único erro de fato é aquele do qual nada aprendemos“.

Você tem uma reunião de “lessons learned” no seu projeto? Não? Você e sua equipe estão perdendo uma excelente oportunidade de evoluir, de aprender com os erros e acertos e, principalmente, de não repetir os mesmos erros. Um conselho de amigo: invista alguns minutos com o grupo ao final de cada etapa do projeto e documente todas as abordagem que deram certos e aquelas que não devem ser repetidas (erros).

Vamos ao que interessa. Abaixo, bem resumido, reproduzo algumas “lessons learned” de dois projetos famosos: Twitter e Google Talk.

Twitter: Lições Aprendidas

  1. Compartilhe idéias com outros (comunidade). Não se esconda e tente resolver o problema sozinho. Muitas pessoas brilhantes estão dispostas ajudar (você precisa pedir)
  2. Encare seu planejamento de escalabilidade como um plano de negócio. Reuna um time de experts para ajudar você
  3. Construa o que você precisa. O Twitter investiu muito tempo tentando soluções de terceiros que pareciam funcionar, mas não eram adequadas. Quando você mesmo desenvolve pelo menos você tem o controle e pode adicionar as funcionalidades que precisar
  4. Pense em mecanismos de detecção de usuários com intenção de “derrubar” o sistema. Coloque limites de utilização de forma que nenhum deles, isoladamente, coloque seu sistema “no chão”
  5. Não utilize o banco de dados como única alternativa de armazenamento. Nem tudo necessita de um “SQL join” gigante. Cache é a palavra mágica. Pense em formas alternativas de chegar no mesmo resultado, disponibilize dados em memória. Veja detalhes de como o Twitter fez isto neste link
  6. Faça com que sua aplicação seja “modularizada” ou “particionável” desde o início. Você vai entender porque quando precisar escalar a mesma
  7. Otimize o banco de dados: indexe tudo, faça um tunnig das queries, desnormalize
  8. Teste tudo. Twitter tem agora uma suite de testes completa de forma que se ocorrer um problema de cache eles detectam o problema antes da nova versão ser liberada
  9. Muitos problemas de performance não vem da linguagem, mas de como a aplicação foi projetada
  10. Transforme o serviço do seu website em uma API aberta. Grande parte do sucesso do Twitter é graças à sua API. Isto permite que a comunidade crie inúmeros serviços e aplicativos com os quais será difícil para os concorrentes copiarem. Amazon e Google também fazem isto. Você nunca poderá fazer todo o trabalho sozinho, a criatividade do seu time tem limites.

Google Talk: Lições Aprendidas

  1. Identifique corretamente o que deve ser mensurado. No caso do Google Talk, a questão principal não é saber quantos Instant Menssages (IMs) o sistema entrega ou quantos usuário ativos o sistema suporta. Por exemplo, uma parte complicada de um IM é como exibir o status de todos os usuários conectados. A conta não é linear: UsuáriosOnLine x ListaDeAmigos x MudançaDeStatusOnline. Uma grande lista de amigos (“buddy list”) é um problema a ser endereçado, a quantidade de IMs não é o problema
  2. Simulação em “ambiente real”. Testes em ambiente controlado são bons mas não dizem muita coisa. Simule mudança de status por semanas e meses
  3. Planejamento contra problemas operacionais. O que acontece quando os servidores são reinicializados e o sistema retorna com o cache vazio?
  4. Um sistema “escalável” é um sistema distribuído. O que o Google fez foi adicionar tolerância a falhas em todo componente do sistema. Tudo pode falhar.

JBoss Libera HornetQ: open-source messaging system

Se você é familiar com os produtos da JBoss/Red Hat, já deve ter ouvido falar do JBoss Messaging (v 1.x). Como o nome diz é um middleware orientado a mensagens (ou MoM – Message-oriented Middleware), que era a solução de mensageria padrão do JBoss Enterprise Application Platform, JBoss SOA Platform e JBoss Application Server version 5.0.

O produto evoluiu e a versão 2.x ficou tão diferente do projeto original que eles decidiram dar um novo  nome para o produto: HornetQ.

Principais características

  • como o projeto original do qual é originado, o HornetQ é open-source (Apache v 2.0 licence)
  • roda em qualquer plataforma Java 5.x ou superior
  • suporta JMS 1.1 API, apesar de ter uma API de mensagens proprietárias (que a JBoss alega que tem uma performance superior)
  • provê sistema de mensagens persistentes com performance de MoM que trabalha com mensagens não persistentes (em memória)
  • pode ser integrado com o JBoss Application Server ou com com outro Java server/container
  • pode ser “empacotado”(embed) em sua própria aplicação (!)
  • opção de alta disponibilidade (server replication e client failover)
  • permite a criação de clusters (load balance, distribuição geográfica dos seus MoMs etc)
  • “core” do produto baseado em Plain Old Java Objects (POJO)
  • etc..

Arquitetura (high-level view)

Documentação

  • Guia rápido (PDF), recomendo!
  • Manual do Usuário (PDF)

MoM – Definição

Por fim, mas não menos importante, vamos a uma definição básica de um Message-oriented middleware (MOM).

Basicamente é uma solução de infraestrutura de software que recebe e envia mensagens. A arquitetura destas soluções tem um grande foco em questões relacionadadas a confiabilidade da entrega/envio das mensagens, interoperabilidade (“conversam” com vários protocolos) e portabilidade (ambientes altamente heterogêneos).

Na minha opinião, do ponto de vista de arquitetura de software, são soluções “elegantes” que reduzem a dependência e a complexidade das suas aplicações e/ou componentes. Como arquiteto(a), por exemplo, você não precisa se preocupar como uma mensagem vai sair do ambiente mainframe, ser persistida, transformada e roteada para, finalmente, ser entregue no formato de um SMS para seu cliente. Isto permite que você mantenha o foco no desenho, na arquitetura da solução, que é o mais importante.

Tudo indica que Mensageria será um dos elementos-chave em Cloud Computing. JBoss sabe disto e lançou o HornetQ com este objetivo ambicioso: ser o provedor de mensagens preferido no ambiente de cloud computing.

Boa sorte!

Mule ESB conversando com SAP ERP 6.0

Jackie Wheeler é a responsável pela publicações técnicas da MuleSource.org. Em um anúncio nesta Segunda, 10 de Junho, 2009, ela informa da disponibilidade do SAP Transport for Mule 2.

Segundo a documentação disponível, agora é possível enviar para o SAP uma mensagem XML (que é equivalente a um request de uma função BAPI) e receber uma resposta no mesmo formato.

O SAP Transport for Mule 2 possibilita conectividade com SAP ERP 6.0. A solução foi desenvolvida pela Osaka Gas Information System Research Institute Co., Ltd (OGIS), um parceiro da MuleSource do Japão.

Para quem ainda não conhece o Mule, recomendo uma leitura no meu post “Mule continua liderando no Open-Source ESB“.

Abaixo um resumo de como funciona o SAP Transport for Mule 2:

Você vai precisar instalar a partir dos códigos-fontes, uma vez que ainda não existe um binário disponível para download. Veja os pré-requisitos abaixo e mão na massa! Boa sorte.

Mule continua liderando no Open-Source ESB


Pouco antes do 2o. evento anual da comunidade Mule, MuleCon 2008, que acontenceu em San Francisco nos dias 1 e 2 de Abril, Ross Mason, CTO (Chief Technology Officer), concedeu esta entrevista ao site eWeek.com.

Vamos resumir os principais pontos:

1. Ele confirmou que o MuleSource irá lançar uma nova versão do seu ESB, sem precisar uma data (na verdade, veja sobre o lançamento do Mule 2.0, cujo GA [General Availability] ocorreu em 31-Mar-2008).

2. Quando comparado com outros produtos “fechados” tais como Iona e Sonic Software:

they have a lot more tools and all that proprietary IP. But the reason people like to use Mule is its simplicity. And they can build best-of-breed ESB and SOA solutions with Mule because we offer a lot of flexibility

3. Alguns outros detalhes do Mule Project:

  • Fundado em 2003 por R.Mason
  • Mais de 2,000 pessoas usuárias de sistemas em produção
  • Como surgiu a idéia?: quando trabalhava em um projetos de integração do back-end de 7 sistemas sistemas, ele descobriu que mais de 90% do código utilizado em uma integração poderia ser utilizado na integração seguinte.
  • Java ou Web-service?: inicialmente o produto foi desenvolvido com base em Web-services porém, por questões de performance, ele optou pela linguagem Java.

4. Alguns outros projetos importantes que o pessoal da MuleSource está trabalhando:

  • Desenvolvimento de um DSL [

5. Palavras do Analistas sobre o Mule:

  • Chris Haddad, um analista do Burton Group:

    If you want a lightweight, integration-centric ESB, you appreciate open source, and you have reasonably sophisticated developers, you’ll probably like Mule.

  • Jason Bloomberg, um dos analistas da ZapThink (sempre citado neste blog), afirma que de fato o Mule já é um dos mais populares ESB open-source porém, existem 2 (dois) grandes desafios que o “mercado de ESBs” precisa enfentar (concordo com ambas):
    • Too many organizations wrongly believe that buying an ESB can give them SOA

    • There’s no single definition of ESB in the marketplace

Mais sobre Mule veja estes posts deste blog: “Mule ESB: A Case Study“, “Mule ESB(II): 500,000 Downloads and couting…“, “Open-source ESB: O que falta no Mule?“.

Mais Previsões para 2008

Já tinha postado aqui as algumas previsões para SOA em 2008, de acordo com David Linthicum. Desta vez (com algum atraso, sorry), apresento as apostas de de David Chappell chief technologist para SOA da Oracle.

Vamos verificar as dicas de D.Chappell:

  1. Event-Driven Architectures (EDA) irá, finalmente, se tornar uma opção real para obter realtime insight nos processos de negócio e métricas de negócio
  2. Service Component Architecture (SCA) será a nova forma como as aplicações SOA deverão ser definidas para suportar as plataformas dos principais vendors de soluções de arquitetura orientada a negócio
  3. Container “leves” (lightweight containers) terão uma maior utilização. Spring, OSGI e EJB3 continuarão a ser utilizados.
  4. Aplicações baseadas em Web 2.0 terão uma maior utilização (desenvolvimento) no mundo corporativo.
  5. Muitas aplicações Web 2.0 irão ter problemas porque o cara que desenvolveu os mashups não trabalha mais na empresa e ninguém tem a menor idéia de como fazer as aplicações funcionarem novamente.
  6. Por este e outros problemas, uma necessidade por uma Governança com foco renovado irá surgir

Veja esta e outras previsões neste link.

Category: Governance, lightweight, SOA

Java é o novo COBOL?

Claro que o título é provocativo. Antes de mais nada deixo claro que já fui programador Java (desde as primeiras versões) e sou um defensor da linguagem. Penso porém que vale a pena um pouco de reflexão sobre o futuro desta plataforma.

Sempre argumento com o time de arquitetura da empresa onde trabalho sobre as opções que temos de desenvolvimento ágil. Utilizamos Java em nossos projetos mas sempre tento provocar uma discussão no sentido de avaliarmos as alternativas de linguagens mais “leves” (lightweight frameworks).

Ruby, PHP, JRuby (Java + Ruby, óbvio não?), são opções que devemos sempre considerar partindo da premissa que nenhuma linguagem/plataforma pode solucionar todos os problemas. O mais importante é termos o “fecho” da arquitetura e garantir a interoperabilidade entre os aplicativos. No nosso caso, com a nova arquitetura SOA implantada e a utilização de Web Services, isto fica muito mais fácil.

Bom, voltando ao Java. Esta discussão de que o Java não é mais o mesmo vem e volta sempre. É difícil argumentar quando sabemos que existem mais de 5 milhões de desenvolvedores Java atualmente. Por outro lado, mais e mais “cool kids” estão escolhendo alternativa a Java para implementar seus web sites. É o que argumenta Coach Wei neste artigo no JDJ.

Ele questiona se seria a falta de frameworks? Certamente não. Como ele mesmo cita, “I bet there are more Java frameworks than the population in China”. A questão é que muitos web sites são simples, sem muita complexidade; e isto talvez seja uma tendência. Neste ponto, scripts e lógicas lightweight no lado do servidor, que é a “praia” do PHP e Ruby/JRuby etc.

O que está faltando no mundo Java?

Ele aponta três alternativas:

1. JSP/Servlet com um Java Servlet engine (or mesmo um application server): Esta é a arquitetura predominante para aplicações Web-based nas corporações. Mas não tem nenhuma vantagem na contrução de web sites quando comprados com PHP ou Ruby;

2. JavaServer Faces: JSF é “the new kid on the block”. Vai facilitar a construção de sites? Provavelmente não! JSF foi desenvolvido para simplificar a contrução de aplicações form-based.

3. Utilização de um Java based content management system (CMS)? Segundo o autor, nenhum Java-base CMS tem o apelo e inovação suficiente para ser um “killer”.

A propósito, o título do post vem deste outro artigo: “Java, the Cobol of the 90′s?“, escrito por Quinton Wall (BEA).

Category: JavaEE, lightweight