55 New Things in Java 7 - Brazil

59
1 1 55 Funcionalidades Do Java 7 Translation By: Marcelo Quinta @mrquinta Stephen Chin Java Evangelist, Oracle s [email protected] tweet: @steveonjava

description

 

Transcript of 55 New Things in Java 7 - Brazil

Page 1: 55 New Things in Java 7 - Brazil

11

55 Funcionalidades Do Java 7

Translation By:Marcelo Quinta @mrquinta

Stephen ChinJava Evangelist, [email protected]

tweet: @steveonjava

Page 2: 55 New Things in Java 7 - Brazil

22

As 55 funcionalidades do Java 7 que você (provavelmete) nunca ouviu falar

• 55 minutos – 55 slides• Ignite Format

• Sem parar!• Sem voltar atrás• Perguntas? Tudo bem, mas somente se ainda sobrar tempo

nesse slide (caso contrário, deixe para mais tarde)• A especificação de requisitos do Java 7 tem mais de 2000

mudanças. Temos aqui 55 das mais relevantes…

Page 3: 55 New Things in Java 7 - Brazil

33

Literais binários

• Literais binários

int mascara = 0b101010101010;aShort = (short)0b1010000101000101;long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;

CARA_FELIZ = { (short)0b0000011111100000; (short)0b0000100000010000; (short)0b0001000000001000; (short)0b0010000000000100; (short)0b0100000000000010; (short)0b1000011001100001; (short)0b1000011001100001; (short)0b1000000000000001; (short)0b1000000000000001; (short)0b1001000000001001; (short)0b1000100000010001; (short)0b0100011111100010; (short)0b0010000000000100; (short)0b0001000000001000; (short)0b0000100000010000; (short)0b0000011111100000; }

Page 4: 55 New Things in Java 7 - Brazil

44

“Underline” em literais numéricos

• Válido:

• Inválido:

int mascara = 0b1010_1010_1010;long grandao = 9_223_783_036_967_937L;long numeroDoCartao = 1234_5678_9012_3456L;long cadastroNoSUS = 999_99_9999L;float pi = 3.14_15F;Long bytesHex = 0xFF_EC_DE_5E;long palavrasHex = 0xCAFE_BFFE;

float pi1 = 3_.1415F; float pi2 = 3._1415F;long nSUS = 999_99_9999_L;int x1 = _52; int x1 = 52_;int x2 = 0_x52; int x2 = 0x_52;

Page 5: 55 New Things in Java 7 - Brazil

55

Strings na condição do switch

