Reino: API Abuse

Uma API é um contrato entre quem chama e o que se chama. As formas mais comuns de abuso de API ocorrem quando o responsável pela chamada não respeita sua parte do contrato. Por exemplo, se um programa não chama chdir() após chamar chroot(), ele viola o contrato que especifica como alterar o diretório raiz ativo de forma segura. Outro bom exemplo de abuso de biblioteca é esperar que o elemento chamado retorne informações confiáveis de DNS ao responsável pela chamada. Nesse caso, o responsável pela chamada abusa a API do elemento chamado ao fazer certas suposições sobre seu comportamento (isto é, que o valor de retorno pode ser usado para fins de autenticação). A outra parte também pode violar o contrato entre quem chama e o que se chama. Por exemplo, se um programador definir SecureRandom como subclasse e retornar um valor não aleatório, o contrato será violado.

EJB Bad Practices: Use of java.io

Abstract
O programa viola a especificação Enterprise JavaBeans usando o pacote java.io.
Explanation
A especificação Enterprise JavaBeans exige que todos os fornecedores de beans sigam um conjunto de orientações de programação destinadas a assegurar que o bean será portátil e terá um comportamento consistente em qualquer contêiner EJB [1].

Neste caso, o programa viola a seguinte orientação EJB:

"Um enterprise bean deve ter cuidado ao usar o pacote Java I/O para tentar acessar arquivos e diretórios no sistema de arquivos."

Uma exigência que a especificação justifica da seguinte maneira:

"As APIs do sistema de arquivos não são adequadas para que componentes de negócios acessem dados. Os arquivos podem não estar acessíveis em todas as instâncias, ou seu conteúdo pode ser diferente em instâncias diferentes, e coordenar as atualizações do arquivo pode ser difícil. Os componentes de negócios devem usar uma API de gerenciador de recursos, como JDBC, para armazenar dados."
References
[1] Jakarta Enterprise Beans 4.0 Eclipse Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 576
desc.structural.java.ejb_bad_practices_use_of_java_io