Java


Capa do livro
Seis consultores e instrutores Java da Caelum estão escrevendo o livro Arquitetura e Design de Software: Uma visão sobre a plataforma Java, fruto de mais de dois anos de experiência ministrando o treinamento de Arquitetura e Design Java, consultorias e projetos realizados pela empresa e discussões no GUJ.com.br.

No site do livro está disponível a estrutura de conteúdo proposta, com diversos trechos rascunho para baixar em PDF.

O livro tem prefácio de Phillip Calçado. O lançamento, pela editora Campus Elsevier, foi inicialmente previsto pelos autores para novembro de 2009 e depois primeiro semestre 2010, mas pelo atraso creio que eles devem estar sofrendo na pele a Regra de Pareto: os 20% finais do livro tomando 80% do tempo… vamos aguardar.

O Java Developer Newsletter de Junho 2010, agora mantido pela Oracle Technology Network (OTN) — oriundo do Sun Java — traz duas novidades nas atualizações dos dois principais softwares livres Java suportados pela Sun (Oracle):

O servidor de aplicação GlassFish, oriundo do Sun Java System e implementação de referência da plataforma Java Corporativa desde o Java EE 5, atingiu o primeiro Milestone da futura versão 3.1, conforme o Plano do GlassFish Server Open Source Edition 3.1 e seu Roadmap.

O GlassFish V3.1 Milestone 1 foca os recursos de clusterização, administração centralizada e alta disponibilidade. Aos poucos, o projeto GlassFish está tendo sua interoperabilidade e compatibilidade alinhados com a família da plataforma comercial Oracle Fusion Middleware (atualmente baseada na adquirida família BEA WebLogic) e com a Java VM de alta performance JRockIt (também oriunda da BEA).

ambiente de desenvolvimento NetBeans IDE está ainda mais perto da versão de atualização 6.9. O NetBeans IDE 6.9 Release Candidate 2 foi lançado, antecipando as diversas novidades que traz.

NetBeans IDE 6.9 introduz o JavaFX Composer, ferramenta de layout visual para construção da interface de gráfica de aplicações JavaFX (similar ao Swing GUI builder para aplicações gráficas desktop Java SE). Também são destaque a interoperabilidade OSGi com Maven; suporte a JavaFX SDK 1.3, PHP Zend framework, Ruby on Rails 3.0, Spring Framework 3.0; verificação ortográfica no Editor; e melhorias no Editor e no Debugador Java.

Este artigo apresenta e diferencia os dois tipos básicos de busca e recuperação de informação por nome ou descrição, a consulta e a pesquisa, e aborda técnicas e ferramentas típicas para cada caso, tomando como base banco de dados Oracle e plataforma de programação Java.

Quando se disponibiliza buscas para uma quantidade grande e diversificada de usuários, é cada vez mais frequente utilizar um nome como parâmetro de identificação para a busca, ao invés de um código.

Códigos são mais eficientes como critério de busca, porém pressupõem um grupo especializado de usuários que tenha familiaridade com estes códigos. Nome ou descrição textual é mais natural e intuitivo, por isso mais adequado para um público amplo e diversificado.

Contudo, é importante diferenciar os dois tipos de busca possíveis: a consulta e a pesquisa.

Consulta

Na consulta, o pressuposto é que o usuário sabe especificamente o que procura, e deve fornecer uma identificação o mais completa e precisa possível. Nessa situação, o objetivo da busca é ser restritiva de forma a trazer, idealmente, apenas o registro específico desejado.

Quando se trata de uma pessoa, instituição ou outro item que possua nome (ou razão social etc.) que pode ser composto (várias palavras), a identificação precisa textual é o nome completo.

Para busca por um nome completo, as ferramentas de facilidade devem apenas evitar pequenos equívocos e diferenças irrelevantes. Falando especificamente em dados armazenados em tabelas de banco de dados, em geral usa-se uma coluna ou índice de busca em que o nome completo tenha um tratamento de homogenização, como:

  • eliminar acento, cedilha e outros modificadores, convertendo para a letra simples correspondente;
  • converter todas as letras para maiúscula;
  • substituir caracteres especiais (apóstrofo, aspas etc.) por espaço em branco;
  • suprimir espaços em branco no início e no fim e espaços duplicados entre palavras.

Dependendo da situação, outros critérios mais amplos e flexíveis de homogenização podem ser usados, como:

  • eliminação de conectivos ou termos secundários como “de”, “da”, “e”, “Ltda” etc.;
  • conversão de abreviaturas e numerais para extenso como “Cia” para “Companhia”, “Ind” para “Indústria”, “15″ para “quinze” etc.

A regra geral, portanto, de uma consulta por nome completo é fazer uma comparação direta do tipo:
normalizar(nome_fornecido) =? tabela de normalizar(nome_armazenado)

Técnicas ou ferramentas típicas:

1) No banco de dados, é recomendável criar uma função (procedimento armazenado / stored procedure) para realizar as operações de normalização do nome, e disponibilizar para uso geral. Uma função SQL Oracle que pode ser usada para remover acentos é TRANSLATE(), como translate(nome, 'âàãáÁÂÀÃéêÉÊíÍóôõÓÔÕüúÜÚÇç', 'AAAAAAAAEEEEIIOOOOOOUUUUCC'). É importante lembrar que nomes estrangeiros podem ter acentuações não existentes na língua portuguesa, como “ñ”, “ä”, “è” e outros. Para maiúsculas usa-se UPPER(nome), e brancos antes e depois podem ser removidos com TRIM(nome) ou LTRIM(RTRIM(nome)), e no meio com repetidos REPLACE(nome, ‘__’, ‘_’) de 2 brancos por 1, ou no Oracle 10g usando REGEXP_REPLACE(nome, ‘[[:space:]][[:space:]]+’, ‘_’).

2) Igualmente, na linguagem de programação é recomendado criar um método para normalização e torná-lo disponível para as aplicações em uma biblioteca. Em Java e outras linguagens, expressões regulares são excelentes para substituição de acentos, caracteres especiais e espaços em branco repetidos. Veja este exemplo sobre Remover acentuação.

3) Criar uma coluna adicional na tabela, como o nome completo homogenizado, e indexar e utilizar essa coluna no momento da busca, gerando a coluna dinamicamente (via gatilho) na inserção ou atualização do nome.

4) Criar um índice por função (disponível no Oracle 9i em diante) aplicando no índice a função de normalização do nome. Isso dispensa a criação de uma coluna adicional como em (3), delegando isso para o índice.

Pesquisa

Diferente da consulta, o objetivo da pesquisa é maximizar a capacidade de busca. A busca não precisa ser exata (ou quase exata), mas sim permite imprecisões, erros ou falhas.

A pesquisa tipicamente traz uma lista ou conjunto de resultados possíveis, de acordo com os critérios de busca.

O usuário não necessariamente deve conhecer previamente o que especificamente procura, muitas vezes se quer descobrir informação (e não apenas recuperar informação, como no caso da consulta).

No caso de pesquisa por nome, o caso típico é o usuário não ser obrigado a conhecer o nome completo, podendo em geral omitir ou errar partes:

  • omitir uma ou mais palavras (de um nome composto);
  • errar a grafia correta/exata;
  • permitir também expressões com o uso de símbolos “curinga” ou de lacuna/substituição, que demarcam um ou mais caracteres indefinidos ou não conhecidos (? e * em expressões regulares, ou _ e % no Oracle).

Em alguns casos, pode-se ser ainda mais tolerante na combinação de palavras fornecidas, permitindo que a ordem exata de palavras seja alternada ou até retornar resultado em que parte das palavras ou expressões procuradas exista, mas outra parte não.

Técnicas e ferramentas típicas:

1) Combinar o uso das técnicas de homogenização usadas em consulta com o uso de máscaras como _ e % e pesquisa SQL com LIKE. Esta técnica, porém, é bastante ineficiente e limitada, por isso tipicamente inadequada para o uso mais geral.

