BT
x Por favor preencha a pesquisa do InfoQ !

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.

Avalie esse artigo

Relevância
Estilo/Redação

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
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

Percebemos que você está utilizando um bloqueador de propagandas

Nós entendemos porquê utilizar um bloqueador de propagandas. No entanto, nós precisamos da sua ajuda para manter o InfoQ gratuito. O InfoQ não compartilhará seus dados com nenhum terceiro sem que você autorize. Procuramos trabalhar com anúncios de empresas e produtos que sejam relevantes para nossos leitores. Por favor, considere adicionar o InfoQ como uma exceção no seu bloqueador de propagandas.