[Resolvido] PMD - JavaBean Rules - Serialização

2 respostas
gfkauer

Olá,
Estou gerando alguns relatórios de PMD e ajustando alguns itens que forem “aplicáveis” ao projeto sem nescessitar de uma mega reestruturação do código.

Um dos apontamentos que os relatórios geraram foi apontando a regra BeanMembersShouldSerialize, onde diz que um método que um método que não possui getters ou setters poderia ser transformado em transient. Por desconhecer a função de transformar algo em transient dei uma pesquisada e vi que este comando indica que uma variavel não seja serializada por não possuir nem gets nem sets.

Agora veio a pergunta, até que ponto é interresante tranformar-las em transients? No que isso irá influenciar dentro da minha rotina e quais os possiveis erros que encontrarei após a modificação? (se é que podem vir a existir erros)

Obrigado.

2 Respostas

Alexandre_Saudate
gfkauer:
Olá, Estou gerando alguns relatórios de PMD e ajustando alguns itens que forem "aplicáveis" ao projeto sem nescessitar de uma mega reestruturação do código.

Um dos apontamentos que os relatórios geraram foi apontando a regra BeanMembersShouldSerialize, onde diz que um método que um método que não possui getters ou setters poderia ser transformado em transient. Por desconhecer a função de transformar algo em transient dei uma pesquisada e vi que este comando indica que uma variavel não seja serializada por não possuir nem gets nem sets.

Agora veio a pergunta, até que ponto é interresante tranformar-las em transients? No que isso irá influenciar dentro da minha rotina e quais os possiveis erros que encontrarei após a modificação? (se é que podem vir a existir erros)

Obrigado.

Amigo... bela confusão!

Vamos por partes... primeiro, métodos NÃO podem ser marcados como transient, só variáveis de instância. Quando você serializa um bean, a API serializa as variáveis de instância (posto que um bean é composto por seus atributos, certo?). Quando você desserializa um objeto, as variáveis são desserializadas junto, trazendo de volta o estado do bean. Se você marcar a variável de instância como transient, isso vai fazer com que ela não seja serializada, e você pode fazer isso por diversos motivos. Por exemplo:

1) A variável de instância não é serializável.
2) O valor da variável não é relevante.

No livro SCJP, da Kathy Sierra, o seguinte exemplo é apresentado (da maneira como me lembro):

class Horse implements Serializable {
     
      private Collar collar;

      //getters e setters
}
class Collar { //não serializável

}

O código acima não roda (mas compila, portanto, cuidado). Mas se você marcar Collar como transient, então, o código vai funcionar (lembrando que, na desserialização, o Collar não vai junto).

Bom... espero ter sanado algumas dúvidas. Qualquer coisa, só perguntar.

[]´s

gfkauer

Desculpe, me equivoquei ao redigir o tópico, realmente não são os métodos que estão sendo apontados e sim algumas variaveis.

No mais sua resposta foi de grande ajuda.

Obrigado.

Criado 1 de fevereiro de 2010
Ultima resposta 1 de fev. de 2010
Respostas 2
Participantes 2