Sie sind auf Seite 1von 44

No seja atropelado pelo Mustang

Luiz Arnaldo de Gusmo Bastos (Luca)


lucabastos@gmail.com

Novidades do Java 6 JustJava 2006

Resumo das novidades


Modificaes e melhorias: gerenciamento e monitoramento, segurana, melhorias no desktop, alterao pequenina mas importante em java.nio (lock de FileChannel) mudanas em Collections, JDBC 4, concorrncia, java.lang, java.util, java.io, etc. Novidades modo de desenvolvimento aberto novas Collections Web services, API de XML, compilar "on the fly, misturar scripts com cdigo Java, agora vem um banco de dados junto com a distribuio do Java. novos demos e exemplos, inclusive um servidor http

Pgina do projeto JDK 6:


https://jdk6.dev.java.net/

Pgina para download do Java 6:


http://download.java.net/jdk6/

Onde conferir todas quais so as novidades:


http://java.sun.com/javase/6/webnotes/features.html

Modo de desenvolvimento aberto


Builds semanais disponveis para a comunidade O Java 6 foi desenvolvido de maneira totalmente indita permitindo a participao de gente do mundo inteiro atravs de feedback em artigos, blogs e no frum da Sun.

Foi o primeiro passo na direo Open Source

10 novidades que mais me chamaram a ateno


1. Web services 2. Incluso de novas APIs de XML 3. Banco de dados 4. Interface grfica, AWT e Swing, look and feel compatvel com a plataforma. 5. Monitorao e gerenciamento. 6. Processamento de anotaes 7. Acesso ao compilador 8. Scripts no meio do Java 9. Segurana 10. API bsicas, java.lang, java.util, java.io, java.net, etc.

1. Web services
Agora se pode expor Web services com anotaes. Simples assim:
import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.WebMethod; @WebService @WebService public class AloService {{ public class AloService @WebMethod @WebMethod public String aloJustJava () {{ public String aloJustJava () return ""Alo,JustJava"; return Alo, JustJava"; }} }}

Identifica a classe AloService como um Web service Identifica o mtodo AloJustJava como um servio

Depois de compilar, se executa wsgen AloService.class na linha de comando. Esta ferramenta gera artefatos portteis JAX-WS usados em Web services JAX-WS. Ela l uma classe web service endpoint e gera todos os artefatos necessrios para o deployment e chamada do Web service. Por default, wsgen no gera um arquivo WSDL mas h a opo -wsdl para isto.

Mais sobre Web services


Foram includas 3 APIs relacionadas com Web services: Web services Metadata for the Java Plataform with JSR 181 Java API for XML-Based Web Services (JAX-WS) 2.0 via JSR 224 SOAP with attachements (SAAJ) 1.3 como parte da JSR 67 Exemplo de SAAJ
SOAPMessage msg = MessageFactory.newInstance().createMessage(); AttachementPart attachement = msg.createAttachmentPart(); attachement.setContent(textContent, text/plain); msg.addAttachementPart(attachement);

No Java 6 j vem um exemplo de Web services que copiado para o diretrio JAVA_HOME\sample\webservices

2. Incluso de novas APIs de XML


Para manipular a diretamente o XML, o Java 6 inclui 3 novas APIs que fazem parte do Java EE e do Java Web Services Pack. So elas: Java Architecture for XML Binding (JAXB) 2.0 mapeia JavaBeans para XML e vice versa alm de outras coisas mais XML digital signatures - como assinar documentos XML e como validar a assinatura Streaming API for XML (StAX) l e escreve XML StAX um parser como SAX mas que retira eventos do parser ao invs de receb-los como o SAX. Gasta menos memria e tem melhor desempenho do que os parsers baseados em DOM ou SAX. Ao contrrio do SAX, permite de criar um XML. E se pode tambm interromper o parsing e pular pedao caso necessrio.

3. Banco de dados Java DB baseado no Apache Derby


O JDK agora instala um banco de dados em JAVA_HOME\db Ser que foi para facilitar a criao de aplicaes do tipo CRUD com Swing? Se for verdade seria uma aula de como NO se desenvolver sistemas. Facilidades do novo JDBC 4.0 com suporte a SQL2003: Suporte a XML como um tipo SQL. Melhor integrao de BLOBs e CLOBs na API. Localizao do driver em META-INF/services permite criar a conexo em uma linha s com DiverManager.getConnection() sem Class.forName() Melhorias no tratamento das excees