int nomeDoMesParaDias(String s, int ano) { switch(s) { case "Abril": case "Junho": case "Setembro": case "Novembro": return 30;

case "Janeiro": case "Março": case "Maio": case "Julho": case "Agosto": case "Dezembro": return 31;

case "Fevereiro”: ... default: ...

Você sabia que isso geralmente produz byte codes mais eficientes do que uma instrução if-then-else? Case sensitive!

Page 6: 55 New Things in Java 7 - Brazil

66

Gerenciamento automático de recursos

try (InputStream in = new FileInputStream(src), OutputStream out = new FileOutputStream(dest)){ byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n);}

• Nova superinterface java.lang.AutoCloseable• Todos AutoCloseable (throws Exception) e tipos que estendem

java.io.Closeable (throws IOException) são utilizáveis com “try-with-resources”

• Qualquer um que tenha void close() é um candidato• JDBC 4.1 também foi adaptada como AutoCloseable

Page 7: 55 New Things in Java 7 - Brazil

77

Exceções suprimidas

java.io.IOException

at Suppress.write(Suppress.java:19)

at Suppress.main(Suppress.java:8)

Suppressed:  java.io.IOException

at Suppress.close(Suppress.java:24)

at Suppress.main(Suppress.java:9)

Suppressed:  java.io.IOException

at  Suppress.close(Suppress.java:24)

at  Suppress.main(Suppress.java:9)

Throwable.getSuppressed(); // Returns Throwable[]

Throwable.addSuppressed(aThrowable);

Page 8: 55 New Things in Java 7 - Brazil

88

Catch múltiplo

try {...

} catch (ClassCastException e) { facaAlgoInteligente(e); throw e;} catch(InstantiationException |

NoSuchMethodException |InvocationTargetException e) {

// Útil se você realizar ações genéricas log(e);

throw e;}

Page 9: 55 New Things in Java 7 - Brazil

99

Rethrow mais preciso

public void foo(String bar) throws FirstException, SecondException { try { // Código que pode lançar tanto

// FirstException como SecondException } catch (Exception e) { throw e; } }

• Antes do Java 7, esse código não compilaria. As exceções do throws deveriam corresponder aos tipos das capturas – foo deveria ter um “throws Exception”• Java 7 adiciona o suporte para isso contanto que o bloco do try chame todas as exceções da cláusula throws e que a variável na cláusula do catch seja relançada e as exceções não sejam pegas por outro catch

Page 10: 55 New Things in Java 7 - Brazil

1010

O “Operador diamante” funciona de várias formas…

• O compilador infere o tipo à partir do diamante (<>)

List<String> listaStr = new ArrayList<>();

OU

List<Map<String, List<String>> strList = new ArrayList<>();

OU

Foo<Bar> foo = new Foo<>();foo.mergeFoo(new Foo<>());

Page 11: 55 New Things in Java 7 - Brazil

1111

Warnings dos argumentos– Rasuraclass Test { public static void main(String... args) { List<List<String>> monthsInTwoLanguages = Arrays.asList(Arrays.asList("January", "February"), Arrays.asList("Gennaio", "Febbraio" )); }} Test.java:7:  warning:

[unchecked]  unchecked  generic  array  creation  for  varargs parameter  of  type  List<String>[] Arrays.asList(Arrays.asList("January", ^1  warning

@SuppressWarnings(value = “unchecked”) // at call@SafeVarargs // at declaration

Page 12: 55 New Things in Java 7 - Brazil

1212

Funcionalidades do Java NIO.2 -Tipos auxiliares

Três importantes tipos auxiliares no Java 7• Classe java.nio.file.Files

• Métodos exclusivamente estáticos para trabalhar com arquivos, diretórios e outros tipos de registros

• Classe java.nio.file.Paths• Métodos exclusivamente estáticos para retornar um Path através da

conversão de String ou um URI (Uniform Resource Identifier)

• Interface java.nio.file.Path• Usada para objetos que representam a localização de um arquivo no

sistema de arquivos, normalmente dependente do sistema.

Caso de uso típico:Usar a Paths para pegar um Path. Usar a Files para fazer algo com um arquivo.

Page 13: 55 New Things in Java 7 - Brazil

1313

Exemplo prático dos ajudantes do Java NIO.2 • Cópia de arquivo realmente fácil– Com ajuste fino

• Movimentação do arquivo é suportada– Movimento atômico opcional é suportado

Path src = Paths.get(“/home/fred/readme.txt”);Path dst = Paths.get(“/home/fred/copy_readme.txt”);

Files.copy(src, dst,StandardCopyOption.COPY_ATTRIBUTES,StandardCopyOption.REPLACE_EXISTING);

Path src = Paths.get(“/home/fred/readme.txt”);Path dst = Paths.get(“/home/fred/readme.1st”);

Files.move(src, dst, StandardCopyOption.ATOMIC_MOVE);

Page 14: 55 New Things in Java 7 - Brazil

1414

Funcionalidade do Java NIO.2 –Classe Files

• Classe ajudante Files é uma ótima ferramenta para:• Copiar• Criar Diretórios• Criar arquivos• Criar Links• Usar a pasta temporária do sistema• Deletar• Atributos – Modificados/Proprietário/Permissões/Tamanho, etc.• Leitura/Escrita

Page 15: 55 New Things in Java 7 - Brazil

1515

Pastas com Java NIO.2

• DirectoryStream itera sobre entradas– Escala para pastas grandes– Usa menos recursos– Diminui o tempo de resposta para sistemas de arquivos remotos– Implementa Iterable e Closeable para prover produtividade

• Suporte a filtragem– Suporte embutido para glob, expressões regulares e filtros

personalizados.

Path srcPath = Paths.get(“/home/fred/src”);

try (DirectoryStream<Path> dir = srcPath.newDirectoryStream(“*.java”)) {

for (Path file : dir)System.out.println(file.getName());

}

Page 16: 55 New Things in Java 7 - Brazil

1616

Links simbólicos com Java NIO.2• Path e Files são“conscientes dos links”

Path novoLink = Paths.get(. . .);Path arquivoExistente = Paths.get(. . .);try { Files.createLink(novoLink, arquivoExistente);} catch (IOException x) { System.err.println(x);} catch (UnsupportedOperationException x) { //Alguns sistemas de arquivos ou configurações

//podem não suportar links System.err.println(x);}

Page 17: 55 New Things in Java 7 - Brazil

1717

Caminhando na árvore de arquivos com Java NIO.2

• A interface FileVisitor faz a caminhada sobre a árvore de arquivos para pesquisa ou outras atividades ser trivial

• SimpleFileVisitor implementa

preVisitDirectory(T dir, BasicFileAttributes attrs);visitFile(T dir, BasicFileAttributes attrs);visitFileFailed(T dir, IOException exc);postVisitDirectory(T dir, IOException exc);

AMOSTRA:Path diretorioInicial = ...;PrintFiles pf = new PrintFiles(); // SimpleFileVisitor sub

// visitFile(Path p, BasicFileAttributes bfa) {// System.out.println(file.getFileName());}

Files.walkFileTree(diretorioInicial, pf);

Page 18: 55 New Things in Java 7 - Brazil

1818

Vigiando um diretório com Java NIO.2

• Crie um observador WatchService para o sistema de arquivos

• Registre um diretório para o observador• “Observador” pode ser consultado ou esperar por

eventos• Eventos criados na forma de chaves (Keys)• Recuperar a chave (Key) de um Watcher• A chave tem o nome do arquivo e os eventos dentro dela

para adicionar/remover/atualizar• Capacidade de detecção de

estouro de eventos

Page 19: 55 New Things in Java 7 - Brazil

1919

Sistemas de arquivos personalizados com o NIO.2

• Classe FileSystems é factory para os ótimos FileSystem (interface)

• Java 7 permite o desenvolvimento de FileSystems personalizados, por exemplo:• Baseados em memória ou zip• Distribuídos e tolerantes a falhas• Substitutos ou suplementares ao provedor de sistemas de

arquivos padrão

• Dois passos:• Implementar java.nio.file.spi.FileSystemProvider 

• URI, Caching,Manipulação de arquivos, etc.• Implementar java.nio.file.FileSystem

• Roots, acesso de leitura e escrita, gravação de arquivos, etc.

Page 20: 55 New Things in Java 7 - Brazil

2020

Provedor de sistema de arquivos NIO.2 para arquivos zip/jar

Um provedor de sistemas de arquivos totalmente funcional e suportado no NIO.2 para arquivos zip e jar

Map<String, String> env = new HashMap<>();

env.put("create", "true");

// locate file system by using the syntax

// defined in java.net.JarURLConnection

URI u= URI.create("jar:file:/foo/zipfs/zipfstest.zip");

try (FileSystem z = FileSystems.newFileSystem(u, env)) {

Path externalTxtFile = Paths.get("/foo/zipfs/Sample.txt");

Path pathInZipfile = z.getPath("/Sample.txt");

// copy a file into the zip file

externalTxtFile.copyTo(pathInZipfile);

}

Page 21: 55 New Things in Java 7 - Brazil

2121

APIs de Concorrência JSR 166y - Phasers

• Phaser• Barreira similar ao CyclicBarrier e CountDownLatch• Usado por muitas threads para esperar por em ponto comum

• Por exemplo, uso para criar N Threads que você queira que faça simultaneamente algo comum – metáfora do “tiro de largada”

• Como o Phaser é um melhoramento?• Adição/remoção dinâmico de Dynamic add/remove de partes

para serem sincronizadas• Melhor prevenção de deadlocks• Contagem de chegada e opções de avanço de fase,etc• APIs para conclusão• Hierarquização (Estrutura de árvore)

• Melhor que sincronizar 100 threads sincronizar 2x50

Page 22: 55 New Things in Java 7 - Brazil

2222

APIs de Concorrência JSR 166y - TransferQueue

• Interface TransferQueue• Extension para BlockingQueue• Implementada por LinkedTransferQueue• Benefícios adicionais:

• Adiciona métodos:• transfer(E e), tryTransfer(E e), tryTransfer(E e, long timeout), hadWaitingConsumer(), getWaitingConsumerCount()

• Permite que filas mais inteligentes sejam construídas – avança a estrutura de dados se é conhecido que há consumidores esperando

Page 23: 55 New Things in Java 7 - Brazil

2323

Fork Join Framework - JSR 166y - Pools

• ForkJoinPool– Service para rodar ForkJoinTasks– aFjp.execute(aTask); // asincr– aFjp.invoke(aTask); // esperar– aFjp.submit(aTask); // async + future

– ForkJoinPool(); // padrão para platform– ForkJoinPool(int n); // # threads concorrentes– ForJoinPool(n,aThreadFactory,exHandler,FIFOtasks); // Crie seu próprio manipulador de threads, manipulador de exceções, e boolean na tarefa de ordenação (por padrão, LIFO)

Page 24: 55 New Things in Java 7 - Brazil

2424

Fork Join Framework - JSR 166y - Tasks

• ForkJoinTask– A classe abstrata base para:• RecursiveAction

– Uma tarefa recursiva resultless– Implementa método abstrato compute() para cálculos

• RecursiveTask– Similar ao RecursiveAction,

mas retorna um resultado

ForkJoinPool p = new ForkJoinPool(); MyTask mt = new MyTask(n); // implementA compute p.submit(mt);while (!mt.isDone()) {/*MENTIRA!*/ }System.out.println(mt.get());

Page 25: 55 New Things in Java 7 - Brazil

2525

Fork Join Framework - JSR 166y - compute()

• Exemplo de RecursiveAction para incrementar um arrayprotected void compute() {

if (hi - lo < THRESHOLD) {

for (int i = lo; i < hi; ++i) array[i]++; } else {

int mid = (lo + hi) >>> 1;

invokeAll(new IncrementTask(array, lo, mid),

new IncrementTask(array, mid, hi));}

• Exemplo de RecursiveTask example para a sequência de FIbonacciprotected Integer compute() {

if (n <= 1) return n;

Fibonacci f1 = new Fibonacci(n - 1);

Fibonacci f2 = new Fibonacci(n - 2);

f1.fork(); f1.fork();

return f2.join() + f1.join();}

Page 26: 55 New Things in Java 7 - Brazil

2626

Números randômicos concorrentes - JSR 166y

• Criação de números aleatórios existente torna-se fonte inconsitente de contenção entre threads em aplicativos simultâneos

• Esperados melhoramentos de RNG concorrentes com o advento do Fork Join Framework

• Classe java.util.ThreadLocalRandom•  ThreadLocalRandom.current().nextDouble(…)•  ThreadLocalRandom.current().nextInt (…)•  ThreadLocalRandom.current().nextLong(…)

Page 27: 55 New Things in Java 7 - Brazil

2727

JSR 166y – Classe ConcurrentLinkedDeque

• Filas duplamente ligadas baseadas em nós• Como uma Queue, mas permite a remoção de elementos

da frente e de trás

• Inserção concorrente, remove e acessa em múltiplas threads

• Iterators são fracamente consistentes

Page 28: 55 New Things in Java 7 - Brazil

2828

Melhoramento no ClassLoader – prevenção de Deadlock

Hierarquia de classes:

class A extends B ; class C extends D ;

Classloader personalizado CL1:

Carrega diretamente a classe A

delega ao ClassLoader personalizado CL2 p/ classe B

Classloader personalizado CL2:

Carrega diretamente a classe C

delega ao ClassLoader personalizado CL1 p/ classe D

Thread 1:

Usa CL1 para carregar a classe A (trava CL1)

defineClass A inicia loadClass B (tenta travar CL2)

Thread 2:

Usa CL2 para carregar a classe C (trava CL2)

defineClass C inicia loadClass D (tenta travar CL1)

ClassLoaders não eram “suficientemente

granulares”e propensos a

deadlock

Java 7 tem um “classloader paralelo”

(in SE 7 – lock CL1+A)

(in SE7 – lock CL2+B)

(in SE 7 – lock CL2+C)

(in SE7 – lock CL1+D)

Page 29: 55 New Things in Java 7 - Brazil

2929

Melhoramentos no URLClassLoader– close()// Criar um classLoader a partir do "foo.jar"

URL url = new URL("file:foo.jar");

URLClassLoader loader = new URLClassLoader (new URL[] {url});

Class cl = Class.forName ("Foo", true, loader);

Runnable foo = (Runnable) cl.newInstance();

foo.run();

loader.close ();

// foo.jar é atualizado de alguma forma

loader = new URLClassLoader (new URL[] {url});

cl = Class.forName ("Foo", true, loader);

foo = (Runnable) cl.newInstance();

// Executa a nova implementação de Foo

foo.run();

Page 30: 55 New Things in Java 7 - Brazil

3030

Unicode 4 -> Unicode 6.0

• Unicode é originalmente de 16 bit• 16 bits não é o suficiente para o Unicode 6, mas a

retrocompatibilidade deve ser mantida• Usar String “U+hex” para expressar caracter em Unicode • Unicode 6.0 adiciona milhares de caracteres• Suporte para propriedade e arquivos de dados (interessante

principalmente para glifos japoneses e scripts indi)• Suporte completo a expressões regulares com Unicode 6.0!

Page 31: 55 New Things in Java 7 - Brazil

3131

Códigos de moeda extensível (ISO 4217)

• ISO 4217 define códigos de moedas• Possibilidade de substituir a moeda padrão no arquivo <JAVA_HOME>/lib/currency.properties permite apoiar mudanças globais sem atualizar o Java

• Formato: Código do país ISO 3166 = Código da ISO 4217

# Exemplo do canada adotando dólar americano

# CA=CAD,124,2 é o código padrão da ISO 4217

CA=USD,840,2

Page 32: 55 New Things in Java 7 - Brazil

3232

Melhorias no Number Shaper• NumericShaper usado para mapear números para codificações não-

Latin (desde o 1.4)

• NumericShaper tradicionalmente usado como uma máscara de bits inteiros para o padrão• Bom quando havia somente 19 padrões

• No Java 7 temos 34 (> 32 bits!!)

• Java 7 agora tem Enum NumericShaper.Range

• Retrocompatibilidade mantida, novas APIs adicionadas para o uso de Enum quando solicitado

Page 33: 55 New Things in Java 7 - Brazil

3333

Melhoramento do Locale – Categorias

• Locale padrão pode ser modificado independentemente para formato de recursos (datas, números, moedas) e recursos de tela (menus e caixas de diálogo)

• Pode exemplo, uma aplicação para público japonês que lidam com transações financeiras dos EUA pode:

//Enum Locale.Category – DISPLAY e FORMATO//Padrão sem arg get/set é DISPLAYLocale.setDefault(DISPLAY, Locale.JAPAN);Locale.setDefault(FORMAT, Locale.US);

Page 34: 55 New Things in Java 7 - Brazil

3434

Melhoramento do Locale– BCP 47 Extensions• Java 7 confirms a IETF BCP 47 (ref UTS #35)

• Especifica as extensões de uma Locale (get/set)• Ex: de-DE-co-phonebk• Nenhuma garantia que a plataforma realmente estará

nessa extensão

Chave Descrição Exemplo Descrição do exemplo

cacalendar algorithm

ca-buddhist Calendário budista tailandês

co agrupamento co-pinyin Ordenação Pinyin para o Latino

k* parametros do agrupamento

kf-upper Donald antes do donald

cu Tipo da moeda cu-usd Dólar americano

nu Padrão numérico nu-jpanfin Números financeiros japoneses

tz Fuso tz-aldav Europa/Andorra

vaTipo de variante comum

va-posix Estilo de localidade POSIX

Page 35: 55 New Things in Java 7 - Brazil

3535

Look and Feel Nimbus

• Look-and-feel multiplataforma melhor que o Metal;• Introduzido no Java SE 6u10, agora parte do Swing• Não é o L&F padrão• Implementação escalável Java 2D• Scalable Java 2D impl

Page 36: 55 New Things in Java 7 - Brazil

3636

Componente JlayerFácil enriquecimento de componentes Swing

//Coloque seu componente dentro de um JLayerJLayer<JPanel> layer = new JLayer<JPanel>(panel);//Interface customizada provê todas funcionalidades extraslayer.setUI(myLayerUI);// adicionar a interface como um componente comumframe.add(layer);

Page 37: 55 New Things in Java 7 - Brazil

3737

Mistura de AWT e Swing – Funciona*

• Na 6u12 e 7u1, há algumas ressalvas para barras de rolagem

Page 38: 55 New Things in Java 7 - Brazil

3838

Janelas translúcidas

• API privada adicionada na 6u10, agora público no Java 7• Suporte (baseado na plataforma) para:

• Translucidez uniforme;• Translucidez por pixel• Transparência por pixel

// Uniforme e simples:

aWindow.setOpacity(0.5f);

// Por pixel g2d é a g2d de um Jpanel sobre o paintComponent(g)

Paint p = new GradientPaint(0.0f, 0.0f, new Color(R, G, B,0), 0.0f, getHeight(), new Color(R, G, B, 255), true);

g2d.setPaint(p);

g2d.fillRect(0, 0, getWidth(), getHeight());

Page 39: 55 New Things in Java 7 - Brazil

3939

Renderização Java 2D baseada no Xrender para o X11 moderno

• Performance gráfica melhorada.• Desligada por padrão (compatibilidade com versões

anteriores)

• Tranquilo:

-Dsun.java2d.xrender=true

• Verboso (log na saída padrão para sucesso ou fracasso)

-Dsun.java2d.xrender=True

Page 40: 55 New Things in Java 7 - Brazil

4040

Fontes OpenType/CFF

• Plataforma Java precisa suportar fontes TrueType, outras tecnologias de fonte são dependentes de implementação

• Java 7 adiciona suporte para “Compact Font Format” - OpenType/CFF.

Page 41: 55 New Things in Java 7 - Brazil

4141

Melhor suporte para as fontes do Linux

• Cinco fontes desde o Java 1.0:• Serif, Sans-serif, Monospaced, Dialog e

DialogInput• Deve mapear a fonte física no seu sistema

• Sem consistência em fontes no Linux• É necessário editar fontconfig.properties• Java 7 no Linux (e Solaris 11) usa a

“libfontconfig” do sistema, refletindo o que as aplicações Desktop Gnome/KDE utilizam

Page 42: 55 New Things in Java 7 - Brazil

4242

Abas HSV/HSL na classe JColorChooser

Page 43: 55 New Things in Java 7 - Brazil

4343

JDBC 4.1• “Try-with-resources” automaticamente fecha recursos dos tipos

Connection, ResultSet e Statement

try (Statement stmt = con.createStatement()) { // ... }

• RowSet 1.1 introduz RowSetFactory e RowSetProvider

/*Factory com opções determinadas na linha de comando ou metainf */

myRowSetFactory = RowSetProvider.newFactory();

jdbcRs = myRowSetFactory.createJdbcRowSet();

jdbcRs.setUrl("jdbc:myDriver:myAttribute"); //etc

jdbcRs.setCommand("select CAF_NAME, SUP_ID, PRECO, VENDAS, TOTAL from CAFES");

jdbcRs.execute();

Page 44: 55 New Things in Java 7 - Brazil

4444

Java DB Enhancements (Derby)

• JDK 7 inclui Java DB 10.8.1.2• Novidades desde o JDK 6

• Tipo de dados BOOLEAN • Truncamento de tabelas• Navegação em Query plans

• Cálculo automático das estatísticas dos índices • Nomes de banco de dados em Unicode• Tratamento de interrupções melhorado

• Agora pode interromper threads de conexão• Otimização MAX (Mais rápido!)

Page 45: 55 New Things in Java 7 - Brazil

4545

Incorporação do arquivo JNLP na tag do Applet

• Economiza uma requisição na rede quando o applet é carregado na primeira vez

• Base64 codifica o conteúdo do JNLP em uma chamada Javascript:

<script src="http://www.java.com/js/deployJava.js"></script>

<script>

var attributes = {} ;

<!-- Base64 encoded string trunc’d below for readability --> var parameters = {jnlp_href: 'dynamictree-applet.jnlp',

jnlp_embedded: 'PCEtLSAKLyoKICogQ29weX ... HA+Cg==' } ; deployJava.runApplet(attributes, parameters, '1.7');

</script>

Page 46: 55 New Things in Java 7 - Brazil

4646

<script>

function registerAppletStateHandler() {

switch (drawApplet.status) {

case 1: <!–- applet is loading -->

drawApplet.onLoad = onLoadHandler;

case 2: <!–- applet is loaded -->

case 3: <!–- error -->

document.getElementById("mydiv")

.innerHTML =“No need to onload";

}

}

Capacidade de detectar o estado de inicialização de um applet no seu carregamento

<!–- assume java.com/js/deployJava.js is loaded ->

var parameters = {java_status_events: 'true'};

<!–- set other params like jnlp->

deployJava.runApplet(attributes, parameters, '1.7');

...

</script>

function onLoadHandler(){

document.

getElementById("mydiv“)

.innerHTML =

"Applet has loaded";

draw();

}

Page 47: 55 New Things in Java 7 - Brazil

4747

“Decoração arrastável” do Applet

• Aspectos gráficos do Applet se aplicam igualitariamente nas execuções dentro e fora do browser – sem bordas, etc.

Page 48: 55 New Things in Java 7 - Brazil

4848

Outra variedade de coisas do JNLP que são novidades…

• JNLP parcialmente assinado• Simplifica o build e implantação em alguns cenários• Arquivo JNLP externo pode diferir de um • Arquivo JNLP externo pode diferir de um recurso embutido

no jar

• Direcionamento de recursos para uma versão de SO<resources os="Windows\ Vista Windows\ 7"> <jar href=“legacySound.jar"/> </resources>

• Melhores “preferências de instalação de aplicações• Por exemplo, atributo para determinar se a aplicação

aparecerá no painel de “Adicionar ou remover programas”

Page 49: 55 New Things in Java 7 - Brazil

4949

Máquina virtual: Atualização para um GC experimental – G1

• Garbage First - “G1” destinado a substituir* Concurrent Mark-Sweep (CMS) na Hotspot em um release próximo

• G1 está incluído para experimentação no Java 7• Principais benefícios:

• Mais previsibilidade “soft real-time” – configuração temporal• Alta taxa de transferência (Throughput);

• Básico:• Heap particionado em regiões de mesmo tamanho• Compacto como procede – olha para regiões sem objetos

alocados para recuperação imediata

*não é uma declaração oficial para o futuro

Page 50: 55 New Things in Java 7 - Brazil

5050

VM: Compilação em camadas

• Hotspot tem 2 “cliente” and “servidor” do JIT• Cliente inicia rapidamente, mas deixa algumas otimizações

– melhor para clientes• Servidor• Servidor inicia mais devagar, mas provê melhores

otimizações• Java 7 adiciona Compilação em camadas• Trabalhe com JIT primeiro no cliente e, se tivercom bom

código, recompile com o servidor• Estava aí já há algum tempo,mas sem uma boa

implementação

-server -XX:+TieredCompilationImagem de Rémi Forax showing the DaCapo Jython benchmark.

http://www.java.net/blogs/forax

Page 51: 55 New Things in Java 7 - Brazil

5151

VM: OOPS Comprimida por padrão

• A ida de sistemas 32bit para 64bit vai aumentar o heap em ~1.5x simplesmente por causa de maiores ponteiros de objetos

• Memória é barata, mas largura de banda e cache não• OOPS comprimida:

• Ponteiros gerenciados de 32 bits (tamanho de heap similar para aplicações 32/64 bit)

• Scaled (8 x 4GB pedações) adicionados a base

64 bit

• Útil para heaps maiores que 32 GB• Compressed OOPS vai ser desligado quando

–Xmx > 32g

Page 52: 55 New Things in Java 7 - Brazil

5252

VM: invokedynamic ilustradathis[method_name](x, y)

invokedynamic [#bootstrapMethod] .this_method_name

class LangaugeRuntime {bootstrapMethod(info) {

...return new CallSite();

}

class AClass {aMethod(x, y) {

...}

CallSite

MethodHandle

1. Invoca bootstrap

2. ProduzCallSite

3. Linkagem completa

4. Invoca a implementação do

códigio

Page 53: 55 New Things in Java 7 - Brazil

5353

Melhoramentos na tecnologia Java XML

• JAXP 1.4.5• Resoluções de bug e melhoramentos de performance

• JAX-WS 2.2.4• Resoluções de bug e melhoramentos de performance

• JAXB 2.2.3• Resoluções de bug e melhoramentos de performance

Page 54: 55 New Things in Java 7 - Brazil

5454

Elliptic Curve Cryptography (ECC)

• Novo provider nativo adicionado ao JDK7• Algoritmos baseados no ECC (ECDSA/ECDH)• Permite extensão de Java Secure Sockets Extension

(JSSE)baseados no ECC• Comparado a criptografia tradicional, sistemas como

RSA, ECC oferecem segurança equivalente:• Com tamanhos menores• Com tamanhos de chave menores• Computacões mais rápidas• Pouco poder de consumo• Economia de memória e banda

Page 55: 55 New Things in Java 7 - Brazil

5555

Atualizações no Transport Layer Security (TLS)

• Suporte ao TLS 1.1• Proteção contra ataques encadeados

• Suporte a TLS 1.2• Renegociação TLS• CertPath e TLS algorithm incapacitante

• Pode negar algoritmos específicos no processamento de caminho e handshaking

Page 56: 55 New Things in Java 7 - Brazil

5656

Melhoramentos do JavaDoc no Java 7

• Section 508 com guia de acessibilidade• Legendas, títulos,etc

• Anteriormente, Javadoc era escrito em um OuputStream ao mesmo tempo que o documento era construído sequencialmente, impondo limitações

• Agora usa classes internas da “HTMLTree”• Gera código em conformidade com HTML• Permite mais avanços no futuro

• Remove limitações de só ser capaz de executar uma vez em qualquer máquina virtual• Era bom quando executado como uma ferramenta de linha de

comando• Integração contínua,etc, gerou a necessidade de se preocupar com

isso

Page 57: 55 New Things in Java 7 - Brazil

5757

CSS para JavaDoc - stylesheet.css

Page 58: 55 New Things in Java 7 - Brazil

5858

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Page 59: 55 New Things in Java 7 - Brazil

5959

59

Stephen [email protected]: @steveonjava

Obrigado!

Desconto especial de 40% para o JustJava. Entre em apress.com e digite o código PJVF73