Revisão de Código J2EE Best Practices

A revisão de código J2EE Best Practices consiste em apenas uma categoria; ela também é chamada de J2EE Best Practices.

Finalidade

A revisão de código J2EE Best Practices aplica regras para detectar antipadrões no código que são difíceis de serem detectados por meios convencionais. Os antipadrões são problemas conhecidos que ocorrem no código e não seguem boas práticas. Enquanto os padrões de design são bons modelos a serem seguidos, os antipadrões são modelos incorretos que devem ser evitados. Esses antipadrões podem causar séria degradação de desempenho ou interrupções do sistema. Esta revisão de código é executada apenas em servlets. Os servlets devem estar em projetos dinâmicos da Web destinados a um dos stubs a seguir:
  • WebSphere Application Server 5.0
  • WebSphere Application Server 5.1
  • WebSphere Application Server 6.0
JSPs, struts e EJBs não são suportados.

Algumas regras na revisão de código requerem análise do fluxo de dados para detectar algumas descobertas. A análise do fluxo de dados rastreia o caminho para uma descoberta. Conseqüentemente, a revisão de código leva mais tempo para ser concluída quando essas regras são aplicadas.

Categorias de Regra

A tabela a seguir lista todas as categorias e subcategorias na revisão de código J2EE Best Practices, juntamente com uma descrição das regras em cada uma. Na coluna esquerda, as categorias estão em texto em negrito e as subcategorias estão em texto simples.

Categoria ou Subcategoria Descrição
J2EE Best Practices Contém regras com base nas boas práticas de desenvolvimento do J2EE e suporta projetos da Web destinados a servidores WebSphere
Correctness Contém regras que detectam chamadas de método incorretas
Data Race Contém regras para detectar chamadas de método que podem causar condições de concorrência de dados em aplicativos J2EE
Garbage Collection Contém regras que detectam chamadas de método que podem atrasar a coleta de lixo
Maintainability Contém regras para detectar código que pode ser difícil de manter em aplicativos J2EE
Performance and Scalability Contém regras para detectar chamadas de método que impedem o desempenho ou limitam a escalabilidade de um aplicativo J2EE
Resource Management Contém regras J2EE best practice para utilizar recursos nos aplicativos J2EE

Tipos de Regras

A revisão de código J2EE Best Practices aplica regras de dois tipos: regras rápidas e regras detalhadas. As características que diferenciam os tipos de regras são o período de tempo que a regra leva para ser aplicada e o tipo de informação que a regra apresenta em uma descoberta.

Regras Rápidas do J2EE

As regras rápidas do J2EE levam menos tempo para serem aplicadas na revisão de código J2EE Best Practices do que as regras detalhadas. As regras rápidas apresentam as mesmas informações para uma descoberta que as regras nas outras revisões de código.

Regras Detalhadas do J2EE

As regras detalhadas do J2EE requerem análise do fluxo de dados, portanto elas levam mais tempo para produzir descobertas do que as regras rápidas. As regras detalhadas do J2EE não produzem apenas descobertas, mas mostram também os caminhos que conduzem às descobertas. Essas regras requerem análise do fluxo de dados, o método que rastreia os caminhos, portanto elas levam mais tempo para produzir descobertas do que as regras rápidas. As regras detalhadas fornecem as informações adicionais a seguir:

Lista de Regras Detalhadas do J2EE

Há 36 regras detalhadas do J2EE. A coluna esquerda da tabela a seguir lista as subcategorias que as contêm. A coluna direita lista ou descreve quais regras na subcategoria são regras detalhadas do J2EE.

Categoria ou Subcategoria Regra Detalhada do J2EE
Correctness
Evitar armazenar objetos que não implementam java.io.Serializable em javax.servlet.http.HttpSession
Data Race
Evitar designação a quaisquer campos estáticos, a partir do javax.servlet.Service.service(), sem utilizar uma trava compartilhada
Evitar designação a campos de instância do servlet, a partir do javax.servlet.Service.service(), sem utilizar uma trava compartilhada
Performance and Scalability
Sempre chamar javax.servlet.http.HttpSession.invalidate() após javax.servlet.http.HttpServletRequest.getSession()
Resource Management Todas as 32 regras nesta subcategoria são regras detalhadas do J2EE.

Regras de Amostra

Esta seção contém uma amostra de cada tipo de regra aplicado na revisão de código J2EE Best Practices.