Mais sobre o banco de dados Java DB


Facilidades do novo JDBC 4.0 (continuao): Interface RowId para o tipo ROWID do SQL. PreparedStatement, CallableStatement e ResultSet tem mtodos getRowId e setRowId. Uso de anotaes que agora permite coisas como: @Query(sql="select * from user")

Observao triste: DataSet e tudo que fazia parte do chamado JDBC EoD (Ease of Development) foi retirado no build 101 do Java 6 por falta de tempo de estabilizar at o lanamento da verso final.

4. Interface grfica, AWT e Swing, Look and feel


Muitas novidades na interface grfica: AWT: Splash screen, system tray, dilogos modais com 3 opes, criao de imagens GIF, text antialiasing, novas constantes na classe Font, MouseEvent agora pega coordenadas absolutas x e y, etc.

Interface grfica - Swing e Look and feel


Novidades na interface grfica (continuao): Swing: Melhorias em JTable permitindo sort e filtros, melhoria em SwingWorker, JTabbedPane com TabComponent, simplificao na impresso de componentes texto subclasses de JTextComponent tais como JTextField, JTextArea e JTextPane, melhorias no suporte a drag-and-drop, nova classe TableStringConverter para converter clulas de TableModel para String, full double buffering com novos mtodos em RepaintManager para isto, etc. H diversas melhorias na Look and feel nativo de cada plataforma fazendo o JFC/Swing coincidir exatamente com o look and feel do Windows e do GTK.

5. Monitorao e gerenciamento
Problemas como memory leaks, deadlocks e falhas de sincronizao so sempre difceis de descobrir. Agora h mais recursos para monitorar e gerenciar o comportamento das aplicaes e descobrir mais facilmente os problemas. Ferramentas disponveis:
Falta de memria Memory leak Objetos pendentes de finalizao Deadlocks Thread em loop ou que segura recursos Java Heap Analysis Tool (jhat) Java Monitoring and Management Console (jconsole) Memory Map (jmap) jconsole jmap jconsole Stack Trace (jstack) jconsole (junto com JTop)

Estas ferramentas podem ser usadas com qualquer aplicao sem precisar inici-las com parmetros ou modos especiais.

Ferramentas de Monitorao e gerenciamento


Jconsole (j existia no Java 5 um pouco mais limitado) Console de monitorao e gerenciamento de vrios recursos da VM em tempo de execuo. Pode ser conectado a uma aplicao rodando localmente ou em outra mquina. Mostra as seguintes informaes: Uso da memria e atividade do garbage collector Thread state, thread stack trace e locks Nmero de objetos pendentes para finalizao Tempos consumidos pelos processos (total e de CPU) Argumentos de entrada para a VM e o classpath

Outras ferramentas de Monitorao e gerenciamento


jmap Mostra um histograma da heap e faz um dump dela em tempo de execuo. jhat Permite analisar o dump da heap jstack Mostra um stack trace de threads

Mais ferramentas de Monitorao e gerenciamento


Alm das ferramentas anteriores que ficam no diretrio bin do JAVA_HOME, no diretrio JAVA_HOME\demo\management h outras que valem a pena ser experimentadas. . Jtop Monitora o uso da CPU de todas as threads em uma aplicao remota com gerenciamento remoto habilitado. Demonstra a API java.lang.management API. Pode ser usado como um plugin de jconsole. MemoryMonitor Demonstra o uso da API java.lang.management API para o consumo de memria. VerboseGC Demonstra o uso da API java.lang.management API para mostrar estatsticas sobre a GC e a memria usada por aplicaes remotas conectadas por um agente JMX. FullThreadDump Demonstra o uso da API java.lang.management API para fazer um dump total das threads.

6. Processamento de anotaes
As anotaes vieram com Java 5 mas agora com Java 6 e JEE 5 esto abrindo enormes possibilidades para o Java. H um monte de novas anotaes do Java 6 como por exemplo as de Web services Desenvolvedores comuns em geral no precisam escrever anotaes mas saber como fazer um diferencial. O processamento das anotaes feito pela ferramenta APT

