BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Oracle ressuscita getCallerClass no Java 7: Groovy, Grails salvos da quebra

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

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.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT