Java SE 6 Primeiras Impressões: Um Vencedor para o Desktop

Um desenvolvedor Java experiente faz um teste no Java Standard Edition 6 beta, e declara que o mesmo tem o potencial para revolucionar aplicações desktop.
                                                                                                                              Eric Bruno
 

 

Liberada recentemente, a Java Standard Edition 6 (Java SE 6, a.k.a. Mustang) beta é completa em características e estável o bastante para a avaliação popular. Descarregamos e testamos a liberação na primeira semana de avaliação e ficamos impressionados, particularmente, com as novas características de desktop. Além de atender à nova convenção de nomenclaturas para todas as plataformas Java (os "2" foram eliminados), foi melhorada com muitas novas características as quais vale a pena explorar. As melhorias podem ser divididas em duas categorias: desktop e core.

 

As melhorias de desktop focalizam principalmente o desempenho da interface do usuário (UI) e a integração nativa do SO do desktop. As melhorias do core focalizam principalmente a melhoria de produtividade para o desenvolvedor e o gerenciamento de aplicações Java. O time Mustang da Sun, também dedicou um esforço significativo nas melhorias ao suporte a Web service e de segurança.

 

De mais a mais, para os desenvolvedores de aplicações, administradores de sistemas, vendedores de ferramentas ou peritos em segurança, o Java SE 6 tem alguma coisa a oferecer. Este artigo apresenta em algum detalhe, algumas das novas características interessantes que utilizamos.

 

Características Core e Melhorias

O core do Java pode ser descrito como aquelas partes do Java (a linguagem e suas ferramentas) que são fundamentais para todos os outros aspectos do Java, desde as APIs da interface do usuário até as bibliotecas do servidor. Descreveremos as melhorias do core Java do Java SE 6, divididas por categorias.

 

Produtividade para o Desenvolvedor

A nova Java Compiler API, permite compilar códigos fonte Java de dentro de uma aplicação Java. Durante a compilação, a aplicação tem acesso às informações de dependência de bibliotecas tal como formuladas, junto com qualquer advertência, erros e outras mensagens geradas. Embora esta característica a princípio não parecesse algo que usaríamos com freqüência, logo achamos novos usos para a mesma. Por exemplo, a usamos para construir rapidamente a camada de acesso a dados para uma aplicação que estávamos desenvolvendo. O código que escrevemos, gerou e compilou as classes utilizadas para acessar as tabelas de banco de dados da aplicação. O resultado final foi um arquivo JAR que foi gerado, construído e desdobrado como parte dos scripts Ant do sistema. O fato de que as classes são compiladas de dentro da aplicação, torna interativa a geração do código - podemos modificar e construir as classes iterativamente.

Para habilitar o Java scripting, o Java SE 6 suporta o JSR 223, um framework de scripting que fornece acesso de linguagem de criação de scripts aos Java internals. Podemos localizar máquinas de scripting e invocá-las para rodar scripts em tempo de execução. A Scripting API provê suporte Java via a linguagem de criação de scripts de nossa escolha. Além disto, o Web Scripting Framework permite que o código script gere o conteúdo Web dentro de qualquer container Servlet.

Para depuração, o Java Platform Debugger (JPDA) foi incrementado para detectar deadlocks e gerar rastreamento de pilha para objetos monitor que estejam travados. Além disto, o Java SE 6 adiciona suporte para permitir aos agentes se vincular a um JVM que estiver rodando, para a obtenção de diagnósticos.

 

Gerenciamento de aplicações

O Java SE 6 otimiza a análise e detecção de vazamento de memória, incluindo um rastreamento de pilha completo para a exceção Java.lang.OutOfMemory, gerando um log de erro fatal, quando o heap estiver cheio. Além disto, uma opção nova do JVM, permite rodar um script quando a pilha estiver cheia.

Melhorias na JMX Monitoring API, permitem que uma aplicação envie eventos quando valores de atributos MBean (incluindo aqueles dentro de tipos complexos) passarem especificações limiares (thresholds).

Para usuários do Solaris 10, a Hotspot JVM do Solaris, fornece hooks para que o utilitário de depuração de sistema DTrace do Solaris, possa localizar e exibir atividades JVM internas, tal como coleta de lixo (garbage collection), carregamento de classes, linhas (threads), travamentos (locks) e outros. Tivemos em primeira-mão, uma demonstração desta característica no JavaOne, e ficamos muito impressionados pela profundidade de depuração do sistema que o DTrace provê. Quando uma aplicação roda, o DTrace permite parar o código em qualquer lugar, visualizar todas as bibliotecas carregadas (não só as bibliotecas do Java, mas todas as bibliotecas do sistema) e entrar no kernel do Solaris – por dentro do hardware. O novo suporte do Java para esta ferramenta surpreendente, torna disponível um mundo de depuração de sistemas. Podemos recordar as vezes no passado, em que recebemos erros Solaris Signal-8 no JVM; esta característica nos teria economizado muita adivinhação.

 

Serviços Web