7. Acesso ao compilador
JSR 199 Agora h uma API para usar o compilador dentro do Java Pode ser usado para compilar arquivos ou trechos de cdigo na memria Os erros de compilao tambm podem ser interpretados. A API bem simples e fcil de usar.

8. Scripts no meio do Java JSR 223


O que se pode fazer alm de acessar os scripts com jrunscript: 1. Eval de scripts
ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByName(javascript); Double hora = (Double) engine.eval(var date = new Date(); + date.getHours(););

2. Se pode passar objetos Java para os scripts e pegar objetos do script usando os mtodos put e get do engine que implementa a interface ScriptEngine.

Scripts no meio do Java


O que se pode fazer (continuao) 3. possvel pr compilar os scripts para melhorar o desempenho.
If (engine instanceof Compilable) { Compilable comp = (Compilable) engine; CompiledScript script = comp.compile(function hora() {var date = new Date(); return + date.getHours();}; hora();); Double hora = (Double) script.eval(); }

4. Se o engine implementa a interface Invocable, usando invoke possvel chamar o mtodo do script.

Mais sobre scripts no meio do Java


Em C:\jdk1.6.0\sample\scripting\scriptpad h um exemplo de console para executar scripts que basta compilar usando o ant

Mais sobre scripts no meio do Java


Em C:\jdk1.6.0\sample\scripting\scriptpad h um exemplo de console para executar scripts que basta compilar usando o ant

Mais sobre scripts no meio do Java


Em C:\jdk1.6.0\sample\scripting\scriptpad h um exemplo de console para executar scripts que basta compilar usando o ant

9. Segurana
Java XML Digital Signature API API para suporte de Smart Card I/O. Acesso a PKI nativa e servios criptogrficos no Windows. Provider JCE (SunMSCAPI) usando a CryptoAPI (CAPI) da Microsoft. Criptografia de curva elptica Suporte aos tipos de encriptao Kerberos AES e RC4-HMAC.

Mais sobre segurana


Integrao nativa com a plataforma em GSS(Generic Security Services)/Kerberos, suporte a SPNEGO no Java GSS, suporte ao novo mecanismo de pr autenticao Kerberos Autenticao JAAS usando LDAP. JSSE com menos restries de plugabilidade, corrigidos os Socket read timeouts de SunJSSE SSLSockets. Melhorias na implementao de PKI Certificate Path Builder and Validator.

10. API bsicas, java.lang, java.util, java.io, java.net + modificaes diversas


Entrada e sada em console: mtodo System.console() retorna um java.io.Console que prov suporte a leitura e escrita no console trabalhando com Reader e Writer
public class ImprimeConsole { public static void main (String [] args) { String coracao = "corao"; System.out.println(coracao); System.console().printf("%s%n", coracao); } } C:\JustJava2006\src>java ImprimeConsole corao corao C:\JustJava2006\src>

Novo mtodo de String: isEmpty()

Usando java.io.Console para ler senhas no console


Alm do printf, nova classe java.io.Console tem 2 mtodos interessantes: String readLine() L uma linha de texto do console (pode ter formato). char[] readPassword() - L uma senha sem ecoar no console (idem).
import java.io.Console; public class SenhaConsole { public static void main (String [] args) { Console console = System.console(); console.printf("Entre nome: "); String nome =console.readLine(); char[] senha = console.readPassword("Entre senha: "); console.printf("Nome: %s\tSenha: %s%n", nome, new String(senha)); } } C:\JustJava2006\src>java SenhaConsole Entre nome: Luca Bastos Entre senha: Nome: Luca Bastos Senha: justjava C:\JustJava2006\src>

Class-Path Wildcards
Antes:
#! /bin/bash LIB=$(dirname $0)/../lib CP=$LIB/foo.jar:$LIB/bar.jar:$LIB/baz.jar java -classpath $CP com.xyzzy.app.Main

Java 6
java -classpath $LIB/'*' com.xyzzy.app.Main

Obs.: O wildcard somente atende arquivos jar, no localiza arquivos .class no mesmo diretrio.

