BT
x A sua opinião é importante! Por favor preencha a pesquisa do InfoQ sobre os seus hábitos de leitura!

Oracle ressuscita getCallerClass no Java 7: Groovy, Grails salvos da quebra

por Vikram Gupta , traduzido por Renan de Melo Oliveira em 15 Ago 2013 |

A Oracle anunciou no início de julho que o método sun.reflect.Reflection.getCallerClass() seria descontinuado. Mas recentemente a empresa reverteu a decisão, como indicado no tweet do arquiteto-chefe da plataforma Java na Oracle, Mark Reinhold (com menção a Cedric Champeu e Guillaume Laforge):

Vamos reincluir o getCallerClass(int) no 7u40. O destino desse método no 8 ainda será decidido.

Cédric Champeau retuitou Reinhold com o seguinte comentário:

Boas notícias: o pessoal do JDK decidiu reverter o comportamento do getCallerClass no 1.7u40 e 1.8. O Groovy e sistemas de logging não serão quebrados.

Champeau é o principal committer da linguagem Groovy e Laforge é Líder de Desenvolvimento Groovy na SpringSource (mantenedora do Groovy).

O método sun.reflect.Reflection.getCallerClass() funciona retornando a instância da classe do método certo número de frames acima na pilha de chamadas (call stack), sendo que a própria classe Reflect representa a posição zero.

O método getCallerClass() oferece um mecanismo para determinar a classe do chamador, possibilitando implementar comportamentos "sensíveis ao chamador". Com isso, aplicações podem variar seu comportamento de acordo com a classe chamadora, ou classes acima na pilha de chamadas.

A Oracle alertou que chamadas como o getCallerClass() e muitas outras no pacote sun.* podem se mostrar frágeis e inconsistentes, por razões descritas em seu artigo "Por que desenvolvedores não devem escrever programas que chamam o pacote 'sun'". A notícia da alteração para deprecated estava sendo acompanhada no issue tracker da OTN.

Cédric Champeau alertou antecipadamente para a mudança do método para deprecated pois o Groovy depende deste método. E não é apenas o Groovy que é impactado; o Grails também. A equipe do Grails informou um bug relacionado em seu issue tracker.

O problema ia além. Usando-se ferramentas de pesquisa de código-fonte público, encontram-se dependências para o getCallerClass() em vários projetos, incluindo alguns da própria Oracle como o Jigsaw e o Lambda, e outros projetos de terceiros como o IntelliJ IDEA.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

Substituto by Fernando Xavier

Geralmente se faz algo melhor antes de depreciar alguma coisa, anunciaram um substituto pra esse método?

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

1 Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT