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.