Atualização no plano de releases e suporte do Java

A Oracle está, desde setembro de 2017, realinhando a cadência de lançamentos (releases) e versões do Java SE JDK e das condições de suporte ao produto, em uma transição do Java SE versão 8 até a versão 11.

Na prática, quanto à cadência, os lançamentos de novas funcionalidades (feature releases) serão previstos a cada 6 meses (abril e outubro), com mudança da numeração principal. Essa cadência mais ágil de lançamentos e numeração se alinha a filosofias como DevOps e já é adotada por muitos produtos, como os navegadores Chrome e Mozilla Firefox por exemplo.

E o suporte ao produto terá uma distinção maior entre clientes comerciais (em geral, em ambiente empresarial) — centrados no produto Oracle JDK — e usuários gratuitos (inclusive desenvolvedores individuais) — direcionados ao software livre OpenJDK ou através da distribuição de Java licenciado em produtos de terceiros. Clientes comerciais terão um suporte mais sólido, incluindo lançamentos LTS (long term support) a partir da versão 11, com suporte comercial de longo prazo (pelo menos 8 anos) para aqueles que precisam de versões mais estáveis e duradouras.

Para saber mais:

Ask Toolbar no Java é um absurdo

[Atualizado em 18 de dezembro de 2014.]

Desde a versão 6 do Java, a Oracle começou a oferecer a instalação do software Ask de buscas patrocinadas na internet (ou seja, um adware), durante a instalação do runtime Java. E essa “oferta” insistente e vergonhosa aparece não só na instalação inicial do Java, mas em toda atualização on-line.

A página de ajuda (FAQ) do Java na Internet apenas define vagamente o seguinte:

“A Ask Toolbar é um add-on de browser gratuito que permite fazer pesquisa na Web usando o mecanismo de pesquisa Ask.com diretamente do browser.”

As ferramentas oferecidas para instalação junto com o Java são a Ask Toolbar, uma barra de ferramentas instalada como extensão nos navegadores internet, e a alteração da configuração dos navegadores instalados para que o mecanismo de busca padrão seja da Ask.com. Obviamente são buscas patrocinadas, ou sejam, que levam a resultados muitíssimo piores que os da busca do Google ou mesmo do Bing, e infestados de resultados patrocinados, onde o que mais interessa é gerar rendimento para a Ask, e não apresentar ao usuário resultados relevantes. Ou seja, o tipo de software — em geral indesejado — que é conhecido como adware.

Será realmente que um dos principais mecanismos de runtime de aplicações ricas na Internet como o Java, e uma hiper-mega-corporação global como a Oracle precisem de dinheiro extra pela revenda de patrocínio através da Ask para sustentar a distribuição e disseminação do Java? Será que realmente vale a pena associar o nome de uma empresa sólida como a Oracle e uma plataforma séria e tradicional (desde 1995!) como o Java, a um questionável adware??? Sinceramente, acredito que não!

Existe até uma petição pública (abaixo-assinado) na Internet para que a Oracle pare de distribuir o Ask na instalação do Java: Oracle Corporation: Stop bundling Ask Toolbar with the Java installer.

É fácil evitar a instalação do Ask, bastando desmarcar a opção na tela própria do assistente de instalação do Java as opções que vem marcadas por padrão:

Oferta para instalar o complemento de navegador da Ask

Mas como a maioria dos usuários não presta atenção e às vezes até não entende bem as opções, e simplesmente vai clicando “Avançar” até a conclusão da instalação, muitos acabam tendo instalada a extensão da Ask. Depois podem se assustar quando tentam fazer uma pesquisa na Internet e veem a página de resultados da Ask, sem nem se lembrarem de como isso foi parar ali!

Mesmo depois de instaladas as extensões da Ask, há opção de desinstalar o software pelo Painel de Controle do Windows, mas mais uma vez muitos usuários mais leigos ou desavisados sequer sabem disso ou procuram essa opção.

Lendo uma atualização de 12/12/2014 no site do abaixo-assinado contra o Ask ToolBar, descobri que a partir do Java 7 Update 65 (7u65) e Java 8 Update 11 (8u11) a Oracle passou a disponibilizar, no Painel de Controle Java, guia Avançado, opção que pode ser marcada para Suprimir ofertas de patrocinadores ao atualizar o Java.

Painel de Controle Java, guia Avançado, opção Suprimir ofertas do patrocinador ao instalar ou atualizar o Java.

