sexta-feira, 31 de outubro de 2008

A guerra dos navegadores

Segue um documentário muito interessante que conta a história do surgimento dos browsers. Também fala da guerra entre a Netscape e Microsoft que determinou a morte do browser Netscape e ascensão do Internet Explorer.



Fonte: Discovery Brasil.

quarta-feira, 22 de outubro de 2008

LinkedIn usa Spring Framework

Achei muito legal ter lido no blog do Matt Raible (Raible Designs) que o site de relacionamentos profissionais LinkedIn usa Spring Framework.

Ele participou de uma palestra onde um integrante da equipe de desenvolvimento do site contou as experiências de uso do Spring. Interessante foram alguns números apresentados pelo Matt: 2 data centers (~600 máquinas), ~100 serviços (componentes), ~30-40 interfaces, ~1000 arquivos de configuração do Spring e atualmente 30 milhões de usuários com a taxa de crescimento de 1 milhão a cada 2-3 semanas! Uau! Tudo rodando num cluster de ~600 máquinas com o Tomcat! Isso mesmo, TOMCAT! Agora eles querem evoluir a solução para usar modularização através de OSGi e Spring Dynamic Modules for OSGi (que facilita tremendamente o uso de OSGi). Tudo isso para prover hotdeploy e múltiplas versões dos componentes, além da distribuição automatizada no ambiente em cluster.

Este mesmo caso de sucesso será apresentado no evento SpringOne que acontecerá no final deste ano nos USA com o título Case Study: Spring at LinkedIn.

Legal também foi a frase que vi no blog do pessoal do LinkedIn: LinkedIn is 99% Java but 100% Mac. Nos outros 1% estão usando C++, Ruby on Rails e Groovy/Grails.

Contudo, fiquei muito espantando quando soube que tem alguns poucos loucos querendo remover o Spring Framework de uma aplicação funcionando muito bem em produção simplesmente por ter birra do Spring e birra de frameworks. Se pelo menos estivessem substituíndo por EJB 3 ou JBoss Seam com um servidor de aplicações decente como o JBoss Application Server, aí eu aceitaria. Mas a insanidade leva a quererem usar servlets puro ou talvez Struts puro. Vai entender!

Quanto mais pesquiso sobre o Spring Framework vejo que tornou-se um padrão de fato. Não precisa ir muito longe em cliques ou páginas de resultado da busca no Google para ver muitos outros casos de sucesso de arquiteturas funcionando muito bem com o Spring Framework.

Não deixem de visitar o blog do pessoal do LinkedIn em (http://blog.linkedin.com/) ou o blog do Matt Raible em (http://raibledesigns.com/).

segunda-feira, 13 de outubro de 2008

JBoss Seam: Injection vs Outjection

Injection - A capacidade do JBoss Seam de atribuir uma referência válida para um objeto (Seam Component) num atributo de outro componente. Esta capacidade é realizada através das anotações @In e @DataModelSelection, por exemplo. Quando o Seam encontra estas anotações num atributo de um Seam Component, localiza um objeto num dos contextos com o nome indicado e injeta no atributo.

Outjection - Que também podemos chamar de ejeção, é a capacidade do JBoss Seam de expor um objeto referenciado por um atributo de um Seam Component num dos contextos do Seam. Ejetar significa o Seam pegar a referência para um objeto armazenado num atributo privado de um Seam Component e armazenar num dos contextos com um nome associado. Ao expor o atributo, mesmo privado, este estará disponível para injeção em outros Seam Components via injection ou para acesso via Expression Language (EL) numa tela JSF. Esta capacidade é realizada pelo Seam através da anotação @Out. Contudo, no momento de ejetar um atributo como Seam Component num dos contextos, o Seam pode realizar alguma transformação do objeto como, por exemplo, na anotação @DataModel onde o Seam encapsula uma lista de objetos num JSF Data Model antes de armazená-lo no contexto. Assim, quando o usuário seleciona um item num Data Table numa tela JSF, o JSF sabe qual objeto foi selecionado e o Seam recupera este objeto para injetar num outro atributo do Seam Component que foi marcado com a anotação @DataModelSelection.

Sobre os contextos do Seam escrevi os posts Sobre os contextos do JBoss Seam e Seam Contexts Ilustrados. Neste último post cito a diferença entre Context Variable e Instance Variable. Considerando estes dois conceitos, podemos definir como injeção o movimento realizado pelo Seam de uma referência para um objeto do Context Variable para o Instance Variable. Já ejeção significa o movimento de um Instance Variable para um Context Variable. Nestes movimentos, o Seam pode realizar transformação dos objetos.
  • Anotações que realizam injeção: @In e @DataModelSelection.
  • Anotações que realizam ejeção: @Out, @DataModel, @Factory e @Name.
Then, any issue let me know! Post comments!

quarta-feira, 8 de outubro de 2008

TDC em Floripa

A Globalcode em parceria com a V.Office, empresa sediada em Florianópolis, promove o evento The Developes Conference para a comunidade Java no sul. Agora todo o profissionalismo e qualidade do evento será levado para Floripa.

Já comentei aqui a qualidade dos eventos Open TDC e TDC realizados em São Paulo. Depois de duas edições do TDC mais as prévias no Open TDC, a versão em Floripa deve ser melhor ainda.
Vale a pena conferir!