O Java SE 6 inclui algumas APIs para suportar serviços Web. A XML Digital Signatures API, torna seguros os Web services baseados em Java via execução de operações de criptografia em dados XML. O Java-XML Web Service (JAX-WS) 2.0 API, atualiza a biblioteca antigamente chamada JAX-RPC. Melhorias no Java-XML Binding (JAXB) 2.0 incluem suporte ao schema XML e class binding para schema. Por fim, o Streaming API for XML (STaX), fornece uma API bidirecional para ler e escrever XML via um stream de eventos, inclusive a habilidade para pular seções, e está centrada em subseções de documentos.

 

Segurança

As características de segurança do Java SE 6, oferecem integração ao GSS/Kerberos, Java Authentication and Authorization Service (JAAS) para autenticação de LDAP e um framework de solicitação de certificado de segurança que permite as aplicações Java, requerer certificados seguros em vários protocolos.

 

Características de Desktop e Melhoramentos

Por muito tempo, o Java foi considerada um idioma excelente para software baseado em servidor, porém de segunda categoria para aplicações desktop GUI. O time Java de desktop na Sun tem trabalhado para mudar esta percepção, integrando mais o Java com o sistema anfitrião no qual estiver rodando. O resultado não é só o melhoramento de desempenho da GUI no Java SE 6, porém também as melhorias no comportamento das aplicações GUI Java.

 

Muitas das novas características de desktop no Java SE 6, estão baseadas no projeto JDesktop Integration Components (JDIC). O projeto JDIC permite às aplicações Java acesso a características disponíveis no desktop do Sistema Operacional nativo, tais como o browser, o editor de e-mail, associações de tipo de arquivo, a bandeja do sistema (system tray), iniciação de aplicações e impressão. A seguir, algumas das mais importantes melhorias de desktop no Java SE 6:

 

·         Suporte a splash screen — telas splash informam ao usuário que uma aplicação está carregando enquanto espera. O Java SE 6, adiciona suporte a telas de splash que podem ser exibidas mesmo antes do começo da JVM.

·         Melhoramentos na Java Foundation Classes (JFC) e Swing:

·         O Java SE 6 influencia a Windows APIs no melhoramento do desempenho e garante a aparência Windows em versões atuais e futuras do mesmo.

·         Melhora a administração de layout para incluir os gerentes de layout personalizáveis e inclui outros melhoramentos para simplificar o layout de componentes GUI.

·         Melhora considerável no arrastar e soltar Swing, tornando-o personalizável.

·         O true double-buffering fornece transições gráficas rápidas e suaves.

·         Suporte ao System Tray — duas novas classes: SystemTray e TrayIcon, no pacote do Java.awt, permitem adicionar ícones, tool tips e menus instantâneos ao Windows ou à bandeja de sistema do Linux Gnome. A bandeja de sistema é a área de desktop compartilhada por todas as aplicações, normalmente localizado no canto de inferior direito. Ações e eventos permitem às aplicações Java detectar cliques do mouse nos itens da bandeja e responder aos mesmos. Achamos esta característica muito útil para nossas aplicações servidor. Por exemplo, utilizada com a API do desktop (ver abaixo), acrescentamos um ícone à bandeja do sistema para iniciar facilmente um browser para a página HTML administrativa da aplicação. Independentemente do SO (Linux ou Windows), não é mais preciso lembrar a porta administrativa da aplicação ou a URL — simplesmente clicamos no ícone e a página aparece.

·         Suporte de impressão melhorado para o JTable

·         Melhoramentos no Java 2D — foram implementados melhoramentos na qualidade da exibição de texto, especialmente em monitores LCD. A Integração com as configurações de anti-aliasing de fonte de desktop do anfitrião garante a apresentação consistente de texto.

·         A nova java.awt.Desktop API — o novo pacote Java SE 6 de desktop transforma em “cidadãos de primeira classe" as aplicações UI Java. Com este pacote, as aplicações Java podem iniciar o browser e o cliente de e-mail padrão e integrá-lo com aplicações desktop comuns (tais como OpenOffice), para abrir, editar e imprimir arquivos de tipos específicos. O pacote de desktop oferece esta habilidade via eventos de ação (Desktop.Action) que podem ser integrados às aplicações.

·         Internacionalização — o Java SE 6 suporta "plugability" para algumas características locais específicas, tal como formatação de data, normalização de texto Unicode e pacotes de recursos.

 

Uma Revolução de Desktop Java

O Java SE 6 fornece tantos acréscimos de características individuais, melhorias e consertos de bugs, que nem todos podem ser relacionados aqui. Este artigo fornece um “mapa da estrada” para esta importante nova liberação do Java que está prestes a chegar. As melhorias abordam tantos aspectos da standard edition do Java, que todos o stakeholders serão afetados, inclusive aqueles mais íntimos com o Java Enterprise Edition.

 

O Java SE 6 tem potencial para ser revolucionário para o desktop como o Java 2 o foi para o servidor. É bom estar preparado para esta tempestade para tirar proveito das recompensas potenciais disponíveis para aqueles que as adotem antes.