2) Usar o recurso Oracle Text do banco de dados Oracle (9i em diante), que cria índices complexos e flexíveis de pesquisa ampla em texto (full text search), do tipo árvore de pesquisa, aceita operadores e expressões complexos de
pesquisa no estilo “Google”, e tem mais uma infinidade de recursos (veja referências a seguir).

3) Usar mecanismos de busca fonética e múltiplas combinações de palavras. Nesse sentido, um artigo muito interessante da revista Mundo Java de junho/2010 (edição 41) apresenta esse tipo de técnica e o demonstra utilizando uma biblioteca Java brasileira disponível como software livre (licença GPL), desenvolvida pelo INCOR (Instituto do Coração, SP) utilizando um algoritmo fornecido pela PROCEMPA (Companhia de Processamento de Dados do Município de Porto Alegre, RS) e aperfeiçoada pela empresa P2D.

Os fontes da reportagem estão disponíveis no site da revista em http://www.mundojava.com.br/NovoSite/codigos.shtml: BuscaFonetica.rar.
E a biblioteca GPL aperfeiçoada está disponível na P2D e a original no InCor.

Referências que conheci recentemente sobre segurança da informação e de computadores e redes. Não necessariamente são novas, mas ainda não adicionei ao meu portal de referências Hyperlink. Confira aqui desde já.

Livros

Livros sobre segurança de computadores do pesquisador Matt Bishop.

Publicações especiais sobre segurança em tecnologia, do Instituto de Padrões e Tecnologia (NIST), Administração de Tecnologia do Departamento de Comércio dos EUA. A primeira e mais famosa publicação é o Handbook de introdução a segurança de computadores, mas existem dezenas de outras disponíveis.

Recursos

Java

Para saber mais:

Clojure

Mais uma linguagem para a Java Virtual Machine (JVM): Clojure.

Clojure é uma linguagem de programação predominantemente funcional, e provê um rico conjunto de estruturas de dados imutáveis e persistentes. Clojure é um dialeto da linguagem de programação Lisp, e compartilha com Lisp a filosofia de código-como-dado e um poderoso sistema de macro. Clojure compila diretamente para bytecode da JVM.

Eis uma apresentação segundo o artigo Clojure: Challenge your Java assumptions, por Joshua Fox, 2009-05-12 em JavaWorld.com:

Clojure é uma linguagem funcional dinâmica para a Máquina Virtual Java (JVM), lançada em versão 1.0 em maio de 2009. Clojure oferece um novo conjunto de técnicas de programação visando código robusto e desenvolvimento rápido. Em particular, ela oferece novas soluções para computação multicore. Não importando se você adere a Clojure ou permanece com Java, aprender sobre esta nova linguagem pode desafiar suas assunções sobre a melhor forma de projetar software.

O projeto da linguagem de programação Clojure é software livre sob licença Eclipse Public License (EPL) 1.0. Está hospedado em Google Code e seu desenvolvimento mais recente é mantido em GitHub e Assembla.

Veja também o blog Clojure com novidades sobre esta linguagem de programação.

Ferramentas

Uma boa referência para novidades em ferramentas de desenvolvimento no universo Java é a newsletter do Java Tools Community. Você pode ler o boletim on-line no portal do projeto, ou se inscrever na lista de anúncios para receber por e-mail.

Por falar em ferramentas, Java Power Tools é o nome do livro de John Ferguson Smart, publicado pela O’Reilly Media – ISBN-13: 9780596527938, 910 páginas, abril de 2008.

Em seu blog, Smart divulgou o recente lançamento da segunda Java Power Tools Newsletter, tendo como tópico em discussão os frameworks de teste web que podem ser usados com Java: Selenium, HTMLUnit, WebDriver, JWebUnit.

Java EE 6

