segunda-feira, 12 de setembro de 2016

Prepare-se para Java 9

Java 9 introduzirá um sistema modular diferente da plataforma Java SE de hoje.A Compatibilidade com versões anteriores é uma das principais prioridades, a equipe de engenharia da Oracle tem trabalhado em uma transição suave para Java 9. No entanto, há uma série de mudanças-chaves abaixo que você precisa entender. Sabendo que esta informação também ajudará melhor nas sessões do JavaOne e para o lançamento do Java 9.

As condições gerais de compatibilidade indicam que APIs suportadas pode ser removido com aviso prévio.A JEP 277 reforça a depreciação que descreve o processo de notificação, o estado e disposição da APIs, bem como ferramentas para analisar o uso estático de um aplicativo das APIs depreciadas.

A JEP 260 diz respeito sobre o encapsulamento da maior parte das APIs, explica que a maioria das APIs internas serão inacessíveis por padrão, mas deixa algumas críticas APIs internas  amplamente utilizados, acessíveis, até que existam substituições compatíveis para todos ou a para maioria de sua funcionalidade.

Como regra geral, você não deve usar APIs não suportados, que são na sua maioria são dos pacotes sun.* APIs como sun.misc.Unsafe. Essas APIs são destinadas a ser usado pela equipe do JDK da Oracle. Mark Reinhold fez uma palestra inteira no ano passado na JVM Language Summit a respeito da sun.misc.Unsafe.

As APIs internas críticas que foram propostos para permanecer acessível no JDK 9 são:

  • sun.misc.{Signal,SignalHandler}
  • sun.misc.Unsafe (A funcionalidade de muitos dos métodos dessa classe está agora disponível através de variable handles (JEP 193).)
  • sun.reflect.Reflection::getCallerClass(int) (A funcionalidade do método pode ser fornecida numa forma padrão através da JEP 259.)
  • sun.reflect.ReflectionFactory.newConstructorForSerialization
As APIs internas críticas acima serão colocados em, e seus pacotes exportados de um módulo específico do JDK chamado jdk.unsupported. Você irá achar mais informações na página JEP 260.


Como você sabe se o seu programa utiliza ou depende de qualquer API JDK-interno?


Você pode identificar as APIs pelo nome dos pacotes no código fonte, se você tiver acesso ao código-fonte. Às vezes isso é um desafio porque você pode usar uma biblioteca de terceiros que depende de uma dessas APIs. Para identificar essas APIs, você pode usar Jdeps, ferramenta de análise de dependência do Java, que foi introduzido no JDK 8. Você deve usar a versão melhorada do Jdeps, disponível e com acesso antecipado a pagina de lançamentos do JDK 9 . Há também um plug-in para Maven.

O comando jdeps mostra o nível do pacote ou o nível de dependências da classe Java.A classe de entrada pode ser um nome de caminho para um arquivo .class, um diretório, um arquivo JAR, ou pode ser um nome de classe totalmente qualificado para analisar todos os arquivos de classe.

Por padrão é analisado todas as classes especificadas na opção -classpath e no arquivo de entrada do mesmo.Você vai precisar usar '-jdkinternals' para sinalizar as APIs internas. Mais informações estão disponíveis na página principal Jdeps. A ferramenta notifica sobre as APIs internas do JDK para modificar, bem como sugerindo substituições quando disponível. A lista completa de JDK substituições API interna está disponível aqui.

Alan Bateman explica como usar a jdeps e percorre vários exemplos usando um arquivo jar do Glassfish e, a partir Gradle 2.7. Ele também fornece uma solução alternativa se você estiver usando um aplicativo de terceiros que não pode ser atualizado. Assistir a sua apresentação aqui.

Links chaves:

Fonte: Oracle, Tradução: Equipe ALJUG

2 comentários:

  1. Miguel, você que está bem antenado com o mundo java, poderia fazer um artigo explicando como funciona a licença que a Oracle usa no java?
    Estou pedindo isso, porque existe uma piada no mundo de T.I., que diz que a Oracle tem mais advogados do que programadores. E ninguém quer investir tempo e dinheiro desenvolvendo algo em Java que futuramente a Oracle possa querer tirar proveito. Não quero levantar uma guerra ideológica, mas acho muito importante que esse "detalhe" seja exposto.

    ResponderExcluir
  2. Beleza, vou fazer uma pesquisa bem embasada e posto aqui! Valeu pelo dica!

    ResponderExcluir