O FAQ (Respostas a Perguntas Frequentes) da Oracle sobre “Como eu instalo o Java sem ofertas de terceiro patrocinador” ainda apresenta outra alternativa, mais técnica, para evitar a instalação de software patrocinado na instalação é executar o instalador pela linha de comando (Prompt/Console, cmd, ou Iniciar > Executar) acrescentando o parâmetro SPONSORS=0. Segundo o artigo, esta opção já existia antes do Java 7u65 e 8u11, mas não deixa claro desde quando.

Uma entrada no fórum SuperUser, How can I prevent Ask.com Toolbar from being installed every time Java is updated?, ensina que há um jeito de se adicionar entradas no registro do Windows que desabilitam em definitivo as ofertas de patrocinadores durante a instalação de Java: desativa_patrocinio_java.reg

Também quando se baixa a versão off-line do instalador do Java Runtime (JRE), disponível em Java.com e em Oracle TechNet (encontrado a partir da página inicial Java SE Downloads), a oferta de instalação da ferramenta patrocinada Ask não aparece.

Mas, mais uma vez, a maior parte dos usuários comuns não sabe disso e nunca chegará a estas alterativas, infelizmente!

No artigo Soluto’s data raises questions about how Oracle manages Java do blog da empresa Soluto, de soluções para suporte remoto para PCs e iOS, o instalador do Java é responsável por cerca de 40% das instalações indesejadas da Ask Toolbar em seus clientes. Além disso, pelo menos 60% dos clientes da Soluto que tiveram o Ask instalado providenciaram a desinstalação, mostrando o quanto a ferramenta é indesejada. E a empresa acredita que a maior parte dos que ainda não desinstalaram a Ask Toolbar têm a intenção de fazê-lo.

Se você é usuário do Java, recomendo evitar a instalação da Ask Toolbar ou desinstalar se você também acha um software indesejado. Se você é um representante da Oracle, por favor leve nosso protesto a quem de direito para retirar esse maldito e vergonhoso patrocínio de uma vez por todas!

Para saber mais:

Oracle Java e open source – entrevista com especialista Fernando Galdino

Através de contato com a Assessoria de Imprensa da Oracle Brasil, obtive entrevista exclusiva com Fernando Galdino, especialista em Soluções da Oracle do Brasil, sobre os produtos, estratégias e perspectivas da Oracle relacionados à tecnologia Java e aos principais produtos comerciais e projetos open source de ambiente de desenvolvimento integrado (IDE) e servidores de aplicação Java liderados pela Oracle.

De acordo com a entrevista, a Oracle sinaliza firme intenção em continuar mantendo o investimento e apoio aos projetos de software livre como os IDEs NetBeans e Eclipse e servidor de aplicação Java Glassfish, enquanto avança também com sua linha de produtos e soluções comerciais Java.

Nas estratégias de sinergia entre produtos, a dupla de software livres NetBeans e Glassfish caminha bem alinhada, ambos suportando em primeira mão as mais novas especificações das plataformas Java SE, EE e ME. O Glassfish é, inclusive, a Implementação de Referência (R.I.) da plataforma Java EE.

Já o IDE Oracle JDeveloper está estrategicamente alinhado para suportar e se integrar com produtos e tecnologias comerciais da Oracle e parceiros, em especial a família de produtos Fusion Middleware, o servidor WebLogic, o Oracle Application Development Framework (ADF) e o banco de dados Oracle Database Server.

Mas há estratégias da Oracle para promover alinhamento do suporte de produtos entre as linhas open source e comercial. Assim, a Oracle mantém iniciativas de suporte e integração ao WebLogic no NetBeans e no Eclipse, bem como suporte ao Glassfish no JDeveloper.

Passados mais de dois anos desde que a Oracle comprou a Sun, e com isso incorporou ao seu portfólio de soluções Java os projetos de software livre NetBeans e Glassfish anteriormente liderados pela Sun, as estratégias de continuidade e integração da Oracle vem se tornando mais claras e consistentes e, com isso, diluindo as dúvidas e incertezas da comunidade de desenvolvedores Java.

Veja a íntegra da entrevista concedida por Fernando Galdino a seguir.

1. Quais são as frentes atuais da Oracle sobre integração e aproximação entre o GlassFish e o Oracle WebLogic Server? Permanece a diretriz de ter uma Plataforma de Servidor Comum no GlassFish 4, que compartilhe conceitos e tecnologias com o WebLogic Server? Quais aspectos específicos de integração tem sido foco de atenção da Oracle?