Saindo de um blog em java.net para outro, a dica do dia (Tip Of The Day – TOTD) de Arun Gupta de 13 de agosto foi: TOTD #93: Getting Started with Java EE 6 using NetBeans 6.8 M1 & GlassFish v3 – A simple Servlet 3.0 + JPA 2.0 app.

Em oito passos simples, Gupta mostra como é fácil criar um exemplo de aplicação Java EE 6 no NetBeans 6.8 (atualmente em Milestone 1) e GlassFish v3 utilizando as especificações atualizadas Servlet 3.0 e Java Persistence API (JPA) 2.0, da iminente plataforma Java EE 6.

Java REST Frameworks

Saindo do java.net mas ficando nos frameworks web… O incansável Matt Raible, criador do AppFuse e constante avaliador de frameworks Java para web, fala no artigo My Experience with Java REST Frameworks (specifically Jersey and CXF), 2009-08-27 (também em Javalobby), de suas experiências com os frameworks REST.

Para uma introdução sobre REST, recomendo meu artigo REST e a evolução da arquitetura de software, atualizado em 2008-10-18.

Veja também o anúncio The Apache Wink project has released its first version, por Eli Baram 2009-08-28, em TheServerSide.COM, sobre o lançamento do framework de construção RESTful Web services Apache Wink.

Java SE 7

E assim como vem aí o Java EE 6, está a caminho também o Java SE 7.

O artigo Java 7 What’s New, Performance Benchmark – 1.5, 1.6, 1.7, por Taranfx.com, 2009-08-29, traz uma análise do desempenho da nova versão do JDK 7, em comparação com Java SE 5 e 6. Java 7 ficou bem na fita.

E voltando aos blogs do java.net, é também sobre Java 7 o artigo The seven small language changes that will be in JDK7, por Rémi Forax, 2009-08-29, comentando a divulgação de Joe Darcy das sete mudanças aceitas para inclusão no JDK7 no projeto coin-dev.

Últimas

E para fechar o post sobre ferramentas Java, meus últimos achados no assunto:

Top 100 Free Java Books to Download, 2009-08-28.

Crítica do livro DWR Java AJAX Applications, por Manuel Jordan, 2009-08-28, em Javalobby.

Artigo JPA Performance, Don’t Ignore the Database, por Carol McDonald, 2009-08-28.

New Monitoring Capabilities in GlassFish v3, no java.net Editor’s Daily Blog de 2009-08-27.

Implementing composite keys with JPA and Hibernate – The issue of the legacy database schema, artigo por Stephen B. Morris, 2009-08-25, em IBM developerWorks.

GMaps4JSF in the JSF 2.0 Ajax world, por Hazem Saleh, Staff Software Engineer, IBM, 2009-08-25, também em IBM developerWorks.

Já faz quase um mês (27 de julho) que o NetBeans IDE 6.7.1 foi lançado, mas ainda é digno de nota.

De acordo com o Release Notes, a versão 6.7.1 é uma pequena atualização do NetBeans IDE 6.7, acrescentando o seguinte:

  • Suporte a JavaFX 1.2, cujo runtime e ferramentas estão integradas nos bundles de instalação “JavaFX” e “Tudo” do NB67
  • Atualização do GlassFish v3 Prelude para incluir correções do build #28f
  • Incorporação de diversos e importantes correções de bugs votadas pela comunidade, especialmente no Editor Java e em project scanning areas

Além disso, a versão 6.7 já traz:

  • Suporte a Maven para criação de plugins e web-services bem como suporte para POM e J2EE
  • Integração com Kenai permite criar e editar projetos hospedados no Kenai de dentro do IDE
  • Melhorias para PHP incluem suporte a Selenium e completamento de código SQL
  • Suporte a C++ para profiling, biblioteca Qt, refatoração de código e expansão de macros
  • Plug-in de Web API Gateway possibilita o consumo de APIs Web em aplicações
  • Suporte a Java ME para projetos CDC, no bundle Java ME SDK 3.0 (e bundle “Tudo”, claro).

Baixe o NetBeans IDE 6.7.1

