Primeiros passos com o Java Development Kit 7

Java Development Kit  7

    Demorou, mas enfim chegou o tão esperado “JDK 7”, fazia tempo que queria postar essa notícia, mas só agora que chegou o grande dia. Foram cinco anos de desenvolvimento, muitas brigas, mudanças de nomes, JSRs com votações contra, tudo indo contra a maré, cheguei até a ver na internet notícias como:  “Fim do Java” ! Pode isso ?  
   Falando sobre esta release, queria dizer a todos que sinceramente esperava muito mais, principalmente pelo tempo em que a mesma teve para ser produzida. Dica-se de passagem ainda tenho a visão de que, de todas as JDKs a 1.5 ainda foi a mais impactante. Mesmo assim, separei logo abaixo, alguns exemplos e links interessantes sobre esta release.
JDK 7 Features Summary

    Neste link você encontra um sumário das novidades desta release.

Improved Exception Handling – Multi-Catch ( JSR 334 )

    Um coisa interessante da JDK 7, é a possibilidade de se utilizar o simbolo pipe:  para capturar um conjunto de exceções, conforme código a seguir :   

try {


   final Class clazz = Class.forName(className);
   final Class[] ctorParams = {String.class, String.class, Integer.TYPE};
   final Constructor ctor = clazz.getConstructor(ctorParams);
   final Person person = (Person) ctor.newInstance(newLastName, newFirstName, newAge);
   final Method toStringMethod = clazz.getDeclaredMethod(methodName);
   out.println(toStringMethod.invoke(person));


}catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException|  InvocationTargetException | InstantiationException reflectionEx){


     err.println( “Reflection error trying to invoke ” + className + “.”  + methodName + “: ” + reflectionEx);


}

Strings in Switch

     Agora ja é possível  utilizar uma variável do tipo String em instruções do tipo Switch, conforme o exemplo abaixo:

      public static void main(final String[] arguments){

      final String name =  “Dustin”;
 
      switch (name) {

         case “Dino” :
            out.println(“Flintstones?”);
            break;
         case “Neo” :
            out.println(“Matrix?”);
            break;
         case “Gandalf” :
            out.println(“Lord of the Rings?”);
            break;
         case “Dustin” :
            out.println(“Inspired by Actual Events”);
            break;
         default :
            out.println(“The Good, the Bad, and the Ugly?”);
      }


   }
  

Binary integral literals and underscores in numeric literals   

   Conforme o exemplo a seguir, ja é possível criar variaveis do tipo inteiro, utilizando underscores, parece uma coisa bem simples, mas quando vc trabalha com números binários muito grandes, você percebe que isso ajuda e muito.
    Imagina o número:
  int maxInteger = 0b01111111111111111111111111111111; 
     No JDK 7, ele é melhor representado separado por undescores, dessa forma:
    
   int maxInteger = 0b0111_1111_1111_1111_1111_1111_1111_1111;

 
Try With-Resources Statement

     Muitos que trabalham com Java a mais tempo ja devem ter notado o quanto é difícil e chato trabalhar com recursos que necessitam de fechamento explicito. ( Conexao de Banco, Arquivos e etc )
     Um exemplo disso é o código logo abaixo, percebam o quando de código extra foi necessario, apenas para fechamento de recursos.

private static void customBufferStreamCopy(File source, File target) {

    InputStream fis = null;
    OutputStream fos = null;

    try {

        fis = new FileInputStream(source);
        fos = new FileOutputStream(target);

        byte[] buf = new byte[8192];

        int i;

        while ((i = fis.read(buf)) != -1) {
         fos.write(buf, 0, i);
        }

   }catch (Exception e) {

        e.printStackTrace();

   } finally {

         close(fis);
         close(fos);
   }
}

private static void close(Closeable closable) {

     if (closable != null) {

         try {

             closable.close();
         } catch (IOException e) {
             e.printStackTrace();
         }

      }

}

     Agora nesta nova versão, todos os recursos são automaticamente fechados, após a execução do bloco Try, sendo assim, o código anterior pode ser substituido por este:

private static void customBufferStreamCopy(File source, File target) {

    try (

        InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target)){

        byte[] buf = new byte[8192];

        int i;

        while ((i = fis.read(buf)) != -1) {
           fos.write(buf, 0, i);
        }
    }catch (Exception e) {
        e.printStackTrace();
    }

}


Simplified Varargs Method Invocation
    Quando um programador tenta invocar um método “varargs” com um “non-reifiable varargs type”, o compilador atualmente gera o  warning: “unsafe operation”, o JDK 7 moveu o warning da chamáda para o método e colocou na propria declaração do mesmo, dessa forma, segundo o criador da proposta isso reduz os warnings reportados, vide a proposta.

     Antes da mudança
  

  static List asList(T… elements) { … }

  static List<callable> stringFactories() {

    Callable a, b, c;

    …

    *// Warning: **”uses unchecked or unsafe operations”*
    return asList(a, b, c);

  }</callable

     Depois da mudança


       *// Warning: **”enables unsafe generic array creation”*
        static List asList(T… elements) { … }

        static List<callable> stringFactories() {</callable

           Callable a, b, c;
           …


           return asList(a, b, c);
        }

Performance na JDK 7    

   Alguns artigos que recomendo:

   http://lingpipe-blog.com/2009/03/30/jdk-7-twice-as-fast-as-jdk-6-for-arrays-and-arithmetic/
   http://download.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html