Galdino: O Glassfish tem recebido especial atenção por parte da Oracle e a integração com outros produtos continua cada vez mais forte. Como exemplos, temos o ActiveCache, a integração com Oracle Access Manager, extensão da console de monitoramento e recursos para clusterização e alta disponibilidade.

Em relação aos esforços de integração entre Glassfish e Weblogic encontram-se a uniformização de APIs e de sua implementação; Integração com JRockit (Máquina virtual Java de alto desempenho) e Coherence (grid de dados em memória). Com isso, ambas as ferramentas (Weblogic e Glassfish) tendem a se valer de um mesmo núcleo comum. Com o Glassfish 4 pretende-se compatibilidade com Java EE 7 e melhor suporte a virtualização. Lembrando que o release final da especificação Java EE 7 deve sair em Q3 de 2012, conforme indicado em http://jcp.org/en/jsr/detail?id=342.

2. A IBM encampou o projeto de software livre do servidor de aplicação Apache Geronimo e o oferece como uma espécie de versão gratuita de entrada, Community Edition, para a família de produtos do IBM WebSphere Application Server. Qual a estratégia da Oracle na orientação de seus clientes iniciantes quanto à escolha entre GlassFish ou WebLogic Server?

Galdino: O Glassfish é o melhor servidor de aplicações open source com suporte da Oracle e é também a implementação de referência para Java EE. Possui integração com outros componentes do Oracle Fusion Middleware. Ele pode ser utilizado para aplicações mais leves ou que queiram utilizar as novas versões da especificação, que serão inicialmente disponibilizadas nesta ferramenta antes do Weblogic.

O Weblogic é um produto que oferece uma série de benefícios em termos de gestão, escalabilidade e performance. Ele é também o servidor de aplicações base para o Fusion Middleware e também para os aplicativos Fusion. Além disso, ele também é a base das soluções de hardware e software do Exalogic, que é uma solução da Oracle para atender a infraestrutura de computação em nuvem requerida pelas aplicações atuais.

3. O WebLogic Server 11g (10.3.x) é formalmente compatível com Java EE 5, mas incorpora suporte a algumas APIs da plataforma Java EE 6. Há planos definidos para quando o WebLogic Server deve ser totalmente compatível com Java EE 6, como já é o GlassFish v3?

O suporte a Java EE 6 no Weblogic encontra-se em desenvolvimento.

Em relação ao IDE de Desenvolvimento Java, com a aquisição da Sun, a Oracle também incorporou o projeto de software livre do ambiente integrado de desenvolvimento (IDE) NetBeans, que vem agregar o portfólio de ferramentas de desenvolvimento Java da Oracle, compostas basicamente do Oracle JDeveloper e do Oracle Application Development Framework (ADF).

A Oracle também tem apoiado o projeto de software livre do IDE Eclipse. Enquanto NetBeans e Eclipse têm se popularizado como plataformas abertas e extensíveis de IDE com suporte a Java, C/C++ e outras tecnologias de desenvolvimento de aplicações, o JDeveloper teve origem no motor do JBuilder, fruto de acordo com a antiga Borland e desde então vem sendo desenvolvido pela Oracle, que tem provido suporte e integração a tecnologias e produtos Oracle, como ADF, Oracle Database Server, Oracle WebLogic e Fusion Middleware.

4. Oracle JDeveloper, NetBeans e Eclipse. Quais são as estratégias, visões e planos da Oracle em relação ao suporte a estas três plataformas de desenvolvimento de aplicações?

Galdino: A Oracle continuará investindo no ambiente Eclipse por meio do Oracle Enterprise Pack for Eclipse. Trata-se de uma plataforma de desenvolvimento amplamente utilizada pelos desenvolvedores que, inclusive, teve adicionados recursos como Toplink e ADF. O foco do OEPE está em integrar ferramentas Oracle com o ambiente Eclipse, suportar a plataforma Weblogic e focar em facilidades para o desenvolvimento em ambiente Java Enterprise Edition.

O Netbeans é uma ferramenta estratégica para a incorporação e utilização das mais recentes funcionalidades adicionadas para as plataformas Java SE, EE e ME. A ferramenta continuará a ser desenvolvida e aprimorada e será a primeira a introduzir as mais recentes atualizações para a linguagem Java. É uma plataforma focada na comunidade e podemos dizer que é uma implementação de referência para ferramentas Java.

