argo navis : tecnologia com arte - trilha java florianópolis ...quem sou eu? who am i? Кто я?...
TRANSCRIPT
![Page 1: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/1.jpg)
florianópolis abril 2017
helder da rocha
TRILHA JAVA
Java91011
![Page 2: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/2.jpg)
Quem sou eu? Who am I? Кто я?Helder da Rocha
argonavis.com.br
Tecnologia * Ciência * Arte HTML & tecnologias Web desde 1995
Autor de cursos e livros sobre Java, XML e tecnologias Web
helderdarocha.com.br
![Page 3: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/3.jpg)
História das versões JavaJDK Alfa e Beta: 1994
JDK 1.0/1.02 1996 (8 pacotes!)
JDK 1.1 1996
Java 2 (J2SE 1.2) 1998
J2SE 1.3 2000
J2SE 1.4 2002
J2SE 5.0 (JDK 1.5) 2005
Java SE 6 (JDK 1.6) 2006
Java SE 7 (JDK 1.7) 2011
Java SE 8 (JDK 1.8) 2014
Java SE 9 (JDK 9) 2017
![Page 4: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/4.jpg)
História das versões JavaJDK Alfa e Beta: 1994
JDK 1.0/1.02 1996 (8 pacotes!)
JDK 1.1 1996
Java 2 (J2SE 1.2) 1998
J2SE 1.3 2000
J2SE 1.4 2002
J2SE 5.0 (JDK 1.5) 2005
Java SE 6 (JDK 1.6) 2006
Java SE 7 (JDK 1.7) 2011
Java SE 8 (JDK 1.8) 2014
Java SE 9 (JDK 9) 2017
Java 10 (18.3) 3/2018 Java 11 (18.9) 9/2018
![Page 5: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/5.jpg)
Objetivos
Java 9: módulosJava 9: outras novidades
Java 10 e Java 11
![Page 6: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/6.jpg)
Módulos
![Page 7: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/7.jpg)
Modularidade
Objetivo: promover coesão, reuso, encapsulamento, eficiência usando apenas o código necessário
• Módulos devem ter
• Encapsulamento forte
• Interfaces bem definidas
• Dependências explícitas
rt.jar app
app
![Page 8: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/8.jpg)
Impacto dos módulos• JDK e JRE:
• Divide JDK (tools.jar) e Runtime (rt.jar) em blocos menores
• Encapsula APIs internas (que não devem ser usadas) (ex: sun.misc.*)
• Ferramenta (jlink) gera imagens executáveis
• Em aplicações Java
• Permite criação de aplicações modularizadas
![Page 9: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/9.jpg)
Antes do Java 9• Modularidade via modificadores de acesso, pacotes, JARs
• java -cp ... um monte de linhas ... -jar App.jar
• rt.jar (grande) e outros JARs do JRE
• Acesso a sun.misc.unsafe.*
• Classpath/Classloader Hell
• Soluções externas: Maven (compile-time) + OSGi (runtime)
![Page 10: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/10.jpg)
Servico
Interna
Detalhe
Servico
Interna
DetalheUm DetalheDois
internal internal
depend-1.0.jar depend-1.1.jar
Classpath hell
![Page 11: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/11.jpg)
Servico
Interna
Detalhe
Servico
Interna
DetalheUm DetalheDois
internal internal
depend-1.0.jar depend-1.1.jar
java -cp depend-1.1.jar;outros-1.x.jar;depend-1.0.jar -jar App.jar
![Page 12: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/12.jpg)
Servico
Interna
Detalhe
Servico
Interna
DetalheUm DetalheDois
internal internal
depend-1.0.jar depend-1.1.jar
java -cp depend-1.1.jar;outros-1.x.jar;depend-1.0.jar -jar App.jar
![Page 13: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/13.jpg)
Servico
Interna
Detalhe
Servico
Interna
DetalheUm DetalheDois
internal internal
depend-1.0.jar depend-1.1.jar
java -cp depend-1.1.jar;outros-1.x.jar;depend-1.0.jar -jar App.jar... Servico("dois") ...
![Page 14: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/14.jpg)
Servico
Interna
Detalhe
Servico
Interna
DetalheUm DetalheDois
internal internal
depend-1.0.jar depend-1.1.jar
java -cp depend-1.0.jar;outros-1.x.jar;depend-1.1.jar -jar App.jar
![Page 15: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/15.jpg)
Servico
Interna
Detalhe
Servico
Interna
DetalheUm DetalheDois
internal internal
depend-1.0.jar depend-1.1.jar
java -cp depend-1.0.jar;outros-1.x.jar;depend-1.1.jar -jar App.jar... Servico("dois") ...
![Page 16: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/16.jpg)
Servico
Interna
Detalhe
Servico
Interna
DetalheUm DetalheDois
internal internal
depend-1.0.jar depend-1.1.jar
java -cp depend-1.0.jar;outros-1.x.jar;depend-1.1.jar -jar App.jar... Servico("dois") ...
java.lang.NoClassDefFoundError
![Page 17: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/17.jpg)
Módulo = coleção de pacotes
• Pasta contendo module-info.java e pacotes
• Declara módulos que são suas dependências
• Todo módulo depende do módulo java.base por default
• Na JVM, java.base é módulo raiz e não depende de nenhum outro módulo
• Pacotes são encapsulados (precisam ser exportados para que sejam usados fora do módulo)
![Page 18: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/18.jpg)
java --list-modulesjava.activation@9 java.annotations.common@9 java.base@9 java.sql@9 java.xml@9 java.rmi@9 java.se@9 java.se.ee@9 java.compiler@9 java.corba@9 java.datatransfer@9 java.desktop@9 java.instrument@9 java.jnlp@9 java.logging@9 java.management@9 java.naming@9 java.prefs@9 java.scripting@9 java.security.jgss@9 java.security.sasl@9 java.smartcardio@9 java.sql.rowset@9 java.transaction@9
jdk.dynalink@9 jdk.editpad@9 jdk.hotspot.agent@9 jdk.httpserver@9 jdk.incubator.httpclient@9 jdk.internal.ed@9 jdk.internal.le@9 jdk.internal.opt@9 jdk.jartool@9 jdk.javadoc@9 jdk.javaws@9 jdk.jcmd@9 jdk.jconsole@9 jdk.jdeps@9 jdk.jdi@9 jdk.jdwp.agent@9 jdk.jfr@9 jdk.jlink@9 jdk.jshell@9 jdk.jsobject@9 jdk.jstatd@9 jdk.jvmstat@9 jdk.localedata@9
java.xml@9 java.xml.bind@9 java.xml.crypto@9 java.xml.ws@9
javafx.base@9 javafx.controls@9 javafx.deploy@9 javafx.fxml@9 javafx.graphics@9 javafx.media@9 javafx.swing@9 javafx.web@9
jdk.accessibility@9 jdk.attach@9 jdk.charsets@9 jdk.compiler@9 jdk.crypto.cryptoki@9 jdk.crypto.ec@9 jdk.deploy@9 jdk.deploy.controlpanel@9 jdk.desktop@9
jdk.management@9 jdk.naming.dns@9 jdk.naming.rmi@9 jdk.net@9 jdk.pack@9 jdk.packager@9 jdk.packager.services@9 jdk.plugin@9 jdk.plugin.dom@9 jdk.plugin.server@9 jdk.policytool@9 jdk.rmic@9 jdk.scripting.nashorn@9 jdk.scripting.nashorn.shell@9 jdk.sctp@9 jdk.security.auth@9 jdk.security.jgss@9 jdk.snmp@9 jdk.unsupported@9 jdk.vm.ci@9 jdk.xml.bind@9 jdk.xml.dom@9 jdk.xml.ws@9 jdk.zipfs@9
java.base@ java.sql@9 java.xml@9 :ava.se@9
![Page 19: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/19.jpg)
Estrutura do JDKJDK 8
JDK 8/jre
JDK 9
módulos do JRE
módulos do JDKpacotes do JRE
pacotes do JDK
![Page 20: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/20.jpg)
Estrutura de uma aplicação
Módulo
Pacote
Classe
Classe
Pacote
Classe
Pacote
Classe
Classe
Pacote
Classe
Classe
Pacote Pacote
Classe
Classe
module-info module-info
Java 8
Java 9
Sub-Pacote
Classe
Classe
Sub-Pacote
Classe
![Page 21: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/21.jpg)
Aplicações ficam menores!Aplicação
rt.jar
Aplicação
java.sql
java.xml
java.base
![Page 22: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/22.jpg)
Como gerar um runtimejlink --module-path $JAVA_HOME/jmods:mlib --add-modules modulo.teste --launcher exec launch=modulo.teste/pacote.Main --output myimage
$ myimage/bin/java -list-modules java.base@9 java.logging@9 java.sql@9 java.xml@9 modulo.teste modulo.teste.submod
$ myimage/bin/exec
myimage
bin
exec
java
conf lib
include
release
Executável
Para executar
![Page 23: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/23.jpg)
Ferramenta jdeps• Quais os módulos requeridos por uma classe ou módulo?
Onde estão minhas classes e pacotes?
• Ferramenta fundamental para migração
>jdeps -jdkinternals Sample.class Sample.class -> JDK removed internal API Sample -> sun.misc.BASE64Encoder JDK internal API (JDK removed internal API)
Warning: JDK internal APIs are unsupported and private to JDK implementation that are subject to be removed or changed incompatibly and could break your application. Please modify your code to eliminate dependency on any JDK internal APIs. For the most recent update on JDK internal API replacements, please check: https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
JDK Internal API Suggested Replacement ---------------- --------------------- sun.misc.BASE64Encoder Use java.util.Base64 @since 1.8
![Page 24: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/24.jpg)
)LJXUH������6XEVHW�RI�SODWIRUP�PRGXOHV�LQ�WKH�-'.
Hierarquia Módulos java.*
![Page 25: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/25.jpg)
)LJXUH������6XEVHW�RI�SODWIRUP�PRGXOHV�LQ�WKH�-'.
Hierarquia Módulos java.*
)LJXUH������6XEVHW�RI�SODWIRUP�PRGXOHV�LQ�WKH�-'.
![Page 26: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/26.jpg)
module-info.java• Module Descriptor: arquivo de meta-informação
• Declara de quais módulos depende (java.base é dependência implícita) e que pacotes disponibiliza
• Todo módulo possui um module-info.java
• Sintaxe: module nome-do-módulo { ... }
![Page 27: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/27.jpg)
requires módulo• Declara dependência (legibilidade / readability) de um
outro módulo:
• O módulo java.base é dependência automática e não precisa ser declarada
• É preciso saber em que módulo está um determinado pacote que se deseja usar!
module nome-do-modulo { requires outro-modulo; }
m2
m1
![Page 28: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/28.jpg)
Legibilidade
java.xml
java.prefs
aplicação
requires
requires
• A legibilidade não é transitiva por default
• Aplicação ao lado não tem acesso à API do módulo java.xml
module aplicacao { requires java.prefs; }
![Page 29: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/29.jpg)
Legibilidade
java.xml
java.prefs
aplicação
requires
requires
requires
• Para ter acesso, a Aplicação precisa também declarar requires para o módulo java.xml
module aplicacao { requires java.prefs; requires java.xml; }
![Page 30: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/30.jpg)
requires transitive• Dependência não transitiva - acessa API dos módulos
lidos (mas não os detalhes da implementação)
• Dependência transitiva - acessa API + dependências dos módulos lidos
module java.sql { requires transitive java.logging; requires transitive java.xml; ... }
![Page 31: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/31.jpg)
Legibilidade transitiva
• Setas sólidas representam ligações transitivas
java.base
java.xml
java.prefs java.sql
java.desktop
java.se
java.logging
requires
requires transitive
![Page 32: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/32.jpg)
Legibilidade transitiva
java.xml java.sql java.logging
aplicação
java.xml
java.sql
java.logging
aplicação
Declaração Efeito
requires transitive
requires
![Page 33: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/33.jpg)
java.se e java.se.ee• Módulos agregadores (agrupam outros módulos)
• Declaram todos os módulos descendentes com requires transitive (permite que a aplicação use tudo)
• Não é boa prática usá-los sempre
module java.se { requires transitive java.desktop; requires transitive java.sql; ... }
![Page 34: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/34.jpg)
m1
exports pacote• Se pacotes de um módulo foram criados
para reuso, o módulo precisa exportá-los:
• Se um pacote não for exportado ele só pode ser usado dentro do módulo!
• Apenas classes e membros públicos em pacotes exportados são acessíveis (accessibility)
module nome-do-modulo { exports pacote.nome-do-pacote; }
pacote
m2
requires
exports
![Page 35: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/35.jpg)
java.base• Raiz de todos os módulos
• Todo módulo implicitamente requer java.base
• Define e exporta todos os pacotes fundamentais da plataforma Java
module java.base { exports java.io; exports java.lang; exports java.lang.annotation; exports java.lang.invoke; exports java.lang.ref; exports java.lang.reflect; exports java.math; exports java.net; ... }
Pacotes que podem ser usados por aplicações
que requerem java.base (todas as
aplicações)
![Page 36: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/36.jpg)
Module Path
• Local onde se encontram módulos
• Não localiza classes. Localiza módulos inteiros (dependências especificadas via metadados)
• Dependências transitivas são computadas na inicialização e construção do grafo de módulos
![Page 37: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/37.jpg)
Módulos especiais• Uma classe que não foi explicitamente declarada dentro
de um módulo pertence ao Módulo Sem Nome
• Módulo raiz é java.se
• Módulos com nome não podem depender deles
• Um Módulo Automático é criado ao incluir um JAR no modulepath (ele terá o mesmo nome que o JAR)
• Exportam todos os seus pacotes e automaticamente requer todos os outros pacotes do modulepath
• Módulos com nome podem depender de módulos automáticos
![Page 38: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/38.jpg)
Qualified exports (to)
• Restringe a exportação de pacotes a (to) módulos específicos
• Apenas o módulo casa.dono pode acessar o pacote casa.garagem (campos públicos)
module casa { exports casa.garagem to casa.dono; exports casa.sala; }
![Page 39: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/39.jpg)
Pacotes abertos• Libera acesso total em tempo de execução (reflection e
acesso a membros não-públicos) de pacotes específicos
• Também suporta to, para restringir o acesso apenas a determinado módulo
module nome-do-modulo { opens pacote; }
module nome-do-modulo { opens pacote to mod-amigo; }
![Page 40: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/40.jpg)
Módulos abertos
• Libera todos os pacotes do módulo - todos tem acesso a todos os membros de todos os pacotes
open module nome-do-modulo { ... }
![Page 41: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/41.jpg)
requires static
• Permite que um módulo dependa de outro para compilação (mas não em tempo de execução)
• Existe risco de NoClassDefFoundError
module stats.dados { requires stats.dados; requires static graficos.3d; exports stats.leituras; }
![Page 42: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/42.jpg)
Serviços• Service Provider Interface (SPI)
• Usa API java.util.ServiceLoader (adaptada para módulos)
• Módulo que oferece o serviço declara provides interface-do-servico with implementacao
• Módulo que consome o serviço declara uses interface-do-servico
Arquitetura modular
Consumidor
Implementação 1 Implementação 2
uses Interface
provides Interface
ServiceLoader<Interface> servico = ServiceLoader.load(Interface.class); Interface obj = servico.next(); // instancia o serviço + cache
![Page 43: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/43.jpg)
Exemplo usando SPI• Módulo que usa provedor, declara uses
• Módulo que fornece, declara provides
module java.sql { ... exports java.sql; exports javax.sql; uses java.sql.Driver; }
module com.mysql.jdbc { requires java.sql; exports com.mysql.jdbc; provides java.sql.Driver with com.mysql.jdbc.Driver; }
![Page 44: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/44.jpg)
Outras novidades
do Java 9
![Page 45: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/45.jpg)
Método of() em coleções• Factory methods para criar coleções imutáveis
List<String> lista2 = List.of("Um", "Dois", "Três");
Set<String> conj = Set.of("A", "B", "C");
Map<Integer, String> mapa1 = Map.of(1, "Um", 2, "Dois", 3, "Três");
Map.Entry<String, String> e1 = Map.entry("A", "Um"); Map.Entry<String, String> e2 = Map.entry("B", "Dois"); Map<String, String> mapa2 = Map.ofEntries(e1, e2);
![Page 46: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/46.jpg)
Reactive Streams• API padrão para programação reativa baseada em
reactivestreams.org
• Stream interage com a fonte para otimizar a transferência e evitar sobrecarregar o destino (back pressure)
• Interface Flow e sub-interfaces Publisher, Subscriber, Subscription
• Depende de implementações da API (ex: RxJava, Reactor, Vert.x, Akka, etc.)
![Page 47: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/47.jpg)
Métodos private em Interfaces
• Interfaces em Java 8 ganharam métodos default
• Interfaces em Java 9 ganharam métodos privatepublic interface Java9Interface { default String tagText(String nome, String tag) { return initag(tag) + nome + endtag(tag); } private String initag(String tag) { return "<"+tag+">"; } private String endtag(String tag) { return "</"+tag+">"; } }
![Page 48: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/48.jpg)
Process API• Mais controle sobre processos do sistema operacional,
sem precisar recorrer a métodos nativos
Process p = new ProcessBuilder ("/Applications/Firefox.app/Contents/MacOS/firefox") .start();
System.out.println("Firefox pid: " + p.getPid()); long pid = ProcessHandle.current().getPid(); System.out.println("Java pid: " + pid);
![Page 49: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/49.jpg)
Simplifica try com resources• Variáveis que forem efetivamente finais (ou declaradas
finais) não precisam ser declaradas dentro do try.
public static void read(InputStream is) throws IOException { BufferedReader reader = null; final OutputStream os = null; //try (InputStream a = is) { try (is; os) { reader = new BufferedReader(new InputStreamReader(is)); String line = reader.readLine(); while(line != null) { System.out.println(line); line = reader.readLine(); } } }
![Page 50: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/50.jpg)
G1GC é default
http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html
–XX:+UseG1GC –XX:-UseG1GC
![Page 51: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/51.jpg)
Compact strings0x94af39d1
J A V
0x4A 0x41 0x56
J A V A
0x4A 0x41 0x56 0x41
A
0x410x00 0x00 0x00 0x00
char
byte
0
coder
0x94af39d1
String
String
byte
![Page 52: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/52.jpg)
JShell• REPL (Read-Eval-Print-Loop)
![Page 53: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/53.jpg)
Multi-release JARs• JAR com classes e resources para versões diferentes do Java
• + Subdiretório /META-INF/versions que contém um diretório com número da versão
• Menor valor aceito é 9 (< Java 8 ignoram pasta versions)
Um.class Dois.class Tres.class META-INF MANIFEST.MF versions/ 9/ Um.class 10/ Um.class Dois.class
Multi-release: true
![Page 54: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/54.jpg)
Suporte nativo HTTP/2HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder( URI.create("https://www.thedevelopersconference.com.br")) .GET() .build(); HttpResponse.BodyHandler responseBodyHandler = HttpResponse.BodyHandler.asString(); HttpResponse response = client.send(request, responseBodyHandler); String body = response.body().toString(); System.out.println(body);
![Page 55: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/55.jpg)
Java 10 +11
![Page 56: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/56.jpg)
JDK 10 (18.3)
• Release rápido (suporte até setembro/18)
• Novo versionamento
• JDK: nova palavra chave (var) para inferência local de tipos
• JVM: vários melhoramentos
![Page 57: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/57.jpg)
Versionamento
• Dois lançamentos por ano
• Em 2018
• 18.3 (março) = Java 10 (rapid release)
• 18.9 (setembro) = Java 11 (LTS)
![Page 58: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/58.jpg)
Inferência de tipos• Palavra-chave var no lugar de declaração de tipo em
atribuição. Em vez de: HashMap<String, Integer> map = new HashMap<>(); InputStream in = Classpath.getSystemResourceAsStream(); String nome = "Hello!";
• Pode-se usar: var map = new HashMap<String, Integer>(); var in = Classpath.getSystemResourceAsStream(); var nome = "Hello!";
• Restrito a situações onde pode-se inferir o tipo (não pode ser usado em declarações ou parâmetros de métodos)
![Page 59: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/59.jpg)
Outras novidades• Outras novidades do Java 10 estão relacionadas à JVM:
• Coletor de lixo (G1) realiza coleta completa de forma paralela, reduzindo latência
• Diversas configurações de memória (como a possibilidade de escolher onde o heap será alocado, suporte nativo a Docker com configuração automática)
• ...
![Page 60: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/60.jpg)
JDK 11 (18.9)• Possíveis novidades poderão vir dos seguintes projetos
• JDK: Projeto Valhalla (value types - objetos tratados como primitivos + tradução heterogênea de tipos genéricos - tipos parametrizados preservam informação de tipo no bytecode)
• JVM: Projeto Panama (alternativa a JNI para interface Java com bibliotecas nativas) + Projeto Metropolis (Java-on-Java - uma JVM com uma JIT escrita em Java) + Projeto Loom (simplificar modelo de threads: fibers/continuations)
![Page 61: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/61.jpg)
Conclusões• Java 9 foi lançada em setembro de 2017 com diversas
novidades, com destaque para arquitetura modular
• Java 10 (18.3) permite declarar tipos com var, se for possível inferir o tipo pela atribuição
• Próximas versões serão lançadas a cada 6 meses, e serão identificadas pelo ano.mes: ano.3 para o release rápido, em março, e ano.9 para o LTS em setembro
• Mais informações: http://openjdk.java.net/
![Page 62: argo navis : tecnologia com arte - TRILHA JAVA florianópolis ...Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias](https://reader036.vdocuments.pub/reader036/viewer/2022062510/611bc9825817741eb875e3e2/html5/thumbnails/62.jpg)
Baixe esta palestra em http://www.argonavis.com.br/download/tdc2018_flo_java9.html
+ links para referências e exemplos de código
Florianópolis Abril/2018
helder da [email protected]
Java91011