Novo formato do arquivo class


O Java SE 6 inclui um novo esquema de verificao mais simples e mais rpido. Ento foi criado um novo formato para o arquivo .class para suportar este esquema. Por padro o compilador Java gera os arquivos para o novo esquema de verificao (class file version 50.0). Isto afetar os desenvolvedores de cdigo que faz manipulao de byte code. Para mais informaes consultar: https://jdk.dev.java.net/verifier.html.

Acesso a interface de rede


O Java SE 6 prov acesso aos parmetors de rede via 10 novos mtodos na classe java.net.NetworkInterface class e pela nova classe java.net.InterfaceAddress class. Entre os mtodos da nova classe NetworkInterface temos: public byte[] getHardwareAddress() retorna o MAC address

Modificao em java.nio
Classe java.nio.channels.FileLock agora checa se os arquivos esto bloqueados por outra instncia de FileChannel

Core libraries java.util novas Collections


Cpias de arrays Colees bi direcionais Deque Colees navegveis interfaces NavigableMap e NavigableSet SkipLists Obter um Set que tenha um Map por trs

Cpias de arrays
Antes do Java 6 era possvel converter um array em um List, orden-lo, fazer busca binria, verificar igualdade, gerar um hash code e mostrar seus elementos dentro de uma String separados por vrgulas. Antes do Java 6, para copiar um array s havia a alternativa de usar: System.arraycopy(Object src, int srcPos, Object dest, int destpos, int length) Precisava alocar espao para o novo array antes de usar este mtodo esttico. Antes: int[] newArray = new int[newLength]; System.arraycopy(oldArray, 0, newArray, 0, oldArray.length); Agora seus problemas acabaram! int[] newArray = Arrays.copyOf(a, newLength); H verses do mtodo copyOf() para cada um dos primitivos e mais uma para objetos: static <T> T[] copyOf(T[]original, intnewLength) Se pode copiar tambm apenas uma parte dos arrays usando copyOfRange() que tambm verses anlogas s de copyOf()

Interface Deque extends Queue = double ended Queue


Um vetor que suporta insero e remoo por ambos os lados. Exemplo de uso: Fila do Drive-Thru do McDonalds: entra no final, sai ainda no fim (quando desiste) ou no incio mas no sai no meio. Tem mtodos para inserir, remover e examinar os elementos, cada um deles com 2 formas: uma lana uma exceo em caso de falha e a outra retorna um valor null ou false dependendo da operao.
Primeiro elemento Lana exceo Inserir Remover Examinar addFirst(e) removeFirst() getFirst() Retorna valor offerFirst(e) pollFirst() peekFirst() ltimo elemento Lana exceo addLast(e) removeLast() getLast() Retorna valor offerLast(e) pollLast() peekLast()

As implementaes so usadas tambm para filas e stacks

Implementaes de Deque
ArrayDeque = array que pode ser redimensionado sem ser thread safe. Implementao bsica de Deque e muito rpida ( um buffer circular) LinkedList = agora tambm implementa Deque LinkedBlockingDeque = uma BlockingDeque linkada A sub interface: BlockingDeque uma Deque que espera que um elemento exista para retirar e por espao quando armazenar. Funciona bem com concorrncia.

Colees navegveis
Incluem mtodos que sempre deveriam ter existido Essencialmente adicionam opes de busca s interfaces SortedXxx NavigableSet extends SortedSet NavigableMap extends SortedMap Elas podem ser acessadas tanto na forma ascendente como descendente Dica: Use NavigableXxx ao invs de SortedXxx nos novos projetos A classe TreeSet agora implementa NavigableSet A classes TreeMap agora implementa NavigableMap

Interface NavigableSet mtodos para navegao


// Retorna o menor elemento >= que o elemento dado ou null E ceiling(E e); // Retorna o menor elemento > que o elemento dado ou null E higher(E e); // Retorna o maior elemento <= que o elemento dado ou null E floor(E e); // Retorna o maior elemento < que o elemento dado ou null E lower(E e); // Pega e remove o primeiro (menor) elemento ou null (Set vazio) E pollFirst(); // Pega e remove o ltimo (maior) elemento ou null se o Set est vazio E pollLast();