O JDeveloper é um componente fundamental para todo o conjunto de aplicativos (Oracle ou não) baseado no Fusion Middleware. Interessante que foi relembrado que o JDeveloper foi baseado no JBuilder. Desde 2001, porém, não há mais nenhum código da antiga Borland na ferramenta. E, ao longo do tempo, diversas funcionalidades foram sendo acrescentadas à ferramenta para o desenvolvimento Java. Hoje é uma ferramenta essencial para o desenvolvimento, utilizando-se das ferramentas Fusion Middleware. Isso inclui o desenvolvimento de ponta-a-ponta para projetos Webcenter e SOA e BPM com foco em um ambiente declarativo, visual e de alta produtividade.

5. Como está sendo vista e trabalhada a integração, interoperabilidade e sinergia entre Oracle JDeveloper e NetBeans? Há planos para uma plataforma base comum no futuro?

Galdino: Netbeans é um projeto open source e os planos são de que continue sendo uma ferramenta sendo desenvolvida pela comunidade e que receba as novidades da linguagem o mais rápido possível. O JDeveloper é um ambiente de alta produtividade para o ambiente Fusion Middleware como um todo.

Os principais pontos de sinergia e interoperabilidade residem nos servidores de aplicação Weblogic e Glassfish e na utilização do Coherence. Pontos esses que estão sendo tratados. Por exemplo, fazer com que os deployment descriptors do Weblogic sejam reconhecidos pelo Glassfish e vice-versa. Hoje, os planos são de que cada ferramenta continue caminhando independentemente da outra, porém tendo em mente a interoperabilidade entre componentes do Fusion Middleware.

6. Quais são as iniciativas atuais e planos futuros para maior integração e suporte a tecnologias e produtos Oracle no NetBeans?

Galdino: A próxima versão do NetBeans ainda encontra-se em uma fase de planejamento. Logo, ainda é um tanto incerto falar em torno de iniciativas e planos futuros, já que elas ainda não se materializaram em termos de ações ou projetos. Essas iniciativas serão analisadas com cuidado, sempre tendo em mente a ideia de ter o NetBeans como uma ferramenta com as mais recentes atualizações da linguagem Java e uma plataforma focada na comunidade de desenvolvedores.

7. Recentemente a Oracle lançou o JDeveloper 11g Release 2, com suporte a JavaServer Faces 2.0 (JSF 2), tecnologia para aplicações web integrante da plataforma Java EE 6. Como está caminhando o pleno suporte às APIs do Java EE 6 no JDeveloper?

Galdino: Hoje, a Oracle possui o Glassfish como o servidor de aplicações compatível com a plataforma Java EE 6. Temos também o Weblogic, componente essencial de toda a arquitetura de produtos Oracle para middleware e aplicativos. O Weblogic é compatível com a versão Java EE 5. A compatibilidade com a especificação Java EE 6 está planejada para as próximas versões. E o JDeveloper, como principal IDE para o Oracle Fusion Middleware, precisa estar equacionado em relação a como atender esses dois lados do desenvolvimento. O lançamento do JDeveloper 11gR2 já permite trabalharmos com alguns desses recursos.

8. A Oracle já doou vários produtos e participou de iniciativas relacionadas ao projeto de software livre Eclipse e à Eclipse Foundation. Podemos destacar a doação do TopLink Essentials — versão open source do Oracle TopLink — que se tornou EclipseLink e implementação de referência de Java Persistence API (JPA); a doação do projeto de software livre Hudson Continuous Integration para a Eclipse Foundation; e a proposição em conjunto com a SpringSource do projeto Gemini baseado nos padrões OSGi. O projeto Eclipse porém, envolve a participação de empresas que tem pontos de concorrência no mercado com a Oracle, como IBM, RedHat e VMWare/SpringSource. Qual o posicionamento, visão e planos atuais da Oracle em relação ao projeto Eclipse?