O NetBeans IDE 6.8, atualmente em Milestone 1, trará suporte à futura Plataforma Java EE 6, cuja especificação está perto de ser concluída. É o que diz o artigo Java EE 6 in NetBeans IDE 6.8 Milestone 1 , por Petr Jiricka, de 2009-08-07, em Javalobby.

Para saber mais:

A Sun está distribuindo um whitepaper sobre seu produto baseado no GlassFish, servidor código-aberto de aplicações Java EE: o Portfolio Sun GlassFish.

Baixe o PDF: Construa uma Plataforma Web Aberta de Alto Desempenho para sua Empresa com o Portfolio Sun GlassFish™
Documentação da Sun Microsystems, Fevereiro de 2009
(original em inglês)

A única solução de software livre (código aberto) que tem se mantido, em 2006 e 2008, no quadrante líder do relatório do Gartner Quadrante Mágico para Servidores de Aplicação Corporativos é o Red Hat JBoss. A solução da Sun tem se mantido um pouco atrás, no quadrante dos visionários, mas bem próximo de se juntar aos líderes.

O software livre Apache Geronimo está situado em uma posição mais atrás, ainda no quadrante dos players de nicho, embolado com vários outros fornecedores rumando o início do quadrante líder.

O relatório do Gartner terá atualização no terceiro trimestre de 2009. Então, brevemente veremos como estará o posicionamento atual desses servidores, provavelmente já contemplando a fusão dos líderes BEA e Oracle.

Veja a seguir transcrição do resumo e do índice do artigo da Sun.

Resumo

Sun GlassFish whitepaper - capa As atuais empresas de TI líderes de mercado devem construir mais com menos — mas o mercado oferece ferramentas excessivamente caras, muito difíceis de adquirir/usar/manter ou de que ofereçam suporte aos padrões da concorrência. O portfolio Sun GlassFish™ é uma plataforma de aplicativo Web aberta completa que proporciona às empresas as inovações provenientes das principais comunidades de código-fonte aberto, empacotado em uma solução que oferece preços flexíveis baseados em inscrições e suporte empresarial. Proporciona às empresas de todos os portes a extraordinária escalabilidade e segurança necessárias para os aplicativos de missão crítica.

Índice

  1. Resumo executivo
  2. Desafios do mundo atual
    • Inovações da comunidade vs. soluções patenteadas
  3. A solução da Sun
  4. 10 razões principais para usar o portfolio Sun GlassFish
  5. Perspectivas do setor
    • Portfolio Sun GlassFish no governo
    • Portfolio Sun GlassFish nas telecomunicações
    • Portfolio Sun GlassFish na saúde
  6. Conclusão
    • Saiba mais

Sun GlassFish whitepapers e webcasts em inglês:

Em 2006 e 2007, o tema de IDE Java ferveu, mas desde então sucessivas versões dos IDEs NetBeans e Eclipse vêm avançando regularmente.

NetBeans segue com as revolucionárias e bem sucedidas séries de versões 5.x e 6.x que lhe conferiram um salto de evolução e popularidade, Eclipse com a estratégia de lançamentos anuais das “luas de Júpiter” do Eclipse — Calisto, Europa, Ganimedes… — nas versões 3.2 em diante que buscam atualizar e manter o renome deste IDE.

Dia 24 O Eclipse lançou mais uma “lua anual”, a versão 3.5 Galileo. Site oficial de download Eclipse 3.5 aqui. Ian Bull escreveu uma série de artigos (em inglês) muito interessante avaliando os seus dez novos recursos preferidos no Eclipse Galileo: Eclipse Galileo Feature Top 10 List, no seu blog em EclipseSource. Eu estive acompanhando os pacotes do Eclipse até a distribuição Europa (Eclipse 3.3) em junho de 2007.

Hoje, apenas seis dias depois, NetBeans 6.7 tem sua versão final lançada. Site oficial de Download NetBeans 6.7, NetBeans IDE 6.7 New and Noteworthy. Peter Garich destacou em artigo (reprodução Javalobby) impressões como a aparente economia de memória e o recurso de visualização gráfica de dependências Maven (que o Eclipse já possuía).