Interface NavigableSet mtodos para obter vises


// Returna uma viso descendente do conjunto NavigableSet<E> descendingSet(); // Returna viso: fromElement -> toElement NavigableSet<E> subSet(E fromElement, boolean fromInc, E toElement, boolean toInc); // Returna viso: <beginning> -> toElement NavigableSet<E> headSet(E toElement, boolean inclusive); // Returna viso: fromElement -> <end> NavigableSet<E> tailSet(E fromElement, boolean inclusive); // Returna iterator na ordem descendente Iterator<E> descendingIterator();

Interface NavigableMap anloga a NavigableSet


Abaixo como retorno entenda-se entrada por um Map.Entry e chave por K ceilingEntry(K key), // Retorna a menor entrada >= chave dada ou null ceilingKey(K key) // Retorna a menor chave >= chave dada ou null higherEntry(K key), higherKey(K key) floorEntry(K key), floorKey(K key) lowerEntry(K key), lowerKey(K key) firstEntry(), pollFirstEntry() lastEntry(), pollLastEntry() // Retorna a menor entrada > chave dada ou null // Retorna a menor chave > chave dada ou null // Retorna a menor entrada <= chave dada ou null // Retorna a menor chave <= chave dada ou null // Retorna a menor entrada < chave dada ou null // Retorna a menor chave < chave dada ou null // Pega a primeira entrada (menor) ou null // Pega e remove a primeira entrada (menor) ou null // Pega a ltima entrada (maior) ou null // Pega e remove a ltima entrada (maior) ou null

Mtodos para vises: descendingMap(), descendingKeySet(), subMap(K, boolean, K, boolean), headMap(K toKey, boolean inclusive), tailMap(K fromKey, boolean inclusive)

Interface NavigableMap mtodos para obter vises


// Returna uma viso descendente do conjunto NavigableSet<E> descendingSet(); // Returna viso: fromElement -> toElement NavigableSet<E> subSet(E fromElement, boolean fromInc, E toElement, boolean toInc); // Returna viso: <beginning> -> toElement NavigableSet<E> headSet(E toElement, boolean inclusive); // Returna viso: fromElement -> <end> NavigableSet<E> tailSet(E fromElement, boolean inclusive); // Returna iterator na ordem descendente Iterator<E> descendingIterator();

SkipLists
O que so: Estruturas de dados que podem ser usadas como alternativa a uma rvore binria balanceada (B-tree). Usam um algoritmo randomizado de insero que por ser mais simples do que o de balanceamento das B-trees, permitem insero, busca e remoo mais rpidas na ordem de O(logn). Foram criadas por Bill Pugh em 1990. Como est implementado no Java 6: H 2 novas interfaces com implementaes usando SkipList: ConcurrentNavigableMap extends ConcurrentMap e NavigableMap Implementao de SkipList: ConcurrentSkipListMap ConcurrentNavigableSet extends NavigableSet Implementao de SkipList: ConcurrentSkipListSet uma estrutura de dados nova dentro do Java Collections Framework Implementao mais fcil, usa pouca memria, no faz rebalanceamento mas o uso de nmero randmico que pode significar um debug mais difcil.

Obter um Set que tenha um Map por trs


Collections.newSetFromMap O JDK no fornece uma classe IdentityHashSet porm Set<Object> identityHashSet = Collections.newSetFromMap( new IdentityHashMap<Object, Boolean>()); Observaes: 1. O exemplo acima apenas uma curiosidade j que a classe IdentityHashMap que usa == para comparar as chaves, viola o contrato geral da classe Map que exige o uso do equals para comparar as chaves 2. H agora uma nova classe AbstractMap.SimpleEntry que simplifica o processo de criar um Map customizado. Antes era necessrio desenvolver uma nova Map.Entry e agora se tem esta AbstractMap.SimpleEntry que uma implementao concreta de Mao.Entry

Conselhos finais
Examinem e testem os demos, os exemplos e SkipList

Conselhos finais
Examinem e testem os demos, os exemplos e SkipList Migrem o mais rpido que puderem porque h ganhos de desempenho

Obrigado, duvidas?

lucabastos@gmail.com

Das könnte Ihnen auch gefallen