Galdino: A Oracle continuará participando ativamente do projeto Eclipse. Consideramos que esse projeto é bastante importante para toda uma comunidade de desenvolvedores que utiliza o Eclipse como ambiente de desenvolvimento no dia-a-dia. Como comentado anteriormente, ao falarmos sobre as três IDEs de desenvolvimento, o Eclipse recebe uma atenção especial por parte da Oracle. No último release do OEPE – Oracle Enterprise Pack for Eclipse a Oracle – inclusive adicionou uma maior integração com a stack de produtos Fusion Middleware. Como exemplos, nós temos os recursos para facilitar a criação de scripts WLST utilizados pelo Weblogic e o suporte ao Coherence, um grid de dados em memória para melhorar a utilização de memória, bem como auxiliar na escalabilidade dos aplicativos.

A própria doação do Hudson para a Fundação Eclipse, como colocada na pergunta, já demonstra todo um compromisso que a Oracle possui com esse projeto e que continuará tendo com o lançamento de novos recursos nas próximas versões.


Agradeço à Clezia Gomes, Relações Públicas responsável pelo contato com a Assessoria de Imprensa da Oracle Brasil, que intermediou essa entrevista, e ao Fernando Galdino (@LinkedIn, @SlideShare), especialista da Oracle Brasil que concedeu a entrevista.

Oracle anuncia disponibilidade do Java SE 7

Fonte: Oracle Press Release, Redwood Shores, Califórnia – 15 de agosto de 2011.

A Oracle anunciou a disponibilidade do Java Platform, Standard Edition 7 (Java SE 7), a primeira versão da plataforma Java sob administração da Oracle.

A versão Java SE 7 é o resultado do desenvolvimento que envolveu revisão aberta, compilações semanais e extensa colaboração entre engenheiros da Oracle e membros do ecossistema Java em todo o mundo por meio da comunidade OpenJDK e do Java Community Process (JCP).

O Java SE 7 oferece:

  • Mudanças na linguagem para ajudar a aumentar a produtividade dos desenvolvedores e simplificar as tarefas comuns de programação, reduzindo o volume de código necessário, esclarecendo a sintaxe e facilitando a leitura do código. (JSR 334: Project Coin)
  • Suporte aprimorado para linguagens dinâmicas (como, Ruby, Python e JavaScript), resultando em melhoria substancial no desempenho do JVM. (JSR 292: InvokeDynamic)
  • A nova API multicore-ready oferece aos desenvolvedores maior facilidade para detalhar falhas em tarefas que podem ser executadas em paralelo por números arbitrários de núcleos do processador. (JSR 166: Fork/Join Framework)
  • A interface de I/O (entrada/saída) completa para trabalhar com sistemas de arquivos permite acesso a uma ampla variedade de atributos de arquivos e oferece mais informações quando ocorrem erros. (JSR 203: NIO.2)
  • Novos recursos de rede (suporte a Transport Layer Security – TLS 1.2, pilha Windows Vista IPv6, Sockets Direct Protocol – SDP para stream de rede com conexões Infiniband em Solaris e Linux, Stream Control Transmission Protocol – SCTP em Solaris) e segurança (algortismos de criptografia curva-elíptica – ECC).
  • Suporte ampliado a internacionalização com Unicode 6.0 e Locale com suporte a IETF BCP 47 (Tags for Identifying Languages) e UTR 35 (Local Data Markup Language).
  • Versões atualizadas de várias bibliotecas (JDBC 4.1 e Rowset 1.1, pilha XML com JAXP 1.4, JAXB 2.2a, JAX-WS 2.2).
  • Melhorias para cliente desktop (pipeline gráfico Java2D baseado na extensão X11 XRender, Nimbus look-and-feel e componente JLayer para Swing, substituição do velho sintetizador de som pelo Gervill criado pelo Audio Synthesis Engine Project).

A compatibilidade do Java SE 7 com versões anteriores da plataforma preserva os conjuntos de habilidades dos atuais desenvolvedores de software em Java e protege os investimentos nesta tecnologia.

Os desenvolvedores interessados podem usar imediatamente o Java SE 7 e aproveitar o NetBeans IDE 7.0, o Eclipse Indigo com o plug-in Java SE 7 adicional ou o IntelliJ IDEA 10.5, compatível com os mais novos recursos da plataforma Java SE 7. O lançamento do suporte do Oracle JDeveloper para o JDK 7 está programado para acontecer ainda este ano.

Exemplos de nova sintaxe introduzida pelo Project Coin

Tipo String permitido em cada case da cláusula switch:

[sourcecode lang=”java” highlight=”3,5″]
switch(diaDaSemana)
{
case "segunda": msg = "Mais uma semana de trabalho"; break;
….
case "sábado": msg = "O fim de semana chegou"; break;
}
[/sourcecode]