Regra rápida de amostra

A regra a seguir é uma regra rápida de amostra que está na subcategoria Performance and Scalability.

Evitar chamar java.lang.Runtime a partir de qualquer servlet

Regra detalhada de amostra

A regra a seguir é uma regra detalhada de amostra que está na subcategoria Resource Management.
Sempre chamar java.io.FileInputStream.close() após new java.io.FileInputStream(java.io.File)

Problemas Conhecidos

Esta seção documenta problemas conhecidos com a revisão de código J2EE Best Practices.

Positivo falso: Um fluxo de entrada não foi fechado

Resumo: A revisão de código J2EE Best Practices produz uma descoberta de que um fluxo de entrada não foi fechado. Na realidade, não há nenhum outro fluxo de entrada para ser fechado.

Descrição: A revisão de código não reconhece que todos os fluxos de entrada estão fechados nas situações a seguir:
  • Se bis for nulo, não haverá nenhum fluxo de entrada para ser fechado
  • Um fluxo de entrada, FileInputStream, é utilizado para criar um segundo fluxo de entrada, BufferedInputStream. Quando o segundo fluxo de entrada é fechado, ocorre o mesmo com o primeiro.
Ilustração: As linhas realçadas no exemplo de código a seguir ilustram ambas as situações:
public static int readFirstByte(String fileName) {
 int firstByte = -1;
 FileInputStream fis=null;
 BufferedInputStream bis = null;
 try {
  fis = new FileInputStream(fileName);
  bis = new BufferedInputStream(fis);  firstByte = bis.read();
 } catch (FileNotFoundException fnfe) {
  LogUtility.log(fnfe);
 } catch (IOException ioe) {
  LogUtility.log(ioe);
 } finally {
  if (bis!=null){   try {
    bis.close();   } catch (IOException ioe){
    LogUtility.log(ioe);
   }
  }
 }
 return firstByte;
} 

Solução alternativa: Clique com o botão direito do mouse na descoberta de positivo falso e clique em Ignorar.

Informações insuficientes: A descoberta é relatada para um arquivo .classpath

Resumo: A revisão de código J2EE Best Practices produz uma descoberta no arquivo .classpath e não em um recurso no workbench.

Descrição: A revisão de código localiza um problema com um tipo binário e esse tipo não possui recurso correspondente no workbench porque está contido em um JAR externo.

Referência: RFE RATLC00038795

Solução alternativa:

  1. Na visualização Code Review Details, clique na guia Paths para ver qual tipo não possui um recurso correspondente no workbench.
  2. Expanda as informações de caminho para ver os nomes dos tipos, e possivelmente os métodos e campos, envolvidos na descoberta.

Resource filters: Não funcionam para regras detalhadas

Summary: Na página Resource Filters, você especifica os arquivos aos quais não deseja que a regra detalhada selecionada seja aplicada durante uma revisão de código. Entretanto, o filtro não funciona e a regra continua sendo aplicada aos arquivos especificados.

Description: As regras detalhadas do J2EE funcionam de modo diferente quando trata-se da especificação de arquivos aos quais você não deseja que uma regra seja aplicada durante uma revisão de código. As regras detalhadas não reconhecem os arquivos especificados na página Resource Filters, mas reconhecem os arquivos na página Excluded, na qual os arquivos JAR são listados por padrão. Essas regras reconhecem dois tipos de arquivo para exclusão, um arquivo completo JAR ou de servlet, e ignoram todos os outros.

Solução alternativa:
  1. Clique em Window > Preferences para abrir a janela Preferences.
  2. Na área de janela esquerda, expanda Java e Code Review, em seguida, selecione Excluded.
  3. Na página Excluded, revise os arquivos listados na página Resources e execute um dos procedimentos a seguir:
    • Se o arquivo que você deseja excluir da revisão por regras detalhadas do J2EE estiver listado, clique em OK. Nenhuma ação adicional é necessária de sua parte.
    • Para excluir um servlet da revisão por regras detalhadas do J2EE, selecione o arquivo .java ou .class do servlet e, em seguida, clique em OK.
    • Para excluir um arquivo JAR da revisão por regras detalhadas do J2EE, selecione o arquivo JAR e, em seguida, clique em OK.
Se um arquivo você não deseja excluir da revisão de código estiver listado, selecione o arquivo e clique em Remove.
Termos de uso | Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.