Abrcs
Natanael Fonseca

Java OutOfMemoryError

Pelo menos algum dia, um programador profissional Java irá sofrer uma exceção do tipo: java.lang.OutOfMemoryError.  Com alguma sorte, este erro ocorrerá durante desenvolvimento da aplicação, mas acredite, normalmente acontece num ambiente produção. Mas afinal, o que significa tal “Error” ?
Por definição um Erro em Java é uma subclasse de Throwable, que indica problemas graves que uma aplicação normal não deve tentar capturar ( Utilizanto Try Catch ).  Olhando a documentação do proprio Java, vemos que  “OutOfMemoryError” é lançado quando a JVM necessita de mais memória para alocar novos objetos e, mesmo após a Garbage Colector ter sido invocada, ela não consegue esse espaço adicional.
Como JVMs 64bit estão ficando cada vez mais comuns em ambientes produção, isso parece ser a solução perfeita para este tipo de problema, ou seja, memória mais endereçável significa heap maior e travamentos menos freqüentes, será ?

Acontece que normalmente os administradores de servidor de aplicação apenas aumentam a memoria Heap disponivel, chegando até a incrível marca dos “GBs”, isso é claro, sem pensar nas consequencias disso: Menos desempenho e Troughput ! Isso acontece devido a um overhead da própría GC, uma vez que com mais heap para gerenciar, haverão mais pausas para a coleta “full”.

Um estudo realizado por Mirko Novakovic mostrou que problemas memória estão entre os problemas mais críticos relativos a estabilidade e desempenho de aplicações Java. Quase 50% dos 250 especialistas em  Java responderam que o gerenciamento correto da memória em uma aplicação Java é um fator crítico para o desempenho e estabilidade de suas aplicações. 

Separei alguns artigos que acredito ajudar a todos aqueles que pretendem entender este tópico:

Abrcs

V Edição do Prêmio Ação Coletiva

O anúncio da quinta edição do Prêmio Ação Coletiva aconteceu durante a abertura do 12o Fórum Internacional do Software Livre, na cidade de Porto Alegre. O anúncio foi realizado pelo titular da SLTI, Delfino Souza. A notícia foi divulgada no Portal SPB e pode ser acessada no endereço http://www.softwarepublico.gov.br/news-item193

Até o dia 09 de setembro serão avaliadas as contribuições dos participantes do Portal SPB. Existe uma diferença para as edições anteriores: as contribuições serão contabilizadas desde o início deste ano. Assim, a premiação passa a atingir os colaboradores que contribuem com maior regularidade.

Os detalhes dos critérios e das regras foram discutidos em reunião da coordenação geral do Portal SPB, que também ocorreu no próprio 12o FISL. Os coordenadores resolveram manter as mesmas regras estabelecidas para o ano de 2010.

Conheça o regulamento da quinta edição da premiação no endereço a seguir:
http://www.softwarepublico.gov.br/reg_acao_coletiva2011

A premição será entregue na cidade de Brasília em evento organizado conjuntamente com a INTEL, empresa patrocinadora do prêmio. A data da entrega será definida pela comissão organizadora da premiação. A empresa INTEL é patrocinadora pela terceira vez da premiação e a ONG ATA permanece como entidade organizadora do prêmio.

Notícias do Portal:

Jornal da NBR destaca o Software Público e a solução Educatux
http://www.softwarepublico.gov.br/news-item188

Linux Magazine lança edição especial do Portal do Software Público
http://www.softwarepublico.gov.br/news-item194

Entrevista com Aderbal Botelho, coordenador do Educatux
http://www.softwarepublico.gov.br/news-item187

Living and Learning !

A cena acima demonstra uma realidade comum no ambiente de desenvolvimento:  “Nem sempre você irá trabalhar com sistemas que possuem arquitetura clara e simples “.
A verdade é que existem muitos conceitos envolvidos, paradigmas e tabus que precisam ser quebrados
por grande parte dos desenvolvedores, pseudo-arquitetos e gerentes de projetos o_O.
Será que é melhor projetar sistemas com uma arquitetura simples focando no prazo ou passar mais tempo criando uma arquitetura revolucionária que utiliza vários padrões de projeto ?

Indo na linha do “quem sou eu pra afirmar algo”, recomendo a leitura de dois grandes livros:

Esse post foi mais pra mostrar como eu me sinto a cada novo projeto que eu entro, sempre uma realidade nova e estruturas diferentes, e ai que novamente chegamos na grande questão:

“Nem sempre você irá trabalhar com sistemas que possuem arquitetura clara e simples ”
                                                                                                                            by Natanael Fonseca

OSCON Java 2011

 

Open Source and Java: Better Together

Cloud computing, big data, mobile–that’s where developers find the juicy new challenges in today’s tech world. And the killer combination for taking them on is Java and open source.
Java: scalable, reliable, rich in code libraries, and a smart choice for building software in this age of distributed and parallelized computing.
Open source: once the disruptive upstart, now the default, and long the wellspring for innovation in Java.
They’re better together, and OSCON Java brings you the best of both.
Co-located with OSCON at the Oregon Convention Center this July, OSCON Java focuses on open source technologies that make up the Java ecosystem. You’ll meet your peers and learn about the latest tools, languages, and platforms that are core to making Java developers more productive and successful.

 source:

http://www.oscon.com/oscon2011/public/content/java?cmp=ba-conf-oj11-jw_new-tools