Multicatch – várias exceções capturadas em um só catch:

[sourcecode lang=”java” highlight=”4″]
try {
String fileText = getFile(nomeArq);
//…
} catch (FileNotFoundException | ParseException | FileLockInterruptionException e) {
System.err.println("Erro ao abrir arquivo");
} catch (IOException iox) {
System.err.println("Erro ao processar arquivo");
}
[/sourcecode]

Sintaxe diamante simplificada:

De
[sourcecode lang=”java”]
Map<Filme, Trilha> m = new HashMap<Filme, Trilha>();
[/sourcecode]

Para
[sourcecode lang=”java”]
Map<Filme, Trilha> m = new HashMap<>();
[/sourcecode]

Estas foram algumas novidades na sintaxe, exemplificadas aqui. Existem outras.

Fatos e Números de Java

  • 97% dos desktops empresariais executam Java;
  • São feitos 1 bilhão de downloads de Java por ano;
  • Há nove milhões de desenvolvedores em todo o mundo;
  • É a linguagem de programação número um do setor (segundo TIOBE Programming Community Index);
  • Mais de três bilhões de dispositivos funcionam sob a tecnologia Java.

Para saber mais

Universo de desenvolvimento Google

Recentemente recebi divulgação do novo ambiente de desenvolvimento MyEclipse G, uma lançamento da Genuitec (produtora do MyEclipse) e Skyway Software que reúne ferramentas de desenvolvimento essenciais para as plataformas, frameworks e serviços de aplicações da Google.

MyEclipse G - Recursos

Fonte: MyEclipse G.

Observando a descrição do produto, pude refletir sobre a imensidão da abrangência de tecnologias que o Google tem disponibilizado, em pelo menos três grandes frentes:

  • Desenvolvimento de aplicações web: Frameworks como o Google Web Toolkit (GWT) (a home-page em português parece desatualizada, falando do GWT 1.7, enquanto a em inglês já destaca o GWT 2.3 mais recente) e Google Guice. O projeto GWT, além de ampla documentação, oferece para download: GWT SDK, com as bibliotecas essenciais e compilador que você precisa para escrever aplicações web; o Google Plugin for Eclipse que inclui no IDE Eclipse suporte para projetos GWT e GAE, além de uma versão simplificada do GWT Designer; Speed Tracer, uma extensão para o navegador Google Chrome que permite pontuar problemas de desempenho em aplicações web; e o GWT Designer standalone (full), um ambiente de desenho de Java GUI poderoso e bidirecional para criação visual de interfaces de usuário, assisência de layout e geração automática de código GWT.
     
  • Infraestrutura para execução de aplicações web: Google App Engine (GAE) permite que você execute seus aplicativos da web na infraestrutura do Google.
     
  • Plataforma para dispositivos móveis: Android: camada de software para celulares e tablets que inclui um sistema operacional, middleware e aplicações. O Android SDK, disponível no portal Android Developers, provê ferramentas e APIs necessárias para se iniciar o desenvolvimento de aplicações para a plataforma Android usando a linguagem de programação Java. Há também o Android Development Tools (ADT) Plugin for Eclipse IDE. As muitas milhares de aplicações disponíveis para Android, boa parte delas gratuitas, ficam disponíveis no Android Market (assim como o iPhone tem o Apple Store).

Isso fora o navegador web Google Chrome (dica: para obter o instaldor offline standalone, acrescente o parâmetro &standalone=1 na página de download) e o sistema operacional Google Chrome OS, baseado no sistema operacional Linux e totalmente voltado para Internet (Já ouviu falar no Chromebook?). Ambos são desenvolvidos através do projeto de software livre Chromium.

Todas as ferramentas oferecem ampla documentação. O Google ainda aproveita seus canais de mídia para divulgar informação, como os blogs no Blogger — GWT blog, GAE blog, Google Mobile blog, Official Google Blog, blog oficial Google Brasil — e o canal Google Developers de vídeos no Youtube. E ainda realiza o grande evento anual Google I/O.

Mesmo com a Microsoft tendo comprando a Skype em seu maior acordo de aquisição, por US$ 8,5 bi em maio último, estou achando que agora é a vez da Google “dominar o mundo” do software na era da Internet.

InvokerServlet no Tomcat 6