Por sinal, ambos IDEs são competentes ambientes de desenvolvimento integrados não só para Java, mas para uma diversidade cada vez maior de plataformas e linguagens de programação, incluindo C/C++, PHP, Python, Ruby, Groovy e outras.

Tendências

O serviço Google Trends permite analisar tendências de popularidade de padrões ou termos pesquisados no Google em geral. Embora pouco preciso — termos pesquisados nem sempre inferem precisamente o assunto intencionado, devido à ambiguidade de significados e contextos — esse serviço não deixa de ser uma fonte de indicadores de tendência.

Para reduzir a ambiguidade do termo de pesquisa “eclipse”, que é nome do IDE mas também de um fenômeno astrológico comum, consultei o Google Trends pelos termos Eclipse e NetBeans associados a “ide”. Eis o resultado para “eclipse ide” × “netbeans ide”, de 2004 até hoje:

O gráfico sugere que o Eclipse tende a ser (pelo volume de pesquisas no Google, com as devidas ressalvas de subjetividade!) IDE mais popular, mas o salto evolutivo do NetBeans tem impulsionado sensível crescimento de popularidade deste nos últimos anos, em oposição a uma curva descendente do primeiro.

O assunto Java do momento é a aprovação da especificação JSR 314 para JavaServer Faces 2.0. A votação de aprovação final da JSR 314 foi encerrada dia 26 de maio último, com 12 votos a favor e quatro votos ausentes (Apache, IBM, SAP e Nortel).

JSF 2.0 é uma atualização da especificação de JavaServer Faces, desde a última versão JSF 1.2 aprovada na JSR 127 em maio de 2004. Embora ainda não definido, é provável que JSF 2.0 venha a compor o rol de tecnologias da Plataforma Java EE 6 na especificação guarda-chuva JSR 316.

Desde JSF 1.1, este padrão de desenvolvimento para a camada de apresentação web MVC orientado a componentes e eventos vem se popularizando, ganhando de um lado desenvolvedores adeptos e de outro fornecedores de implementações e componentes cada vez mais robustos, poderosos e bem resolvidos. Vem ganhando terreno em relação a frameworks web independentes como Struts (1 e 2), GWT, Wicket, Tapestry e outros. À medida que amadurece, o JSF tem a seu favor o fato que é o framework web Java padrão integrante da plataforma Java EE.

JSF 2.0 introduz Ajax na especificação, incorporando conceitos de vários frameworks JSF Ajax existentes. Inclui uma biblioteca Javascript para realizar operações Ajax básicas. A biblioteca ajuda a definir uma forma padrão de enviar requisições Ajax e de processar a resposta, reduzindo problemas de compatibilidade entre componentes de fornecedores diversos. Veja por exemplo ICEFaces 2.0 And JSF 2.0 Together, por Roger Kitain, 2009-05-28, em Javalobby.

Não estou tendo tempo para acompanhar de perto as novidades, mas tem muita gente boa fazendo isso e cujos blogs merecem ser consultados. Em especial:

O que você sabe ou opina a respeito do JSF 2.0? Conte para nós.

Nota: Por falar em atualização de especificação padrão, acompanhe também Java Persistence 2.0 Proposed Final Draft (artigo por Celso Martins em 2009-05-27), para o mecanismo padrão de persistência JPA.

Atualizei meu artigo de coletânea de Informações úteis sobre a cabeçalhos HTTP e tipos MIME, no tópico sobre redirecionamento.

Acrescentei uma seção citando a diferença entre o Forward (encaminhamento) de Java e o mecanismo de Redirect (redirecionamento) HTTP. Além disso, fiz duas figuras que, creio, ilustram bem Redirect e Forward e evidenciam as diferenças entre os dois mecanismos.

Nas referências do tópico, há o artigo em português de Rafael Ponte e o tópico em Java Practices, com mais informações a respeito do tema.

Próxima Página »