Beruflich Dokumente
Kultur Dokumente
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.
No Java 6 j vem um exemplo de Web services que copiado para o diretrio JAVA_HOME\sample\webservices
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.
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.
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.
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.
4. Se o engine implementa a interface Invocable, usando invoke possvel chamar o mtodo do script.
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.
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.
Modificao em java.nio
Classe java.nio.channels.FileLock agora checa se os arquivos esto bloqueados por outra instncia de FileChannel
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()
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
Mtodos para vises: descendingMap(), descendingKeySet(), subMap(K, boolean, K, boolean), headMap(K toKey, boolean inclusive), tailMap(K fromKey, boolean inclusive)
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.
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