Fiz uma importante atualização do meu artigo Tutorial Tomcat – Instalação e Configuração Básica, um dos mais longevos e populares do meu site, introduzindo o atributo de contexto privilegiado para que a InvokerServlet possa ser utilizada no Tomcat 6.

Desde a revisão 25, eu comecei a atualizar o texto para cobrir o Tomcat 6. Mas só agora, na revisão 35, pude testar todos os aspectos nessa versão do Tomcat.

Descobri então que uma nova característica de segurança introduzida no Tomcat 6 necessitou alterações importantes na configuração do contexto, relativas ao uso da InvokerServlet.

InvokerServlet é uma servlet do Tomcat, definida no pacote org.apache.catalina.servlets, que serve para mapear e invocar genericamente qualquer servlet com base no nome da respectiva classe.

Utilizando Invoker Servlet, um mapeamento genérico como /servlet/* no web.xml permite que se possa executar através de um URL do tipo /servlet/NomeClasse uma servlet implementada pela classe NomeClasse.class.

Até o Tomcat 5.5, InvokerServlet podia ser declarada e mapeada no web.xml de qualquer aplicação web e era automaticamente localizada e ativada pelo classloader desta aplicação.

A partir do Tomcat 6, InvokerServlet passou a ser restrita ao classloader do Server (mecanismo do servidor Tomcat). Para carregar e utilizar esta servlet, um contexto de aplicação web deve ser definido como privilegiado, setando o atributo privileged="true" no elemento Context que o define.

Se esta configuração não for feita no Tomcat 6, ocorre o seguinte erro durante a tentativa de executar o mapeamento de InvokerServlet definido no web.xml do contexto da aplicação web, visível nos arquivos de log do Tomcat (em CATALINA_HOME/logs):

java.lang.SecurityException: Servlet of class org.apache.catalina.servlets.InvokerServlet is privileged and cannot be loaded by this web application

Cabe ressaltar que o mapeamento genérico de servlets baseado no nome da classe, como permite InvokerServlet, é considerado má prática. Em produção, o ideal é que se mapeie individualmente cada servlet utilizada em um contexto, no arquivo web.xml da aplicação web.

Contudo, o mapeamento genérico do InvokerServlet é um recurso muito útil em desenvolvimento para se testar rapidamente qualquer classe servlet implementada, sem a necessidade prévia de configurar um mapeamento específico para esta.

Na revisão 35, o texto todo do tutorial foi repassado durante sua validação completa para o Tomcat 6, o que acabou trazendo vários ajustes e melhorias no texto. Confira!

Para saber mais:

IBM e Oracle colaboram no OpenJDK

Em 11 de outubro passado, Oracle e IBM anunciaram que as empresas vão colaborar para acelerar a inovação da tecnologia Java, apoiando desenvolvedores e usuários através da comunidade aberta OpenJDK.

A IBM junta esforços à Oracle no projeto OpenJDK, que desenvolve de forma aberta e colaborativa a implementação de referência da especificação Java Platform, Standard Edition (Java SE), da Linguagem Java, do Java Development Kit (JDK) e do Java Runtime Environment (JRE).

Oracle e IBM vão apoiar o Roadmap de desenvolvimento do OpenJDK para o JDK 7, recentemente divulgado.

Já o Java Community Process (JCP) continuará sendo o foro principal de trabalho para os padrões da tecnologia Java, do qual ambas empresas já participam ativamente. IBM endossou a proposta da Oracle para Java SE 7 e Java SE 8 no JCP, que já tinha bom apoio da comunidade Java em geral.

Sendo Oracle — que adquiriu Sun e BEA — e IBM as duas maiores empresas propulsoras da tecnologia Java e fornecedoras de vasto portfólio de produtos e soluções baseadas nesta tecnologia, essa colaboração ameniza os temores e incertezas da comunidade sobre o futuro do Java após a aquisição da Sun, criadora do Java, pela Oracle. Além disso, um maior alinhamento entre as duas gigantes quanto ao desenvolvimento do Java SE deve realmente acelerar a evolução da tecnologia e o avanço das inovações.

Para saber mais:

  • IBM to join OpenJDK (em inglês), no blog de Mark Reinhold, Arquiteto Chefe do Java Platform Group na Oracle.

Livro de Arquitetura 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.

Atualidades software livre Sun-Oracle para Java

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.

Consulta × pesquisa: características, técnicas e ferramentas

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.