Mostrando postagens com marcador Java. Mostrar todas as postagens
Mostrando postagens com marcador Java. Mostrar todas as postagens

segunda-feira, 1 de janeiro de 2018

Tagged under: , , ,

Retrospectiva 2017 - Comunidade Java Bahia

Primeiro post do ano de 2018, é para falar sobre o que foi feito em 2017 pelo grupo e um pouco do que aconteceu no mundo Java no ano que passou.

Antes de falar de 2017, acho importante compartilhar que pelo segundo ano consecutivo estamos organizando o NoSqlBA 2018 e o call4papers estão abertos até 31/01. Mais informações no site do evento. Submeta sua palestra ou mini-curso e participe desse grande evento organizado em parceria com o GrouPy-BA (grupo de usuários Python).

O trabalho de comunidade é composto por pessoas e graças a união entre as pessoas, muitas coisas boas aconteceram esse ano, trouxemos pessoas de muita qualidade para falar em Salvador e participamos de um projeto do soujava

Vamos tentar recaptular os eventos cronologicamente...

Em janeiro apoiamos dois projetos de compartilhamento de informações de qualidade. 

JVM Links: Este projeto teve como objetivo principal a criação posts com conteúdos destaques que encontramos durante a semana. Foram 13 posts e montamos uma estrutura participativa com pull requests no github para adição de links. Agradecemos a todos que apoiaram o projeto.  

Série revisando padrões de projeto com Java 8: Uma série de Ivan Queiroz sobre revisitando alguns padrões de projeto usando Java 8. Essa série inicialmente iria ser publicada no blog pessoal de Ivan que resolveu compartilhar aqui no blog do Java Bahia. Essa série contou com 3 posts que podem ser vistos nos links

  1. Revisando Padões com Java 8: O Padrão Strategy
  2. Revisando Padrões com Java 8: O Padrão Template Method.
  3. Revisando Padrões com Java 8: O Padrão Null Object
Parabéns Ivan pela excelente iniciativa e por ter compartilhado seu conhecimento com a comunidade Java.

Ainda em janeiro, iniciamos a organização do II NoSQLBa 2017 em parceria com o GrouPy através da figura do nosso amigo Luiz Claudio (LC).
O evento aconteceu em março na Universidade Católica do Salvador com apoio do departamento de Computação da Universidade através do coordenador Osvaldo e de seus estudantes de ouro! O eventofoi um grande sucesso. Tivemos participação de pessoas da Oracle, Microsoft e Amazon, além de palestrantes locais. Foi feito um review do evento nesse link.

Lembrando que esse ano, como mencionado no início do post, teremos uma nova edição desse evento, que promete!



Em março, além do NoSQLBA, registramos nosso apoio a favor da inclusão das mulheres nas carreiras de tecnologia, no dia internacional das mulheres. Em tempo, acreditamos que todo e qualquer tipo de preconceito contra pessoas tem que parar, cor de pele, sexo, opção sexual, religião, são individuais e nós, como parte de uma sociedade devemos respeitar as escolhas, posicionamentos do próximo. Foi feito um post sobre isso.

Em abril, anunciamos a criação de um canal no Slack do SouJava. O slack do soujava conta com mais de 10 canais e é um bom lugar para trocar idéias com pessoas do país inteiro.

Ainda em abril, foi lançado o portal Spring Brasil pela empresa Itexto do nosso amigo Kico Lobo. Eles já tinham lançado o devall (agregador de blogs para desenvolvedores) e o Grails Brasil (fórum de usuários do framework Grails).

Acho que abril foi o mês dos lançamentos, pois o soujava também criou um canal do youtube que hoje conta com mais de 1000 inscritos e que produziu muito conteúdo de qualidade com pessoas do Brasil e do mundo inteiro. No canal tem informações sobre carreira, frameworks, novidades do mundo Java, foram entrevistados diversas referências do mundo Java, como Adam BienDavid Delabassée, Edson Yanaga, dentre outras feras. Esse projeto foi conduzido pelo nosso amigo Elder Moraes, que veio em Salvador em novembro para falar de Cloud e Arquitetura Servless através do projeto FN.

Nós, particiamos de dois hangouts desse. Um sobre Spring Framework com Kico Lobo e Felipe Adorno e outro sobre boas práticas de programação com Edson Yanaga.

Em maio, em parceria com outras comunidades, organizamos o I Community Day que aconteceu na Faculdade Visconde de Cairu. Tivemos mini-cursos e palestras.

Em julho aconteceu o TDC (The Developer Conference) em São Paulo e particiamos e fizemos um review.

Para não dizermos que foi um ano de apenas vitórias, fizemos um teste com a plataforma Medium que acabou não dando muito certo e optamos por voltar a utilizar o blog.

Em setembro, recebemos a visita de Fabio Velloso que falou no Ucsal Talks sobre BigData e Hadoop.



Ainda em setembro, no Java One, o anuncio oficial do Java 9 aconteceu, juntamente com o JEE 8 e uma novidade bombástica que o Java EE sairia da Oracle e passaria para Eclipse Foundation, passando a se chamar EE4j.

Em novembro, como mencionado anteriormente, tivemos a visita de Elder Moraes e Otavio Santana que falaram sobre Cloud e NoSQL.


Agora em dezembro, iniciamos os trabalhos de 2018, com a organização do NoSQLBA 2018 que promete.

Acho que isso foi tudo que aconteceu em 2018. Desejamos a todos, um ano novo de muitas realizações e muita felicidade. Muito amor no coração e menos intolerância. Mais respeito e muito conhecimento compartilhado.

Fiquem atentos em nossas canais de comunicação para saber mais informações das atividades do grupo.
Além da nossa parceria com o soujava que tem slack e youtube


terça-feira, 26 de dezembro de 2017

Tagged under: , , ,

Aberto C4P do NoSQLBA 2018





Está aberta a chamada de trabalhos para mais uma edição do NoSQLBA, a de 2018.
O evento acontecerá entre os dias 8 e 10 de março, na Universidade Católica do Salvador (UCSal).
Os trabalhos poderão ser submetidos até o dia 31 de janeiro.


Sobre Nosql:
Os banco de Dados NoSQL (not only SQL) foram criados, principalmente, para resolver
problemas com aplicações web que precisam operar com gigantescas cargas de dados,
além de poder escalar com grande facilidade. Esses tipos de banco de dados vem sendo
usados com muita frequência em redes sociais como Twitter, Facebook, além de prover
a persistência em aplicações nas nuvens. Outro ponto importante a citar é a crescente
adoção destas novas tecnologias, inclusive em mercados mais conservadores,
tais como instituições financeiras e agências governamentais. Os motivos são diversos
normalmente para solucionar problemas com flexibilidade, escalabilidade, latência e performance.
Para divulgar e demonstrar estas tecnologias, foi criado o evento NOSQL-BA.


sexta-feira, 1 de dezembro de 2017

Tagged under:

Criando métodos de extensão em Java com Lombok

Hoje gostaria de compartilhar com vocês o post feito por Matheus Carvalho sobre como criar o recurso de extensions methods usando Lombok com Java. Extensions Methods é um recurso da linguagem C# que é conhecido pela galera que programa em .net. Segundo a definição do site da documentação do C#:

Os métodos de extensão permitem que você "adicione" tipos existentes sem criar um novo tipo derivado, recompilar ou, caso contrário, modificar o tipo original. Os métodos de extensão são um tipo especial de método estático, mas são chamados como se fossem métodos de instância no tipo estendido. No caso do código cliente gravado em C#, F# e Visual Basic, não há nenhuma diferença aparente entre chamar um método de extensão e os métodos realmente definidos em um tipo.

Para quem não conhece o project Lombok ele serve para redução de boilerplate code.

Mais sobre lombok pode ser visto no site do projeto ou no vídeo do Canal Sou Java com Francislei Reis e Wellington Pinheiro.

Link para o post.

quinta-feira, 3 de agosto de 2017

Tagged under: ,

Experiência com o medium...

Pessoal,

vamos fazer uma experiência de migrar as postagens do blog para o Medium para tentar alcançar o máximo de pessoas possíveis com os nossos posts.

Para acompanhar basta nos seguir lá também...https://medium.com/javabahia

Já temos nosso primeiro post lá feito por nosso amigo Mateus Malaquias...Confere o post falando sobre CDI 2.0

quarta-feira, 26 de abril de 2017

Tagged under: , , , ,

Hangout sobre Spring Framework com Henrique Lobo no canal do Youtube do Sou Java

Anunciamos que quinta-feira, 27/04 (também conhecido como amanhã) as 20h, teremos um hangout com Henrique Lobo (Kico Lobo) da Itexto.

Esse é o evento do mês de abril do Java Bahia que está fazendo em parceria com o SouJava.

Kico Lobo fundador da empresa itexto, autor do livro de Spring da casa do código e fundador das comunidades Grails Brasil e Spring Brasil participa de um bate-papo sobre comunidade e Principlamente sobre Spring framework.

Quando? Dia 27 de abr de 2017.
Onde? No youtube. Basta acessar o link: https://www.youtube.com/watch?v=2ON77i5aMhE
Custo? Gratuito

Um pouco sobre Kico:
Sou Henrique Lobo Weissmann (Kico) e sempre fui fascinado por desenvolvimento de software. Sendo assim, nada mais natural que eu também escreva sobre o assunto.Também sou sócio fundador da itexto, que presta consultoria no desenvolvimento de sistemas para algumas empresas de Minas Gerais (atualmente nossos maiores clientes atuam nas áreas de mineração, mercado livreiro e educação). No início de 2008, fundei o Grails Brasil, que atualmente é um dos maiores grupos de desenvolvedores Grails (em número de participantes) do mundo. Estou no Twitter como @loboweissmann.

quinta-feira, 16 de março de 2017

Tagged under: , , , , , ,

Spring no NoSQLBA







O Spring é um framework muito famoso para a plataforma Java. Ele é famoso não apenas por seu recurso de injeção de controle, mas por toda a sua plataforma. Recursos como segurança, validação de dados, computação em nuvens, big data, integração com redes sociais. Um dos subprojetos do Spring é o Spring Data que tem como objetivo a integração do Spring com um banco de dados, seja relacional ou não relacional. No NoSQLBA teremos atividades sobre o Spring Data com o Ivan Queiroz, Bacharel em Sistemas de Informação pela Estácio de Sá / FIB, Analista de Sistemas a nove anos. Atualmente na Indra Brasil na área de clientes de Telecom. O principal cliente atual é a Vivo, e ele trabalha com sistemas ligados a áreas de atendimento ao cliente (CRM), vendas e jurídica. Experiência em Java, C++ e PHP; desenvolvendo sistemas desktop, web e middleware.



  • Data: 30 de março
  • Horário: 9:30
  • Mini-curso: Spring data neo4j com spring boot
  • Descrição: O mini-curso trará uma introdução sobre o uso do banco não relacional orientado a grafo neo4j usando spring data e spring boot.

  • Data: 1 de abril
  • Horário: 16:00
  • Título: Spring Data Neo4j - visão geral do framework
  • Descrição: Uma apresentação sobre o spring data e spring data neo4j mostrando as características, facilidades, vantagens e desvantagens. Uma visão geral, apresentando o framework para o público.

sexta-feira, 27 de janeiro de 2017

Tagged under: , , ,

Revisando Padrões com Java 8: O Padrão Template Method

Post original em: http://blog.ivanqueiroz.com/2017/01/revisando-padroes-java-8-template-method.html

No último post da série sobre padrões foi explicado o padrão Strategy, uso, vantagens e desvantagens e uma ótica de utilização com o Java 8. Continuando a série falarei do padrão Template Method seguindo a mesma linha e com exemplos. Será que conseguimos utilizá-lo com as features do Java 8? Vamos ver.
"Estamos presos ao modelo, somos parte dele."
-- V de Vingança

Template Method

Esse padrão define um modelo (template) de algoritmo, com pontos de extensão para serem utilizados por subclasses que irão adicionar comportamentos sem alterar a estrutura do algoritmo.


Aplicabilidade

Podemos utilizar quando:
  • queremos escrever as partes invariáveis de um algoritmo somente uma vez e deixar a implementação das partes variáveis para as suas subclasses;
  • existe comportamento em comum entre as subclasses, então movemos (uma refatoração) esse comportamento para uma classe comum, evitando duplicação de código;
  • queremos controlar a extensão das subclasses. Define-se um método template e a partir dele chamar várias hook operations (um método padrão geralmente vazio) que podem ter os comportamentos definidos pelas subclasses.

Implementação

Criei a classe Lutador que é a classe cliente que utiliza o algoritmo implementado pelo template:
public class Lutador {

    private MetodoLuta metodo;

    public Lutador() {
    }

    public void mudarMetodo(MetodoLuta metodo) {
        this.metodo = metodo;
    }

    public void finalizar() {
        metodo.finalizar();
    }
}

O método finalizar() chama o algoritmo de uma instância da subclasse de MetodoLuta que é o template de como o algoritmo será executado:

public abstract class MetodoLuta {

    private static final Logger LOGGER = LoggerFactory.getLogger(MetodoLuta.class);

    public MetodoLuta() {
    }

    protected abstract String desafiarOponente();

    protected abstract void socarOponente(String oponente);

    protected abstract void chutarOponente(String oponente);

    protected abstract void atirarMagiaOponente(String oponente);

    public final void finalizar() {

        String oponente = desafiarOponente();
        LOGGER.info("Lutador desafiado: {}.", oponente);
        socarOponente(oponente);
        chutarOponente(oponente);
        atirarMagiaOponente(oponente);

    }

}

Criei as subclasses MetodoForcaBruta e MetodoAgil que implementam os métodos abstratos.

Antes do Java 8

Para utilizar o padrão é só criar uma instância da classe cliente, configurar o template e chamar o método executor do algoritmo:
Lutador lutador = new Lutador();

lutador.mudarMetodo(new MetodoForcaBruta());
lutador.finalizar();

lutador.mudarMetodo(new MetodoAgil());
lutador.finalizar();
A saída da execução evidencia a mudança do algoritmo:
com.ivanqueiroz.templatemethod.MetodoLuta - Lutador desafiado Lutador de Karatê Milenar.
com.ivanqueiroz.templatemethod.MetodoForcaBruta - Soco forte no Lutador de Karatê Milenar pelo alto.
com.ivanqueiroz.templatemethod.MetodoForcaBruta - Chute forte giratório no ar em direção ao Lutador de Karatê Milenar
com.ivanqueiroz.templatemethod.MetodoForcaBruta - Hadounken de fogo no Lutador de Karatê Milenar
com.ivanqueiroz.templatemethod.MetodoLuta - Lutador desafiado Lutador de Sumô.
com.ivanqueiroz.templatemethod.MetodoForcaBruta - Soco rápido na linha de cintura do Lutador de Sumô
com.ivanqueiroz.templatemethod.MetodoForcaBruta - Chute médio com duas pernas na linha dos pés do Lutador de Sumô
com.ivanqueiroz.templatemethod.MetodoForcaBruta - Chute do pássaro giratório no Lutador de Sumô

Após o Java 8

Para utilização do Java 8 deixarei de utilizar classes abstratas e irei utilizar interfaces com uma das novidades do Java 8 o controverso Default Method.

Default Method

Essa novidade do Java 8 gerou alguns questionamentos de design da linguagem por permitir herança múltipla caso existam interfaces com default methods com a mesma assinatura. Mas particularmente acho que trouxe muito mais benefícios do que malefícios, pois essa decisão permitiu a alteração da API sem quebrar códigos antigos.
Bom, voltando ao que interessa, criei a interface MetodoLutaIf (que será o template) baseada na classe abstrata MetodoLuta, somente transformando o método finalizar() no default method:

public interface MetodoLutaIf {

    static final Logger LOGGER = LoggerFactory.getLogger(MetodoLutaIf.class);

    public String desafiarOponente();

    public void socarOponente(String oponente);

    public void chutarOponente(String oponente);

    public void atirarMagiaOponente(String oponente);

    public default void finalizar(){

        String oponente = desafiarOponente();
        LOGGER.info("Lutador desafiado: {}.", oponente);
        socarOponente(oponente);
        chutarOponente(oponente);
        atirarMagiaOponente(oponente);

    }
}

Após criar as implementações MetodoAgilImpl e MetodoForcaBrutaImpl o código executor ficará da seguinte maneira:
LutadorAtual lutadorJava8 = new LutadorAtual();

lutadorJava8.mudarMetodo(new MetodoAgilImpl());
lutadorJava8.finalizar();

lutadorJava8.mudarMetodo(new MetodoForcaBrutaImpl());
lutadorJava8.finalizar();
Analisando o código, não houve grande ganho do uso de Default Method (do ponto de vista na sintaxe), já que a interface possui mais de um método a ser implementado não podemos utilizar lambdas para passar novas implementações. Veremos então como seria, criei a interface MetodoXiterIf e a classe LutadorPreguicoso que utiliza o template:

public interface MetodoXiterIf {

    static final Logger LOGGER = LoggerFactory.getLogger(MetodoXiterIf.class);

    public String desafiarOponente();

    public default void soltarMagiaEmCima() {
        LOGGER.info("Hadouken na cara de {}", desafiarOponente());
    }

    public default void soltarMagiaEmbaixo() {
        LOGGER.info("Hadouken nas pernas de {}", desafiarOponente());
    }

    public default void soltarMagiaNoAr() {
        LOGGER.info("Hadouken na cabeça de {}", desafiarOponente());
    }

    public default void finalizar() {
        LOGGER.info("Lutador desafiado: {}.", desafiarOponente());
        soltarMagiaEmCima();
        soltarMagiaEmbaixo();
        soltarMagiaNoAr();
    }
}

Agora fica possível utilizar a sintaxe lambda na execução do código:

LutadorPreguicoso lutadorXiter = new LutadorPreguicoso();

lutadorXiter.mudarMetodo(()->"Lutador de sumô");
lutadorXiter.finalizar();

lutadorXiter.mudarMetodo(()->"Lutador de Karatê Milenar");
lutadorXiter.finalizar();

E ter o resultado esperado:

MetodoXiterIf - Lutador desafiado: Lutador de sumô.
MetodoXiterIf - Hadouken na cara de Lutador de sumô
MetodoXiterIf - Hadouken nas pernas de Lutador de sumô
MetodoXiterIf - Hadouken na cabeça de Lutador de sumô
MetodoXiterIf - Lutador desafiado: Lutador de Karatê Milenar.
MetodoXiterIf - Hadouken na cara de Lutador de Karatê Milenar
MetodoXiterIf - Hadouken nas pernas de Lutador de Karatê Milenar
MetodoXiterIf - Hadouken na cabeça de Lutador de Karatê Milenar

Vantagens e desvantagens

As vantagens principais para mim do Template Method são:
  • o reaproveitamento de código comum;
  • controlar a sequência da execução das subclasses ou implementações;
  • ter pontos que chamam código ainda não implementado (hook);
  • com o Java 8, podemos utilizar mais de um template, reutilizando mais código.
E as desvantagens:
  • no caso da implementação com as classes (pré Java 8) devemos tomar cuidado com os modificadores de métodos para garantir o contrato da superclasse com os clientes;
  • por outro lado na implementação com interfaces (pós Java 8) os métodos não podem ser finais, o que não garante o comportamento do algoritmo;
  • com o uso de Default Methods deve-se ter cuidado com a herança múltipla;
  • após instanciar um algoritmo, não será possível alterar o passo da execução;

Finalizando

Apesar de parecer não haver muito ganho em utilizar a abordagem com o Java 8, é preciso estar atento a esses ganhos no contexto de sua aplicação, é como um jogo de estratégia onde o que vale é saber equilibrar as perdas e ganhos. Pode-se discutir que não seja adequado utilizar interface para a construção do Template Method, já que não é intenção do padrão deixar que as subclasses (ou implementações) consigam alterar o contrato de execução, mas se dentro do contexto da minha aplicação os benefícios de utilizar lambdas ou múltiplas interfaces superarem os problemas (ou eles sejam mitigados) por quê não usar?
Nesse post tive a intenção de justamente mostrar que os padrões não são soluções perfeitas, são boas soluções que devemos utilizar com cuidado, sempre observando as consequências.
Um forte abraço e até a próxima.

Código no Github

https://github.com/ivanqueiroz/padroes-projeto-java

Créditos

quarta-feira, 4 de janeiro de 2017

Tagged under: , , , ,

Evolução Java (JVM, JDK) 1.4 -> 1.9





Esse post foi originalmente criado no meu blog pessoal e adaptei para cá, trazendo o resultado da enquete de uso da JDK que rodei no Twitter.

A idéia desse post é apresentar um pouco dos recursos a cada nova release do JDK. Posteriormente, pretendo abordar como a JVM evoluiu e suporta outras linguagens além do Java.
Irei apresentar os novos recursos a cada release para que possamos relembrar o que foi adicionado e ao mesmo tempo façamos uma reflexão. "Com tantos novos recursos, por que uma parte de nós continuamos com códigos feitos com recursos da versão 1.4 e 1.5?"

Com mais tempo, pretendo escrever sobre alguns recursos das versões 7, 8 e 9. Levantei uma pesquisa no Twitter para saber o que a galera tem usado e até o momento (a pesquisa não acabou, se não votou, participe clicando aqui), o JDK 8 está vencendo a corrida. Não coloquei a versão 1.4 na pesquisa, porque o Twitter suporta apenas 4 itens por enquete e assumi que é algo bastante velho, mas confesso que tenho curiosidade de saber sobre o tema.


J2SE 1.4

Características:
  • Codename: Merlin
  • Release date: 06/02/2002
  • Public support and security updates: Até outubro de 2008
  • Private support and security updates: Até fevereiro de 2013
  • Mudanças na plataforma:
  • assert keyword (specified in JSR 41)
  • Regular expressions modeled after Perl regular expressions
  • Exception chaining allows an exception to encapsulate original lower-level exception
  • Internet Protocol version 6 (IPv6) support
  • Non-blocking IO (named New Input/Output, NIO) (specified in JSR 51)
  • Logging API (specified in JSR 47)
  • Image I/O API for reading and writing images in formats like JPEG and PNG
  • Integrated XML parser and XSLT processor (JAXP) (specified in JSR 5 and JSR 63)
  • Integrated security and cryptography extensions (JCE, JSSE, JAAS)
  • Java Web Start included (Java Web Start was first released in March 2001 for J2SE 1.3) (specified in JSR 56)
  • Preferences API (java.util.prefs)

J2SE 5.0

Nessa release (inicialmente numerada com J2SE 1.5) foi definida uma mudança na nomenclatura do número da versão para melhor refletir o nível de maturidade, estabilidade, escalabilidade e segurança do J2SE.
Essa foi a última release que foi recebeu suporte oficial das versões 98 e ME do Windows. Essa release também foi a última a suportar o Windows 95 e NT 4.0.
Essa versão foi disponibilizada no Apple Mac OS X 10.4 (Tiger) e foi a versão default do Apple Mac OS X 10.5 (Leopard).
Essa foi uma release onde o Java (linguagem) recebeu suporte a novos recursos, esses bastante importante e revolucionários, como podemos destacar: Generics, Metadata (annotations), Enumerations, for each e static imports.
Características:
  • Codename: Tiger
  • Release date: 30/09/2004
  • Difference date from the latest release: 2 years, 7 months, 24 days
  • Public support and security updates: 03/11/2009
  • Private support and security updates: 05/2015
  • Mudanças na plataforma:
  • Generics: provides compile-time (static) type safety for collections and eliminates the need for most typecasts (type conversion) (specified by JSR 14)
  • Metadata: also called annotations; allows language constructs such as classes and methods to be tagged with additional data, which can then be processed by metadata-aware utilities (specified by JSR 175)
  • Autoboxing/unboxing: automatic conversions between primitive types (such as int) and primitive wrapper classes (such as Integer) (specified by JSR 201)
  • Enumerations: the enum keyword creates a typesafe, ordered list of values (such as Day.MONDAY, Day.TUESDAY, etc.); previously this could only be achieved by non-typesafe constant integers or manually constructed classes (typesafe enum pattern) (specified by JSR 201)
  • Varargs: the last parameter of a method can now be declared using a type name followed by three dots (e.g. void drawtext(String... lines)); in the calling code any number of parameters of that type can be used and they are then placed in an array to be passed to the method, or alternatively the calling code can pass an array of that type
  • Enhanced for each loop: the for loop syntax is extended with special syntax for iterating over each member of either an array or any Iterable, such as the standard Collection classes (specified by JSR 201)
  • Improved semantics of execution for multi-threaded Java programs; the new Java memory model addresses issues of complexity, effectiveness, and performance of previous specifications[17]
  • Static imports There were also the following improvements to the standard libraries:
  • Automatic stub generation for RMI objects
  • Swing: New skinnable look and feel, called synth
  • The concurrency utilities in package java.util.concurrent[18]
  • Scanner class for parsing data from various input streams and buffers

Java SE 6

A partir dessa release a versão do Java mudou o padrão de nomenclatura definitivamente. A grande maioria das mudanças foram internas na JVM, não havendo tantas mudanças na linguagem Java, mas a partir dessa release foi adicionado o suporte a linguagens de scripts na JVM (JSR 223). Esse é o tema que pretendo abordar em outro post, mas é bem interessante saber que a JVM roda mais de 50 linguagens nos dias atuais.
Características:
  • Codename: Mustang
  • Release date: 11/12/2006
  • Difference date from the latest release: 2 years, 2 months, 11 days
  • Public support and security updates: 02/2013
  • Private support and security updates: 12/2018
  • Mudanças na plataforma:
  • Support for older Win9x versions dropped; unofficially, Java 6 Update 7 was the last release of Java shown to work on these versions of Windows.[citation needed]This is believed[by whom?] to be due to the major changes in Update 10.
  • Scripting Language Support (JSR 223): Generic API for tight integration with scripting languages, and built-in Mozilla JavaScript Rhino integration.
  • Dramatic performance improvements for the core platform,[27][28] and Swing.
  • Improved Web Service support through JAX-WS (JSR 224).
  • JDBC 4.0 support (JSR 221).
  • Java Compiler API (JSR 199): an API allowing a Java program to select and invoke a Java Compiler programmatically.
  • Upgrade of JAXB to version 2.0: Including integration of a StAX parser.
  • Support for pluggable annotations (JSR 269).[29]
  • Many GUI improvements, such as integration of SwingWorker in the API, table sorting and filtering, and true Swing double-buffering (eliminating the gray-area effect).
  • JVM improvements include: synchronization and compiler performance optimizations, new algorithms and upgrades to existing garbage collection algorithms, and application start-up performance.

Java SE 7

Em 2010, a Oracle comprou a Sun Microsystems (empresa que era responsável pelo Java) por aproximadamente US$ 7.4 bilhões. A partir dessa data a JDK passou a ser desenvolvida sob o projeto Open JDK. Algumas evoluções na linguagem Java foram adicionadas e melhorias na API de IO e concorrência foram as principais novidades dessa versão.
Características:
  • Codename: Dolphin
  • Release date: 07/2011
  • Difference date from the latest release: 4 years, 6 months, 20 days
  • Public support and security updates: 03/2014
  • Private support and security updates: 07/2022
  • Mudanças na plataforma:
  • JVM support for dynamic languages, with the new invokedynamic bytecode under JSR-292,[115] following the prototyping work currently done on the Multi Language Virtual Machine
  • Compressed 64-bit pointers[116] (available in Java 6 with -XX:+UseCompressedOops)[117]
  • JDBC 4.1
  • Concurrency utilities under JSR 166[126]
  • New file I/O library (defined by JSR 203) adding support for multiple file systems, file metadata and symbolic links. The new packages are java.nio.file, java.nio.file.attribute and java.nio.file.spi[127][128]
  • Timsort is used to sort collections and arrays of objects instead of merge sort
  • Library-level support for elliptic curve cryptography algorithms
  • An XRender pipeline for Java 2D, which improves handling of features specific to modern GPUs
  • New platform APIs for the graphics features originally implemented in version 6u10 as unsupported APIs[129]
  • Enhanced library-level support for new network protocols, including SCTP and Sockets Direct Protocol
  • Upstream updates to XML and Unicode
  • Java Deployment Rulesets[130]
  • These small language changes (grouped under a project named Coin):[118]
  • Strings in switch[119]
  • Automatic resource management in try-statement[120]
  • Improved type inference for generic instance creation, aka the diamond operator <>[121]
  • Simplified varargs method declaration[122]
  • Binary integer literals[123]
  • Allowing underscores in numeric literals[124]
  • Catching multiple exception types and rethrowing exceptions with improved type checking[125]

Java SE 8

Evoluções revolucionárias na JVM desde a versão 5 vieram com essa release. Suporte a programação funcional com uso de expressões lambdas.
Essa release não é suportada no Windows XP (antes da relase update 25).
Características:
  • Codename: Kenai
  • Release date: 18/03/2014
  • Release atual:: JDK 8 update 111
  • Difference date from the latest release: 2 years, 8 months, 17 days
  • Public support and security updates: 09/2017
  • Private support and security updates: 03/2025
  • Mudanças na plataforma:
  • JSR 335, JEP 126: Language-level support for lambda expressions (officially, lambda expressions; unofficially, closures) under Project Lambda[196] and default methods (virtual extension methods)[197][198][199] which allow the addition of methods to interfaces without breaking existing implementations. There was an ongoing debate in the Java community on whether to add support for lambda expressions.[200][201] Sun later declared that lambda expressions would be included in Java and asked for community input to refine the feature.[202] Supporting lambda expressions also allows the performance of functional-style operations on streams of elements, such as MapReduce-inspired transformations on collections. Default methods allow an author of an API to add new methods to an interface without breaking the old code using it. Although it was not their primary intent,[197] default methods also allow multiple inheritance of behavior (but not state).
  • JSR 223, JEP 174: Project Nashorn, a JavaScript runtime which allows developers to embed JavaScript code within applications
  • JSR 308, JEP 104: Annotation on Java Types[203]
  • Unsigned Integer Arithmetic[204]
  • JSR 337, JEP 120: Repeating annotations[205]
  • JSR 310, JEP 150: Date and Time API[206]
  • JEP 178: Statically-linked JNI libraries[207]
  • JEP 153: Launch JavaFX applications (direct launching of JavaFX application JARs)[208]
  • JEP 122: Remove the permanent generation[209]

Java SE 9

O lançamento estava previsto para 22/09/2016. A Oracle mudou para 23/03/2017 e depois anunciou que seria julho/2017. A principal complexidade que vem gerando o atraso tem relação com a modularização da JVM (projeto Jig Saw).
Características:
  • Codename: Não definido
  • Release date: 07/2017 (Previsão)
  • Difference date from the latest release: 3 years, 3 months, 13 days **(se concluído de fato em julho/2017).
  • Public support and security updates: TBD (to be defined)
  • Private support and security updates: TBD (to be defined)
  • Mudanças na plataforma:
  • JSR 376: Modularization of the JDK under Project Jigsaw (Java Module System)[132][243][244]
  • JEP 222: jshell: The Java Shell (a Java REPL)[245][246]
  • JEP 295: Ahead-of-Time Compilation[247]
  • JEP 268: XML Catalogs[248]
Encontrei essa figura que mostra a divisão por categorias dos recursos.
enter image description here fonte: https://blogs.oracle.com/java/jdk-9-categories

Fontes

Links:
  • https://blogs.oracle.com/java/jdk-9-categories
  • https://en.wikipedia.org/wiki/Javaversionhistory
  • http://javapapers.com/core-java/java-features-and-history/
  • http://www.theregister.co.uk/2016/09/14/jdk9release_delay/
  • http://www.oracle.com/technetwork/java/eol-135779.html
  • http://openjdk.java.net/projects/jdk7/features/
  • http://openjdk.java.net/projects/jdk8/features
  • http://openjdk.java.net/faq/
  • http://openjdk.java.net/projects/jdk6/
  • http://openjdk.java.net/projects/jdk7/
  • http://openjdk.java.net/projects/jdk8/spec/
  • http://openjdk.java.net/projects/jdk9/spec/
  • http://openjdk.java.net/projects/jdk10/

terça-feira, 25 de outubro de 2016

Tagged under: , ,

Promoção certificação Java (35% de desconto)

Pessoal,

a Oracle está dando 35% de desconto em algumas certificações. Para isso vocês podem comprar o Vouncher de desconto no link e aplicar a certificação.

O vouncher é válido até 31/12/2016. O custo da certificação com o Vouncher fica (R$ 338). O preço sem Vouncher é R$ 521.


Lista de todas certificações (O Vouncher é aplicado para os itens em negrito)

  • Java SE (Standard Edition)
    • Java SE 7 Programmer I 1Z0-803 
    • Java SE 7 Programmer II 1Z0-804 
    • Upgrade to Java SE 7 Programmer 1Z0-805 
    • Java SE 8 Programmer I 1Z0-808 
    • Java SE 8 Programmer II 1Z0-809 
    • Upgrade Java SE 7 to Java SE 8 OCP Programmer 1Z0-810 
    • Java Foundations (novice-level exam) 1Z0-811 
    • Upgrade to Java SE 8 OCP ( Java SE 6 and all prior versions) 1Z0-813 
    • Java SE 5 and 6, Certified Associate 1Z0-850 
    • Java SE 6 Programmer Certified Professional 1Z0-851 
    • Java SE 6 Programmer Certified Professional Upgrade 1Z0-852 
    • Java SE 6 Developer Certified Master Assignment 1Z0-855 
    • Java SE 6 Developer Certified Master Essay 1Z0-856 
    • Java SE 6 Developer Certified Master Assignment for Resubmission 1Z0-857 Java EE
  • Java EE (Enterprise Edition):
    • Java EE 6 Enterprise Architect Certified Master 1Z0-807 
    • Java (EE) Enterprise Architect Certified Master Assignment 1Z0-865 
    • Java (EE) Enterprise Architect Certified Master Essay 1Z0-866 
    • Java (EE) Enterprise Architect Certified Master Assignment for Resubmission 1Z0-867 
    • Java EE 6 Enterprise JavaBeans Developer Certified Expert 1Z0-895 
    • Java EE 6 JavaServer Faces Developer Certified Expert 1Z0-896 
    • Java EE 6 Web Services Developer Certified Expert 1Z0-897 
    • Java EE 6 Java Persistence API Developer Certified Expert 1Z0-898 
    • Java EE 6 Web Component Developer Certified Expert 1Z0-899
Este link apresenta todas certificações da Oracle disponíveis. 


segunda-feira, 10 de outubro de 2016

Tagged under: , , , ,

Feedback sobre os eventos organizados pelo Java Bahia até o momento.

Pessoal,

em 2016, desde agosto, estamos trabalhando em retomar o movimento do JUG Java Bahia e estamos rodando em diversas universidade, levando apresentações com três pilares: comunidade, carreiras e alguma apresentação de ordem técnica.

Iniciamos essa jornada em 27.08.2016 na Unijorge com apoio da professora Marla Dore, com as palestras de Otávio Santana (@otaviojava), Jefferson Moreira (@jeffersonmore), falando sobre comunidade. Antonio Lazaro (@antonio_lazaro) falando sobre carreiras e Mateus Malaquias (@mmalaquias1) dando um overview do JPA, que foi compilada a partir de uma série que o mesmo escreveu no blog (1 e 2). Para quem não conhece, Otávio Santana é de Salvador e mora atualmente em SP mas é uma pessoa que apoia e fornece suporte para o JUG Java Bahia e, principalmente foi  quem motivou nosso time a fomentar a comunidade soteropolitana.

A partir desse evento, tivemos feedbacks positivos e decidimos levar esse evento para outras universidades da Bahia.

Em 14/09, fomos a FTC de Feira de Santana com as palestras de Mateus (comunidade) e Jefferson (JPA) no encontro sobre desenvolvimento Java, evento organizado pelos estudantes da FTC.

Em 24/09, fizemos na Ruy Barbosa, com apoio da professora e coordenadora dos cursos de computação Angela Baptista Reis, o II encontro do Java Bahia nas universidades. Nesse evento, se juntou ao nosso time Ivan Queiroz (@ivanqueiroz) com uma palestra fantástica sobre Spring Data.

No último sábado, 08/10, levamos para a Unifacs, com apoio da professora e coordenadora dos cursos de computação, Daniela Barreto Araujo, o III encontro do Java Bahia.

O nosso objetivo inicial é tentar fomentar entre os estudantes o senso de comunidade e falar um pouco sobre a plataforma Java. Felizmente, em nossos encontros, as pessoas que confirmam e aparecerem ficam até o fim, em sua grande maioria e isso é muito gratificante.

Esperamos que quem apareceu tenha gostado e quem ainda não pôde aparecer, apareça. Ainda levaremos até dezembro em outras universidades. Confirmadas, temos a Cairu (22/10) e Ucsal (novembro e dezembro) e estamos discutindo com a Uneb sobre a possibilidade de fazermos em novembro ou dezembro.

Acompanhem nosso blog e associem ao meetup do nosso grupo para serem notificados dos próximos eventos. Nos sigam no Twitter (@javabahia) e acompanhem nossas atividades.

No meetup, postamos as fotos dos últimos encontros ocorridos (Ftc Feira, Ruy Barbosa e Unifacs).

Uma vez que esse circuito entre as Universidades encerre, iremos planejar o ano de 2017 com novas palestras e eventos. Ficou interessado? Entre em contato conosco e participe.

quarta-feira, 5 de outubro de 2016

Tagged under: , , ,

III Encontro JavaBahia nas universidades 2016 - Unifacs 08/10/2016

Seguindo o roteiro de visitarmos as faculdades de Salvador e pelo feedback positivo que obtivemos dos estudantes e professores, estamos levando para Unifacs, no dia 08/10 o nosso encontro do Java Bahia. 

O evento será sediado no auditório da Unifacs (campus da Paralela) e será de 08:30 as 12:30 com a agenda abaixo:
  • Java User Group – O que é e como eu posso participar? - Jefferson Moreira
  • JPA de A à Z: Porque conhecer a JPA? - Mateus Malaquias
  • Carreira do desenvolvedor Java: O que eu preciso saber? - Antônio Lázaro
  • Spring Data - Ivan Queiroz
  • Encerramento - Neste momento temos um espaço aberto para você contribuir e falar o que quiser!!
O evento será aberto a comunidade, e as inscrições devem ser feitas via plataforma meetup. Mais informações no site do JavaBahia:
Contatos: 

P.S. - Ainda em outubro faremos o evento na Faculdade Cairu. Em novembro estamos fechando os próximos eventos (prováveis: Unime e Ucsal). Estamos aguardando outros retornos.



segunda-feira, 25 de julho de 2016

Tagged under: ,

JPA de A à Z - Por que conhecer?

Não dá pra negar que o Java é uma linguagem bastante verbosa e quando falávamos em juntar o Java com um banco de dados ai sim dava pra ver o tamanho do problema.
Se não tivéssemos cuidado era muito fácil perder o controle da complexidade de nossas entidades e consultas.

Antes de entendermos sobre a  JPA, é necessário entender que costumávamos utilizar em nossos projetos o JDBC (Java Database Connectivity) que é uma API presente no Java desde a versão 1.1 da plataforma. Mesmo sendo uma API bem antiga ela ainda continua sendo atualizada e modificada pela comunidade e pela Oracle.

Resumidamente o JDBC é o antecessor da JPA porque ela era a principal forma de executar nossas querys SQL de select, update, delete, insert e até mesmo executar funções presentes no banco de dados. Um detalhe interessante sobre o JDBC são seus Drivers de conexão, sendo cada banco de dados é responsável por desenvolver e atualizar o seu Driver. Isso facilitava muito a vida do desenvolvedor porque esses Drivers visam encapsular boa parte do código necessário para se conseguir uma conexão, então era uma preocupação a menos que tínhamos que ter.

Mas nem tudo eram flores quando usávamos o JDBC, porque além de ter que escrever códigos SQL direto no Java, tínhamos também que instanciar uma conexão, buscar a conexão com o banco de dados. Dai era preciso preparar um outro objeto para poder manipular a consulta informando os valores dos parâmetros e só então executávamos a consulta.

Acabávamos tendo um trabalho tedioso só para executar uma consulta, todavia o ciclo não acabava nisso, depois era preciso fazer um casting do retorno da consulta para com objeto que queríamos manipular e como se não fosse suficiente também era necessário lembrar de fechar as conexões com o banco de dados.
É preciso entender que estamos falando de muito tempo atrás, um tempo em que as facilidades da JPA ainda não existiam e que muita especificação que existe hoje nasceu das dificuldades do passado.

public class ProdutoDAO {

Connection dbConnection;

public ProdutoDAO(Connection con) {
this.dbConnection = con;
}

public void salva(Produto produto) throws SQLException {
String sql = "INSERT INTO PRODUTO (NOME, DESCRICAO) VALUES (?,?)";

try (PreparedStatement prStmt = dbConnection.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS)) {

prStmt.setString(1, produto.getNome());
prStmt.setString(2, produto.getDescricao());
prStmt.execute();

try (ResultSet rs = prStmt.getGeneratedKeys()) {
if (rs.next()) {
int id = rs.getInt(1);
produto.setId(id);
}
}

}
}

public List lista() throws SQLException {
List produtos = new ArrayList();

String sql = "SELECT * FROM PRODUTO";

try (PreparedStatement prStmt = dbConnection.prepareStatement(sql)) {
prStmt.execute();

converterQueryEmProdutos(produtos, prStmt);
}

return produtos;
}

public List busca(Produto produto) throws SQLException {

String sql = "SELECT * FROM PRODUTO WHERE DESCRICAO like ?";
List produtos = new ArrayList();

try (PreparedStatement prdStmt = dbConnection.prepareStatement(sql)) {
prdStmt.setString(1, produto.getDescricao);
prdStmt.execute();

converterQueryEmProdutos(produtos, prdStmt);
}

return produtos;
}

private void converterQueryEmProdutos(List produtos, PreparedStatement prdStmt) throws SQLException {

try (ResultSet rs = prdStmt.getResultSet()) {
while (rs.next()) {
int id = rs.getInt(1);
String nomeProduto = rs.getString("nome");
String descricaoProduto = rs.getString("descricao");
Produto produto = new Produto(nomeProduto, descricaoProduto);
produto.setId(id);
produtos.add(produto);
}
}
}
}

Olhando pra esse código podemos passar um baita sufoco se por acaso algum dia o analista de requisitos resolva mexer nos atributos da entidadeProduto. Nessa DAO de exemplo só foi criada poucas consultas, mas vamos usar nossa criatividade e imaginar que na verdade existem 10 e o analista resolveu mudar o nome da coluna "DESCRICAO" para "TIPO_PRODUTO", uma pequena mudança de nomenclatura já é suficiente para que perdêssemos tempo refatorando boa parte de nosso código.

Foi para evitar todo esse trabalho que surgiu o conceito ORM (Object Relational Mapping) que traduzindo livremente de acordo com a minha vontade quer dizer: “Estou salvando a sua alma transformando os dados de um banco de dados que estão no paradigma relacional para o paradigma orientado a objetos que você tanto precisa”.

Junto com a ORM também surgiu o Hibernate que é o framework JPA mais famoso e utilizado no momento. Só por curiosidade saiba que a JPA surgiu por causa dele, viram que a ideia era tão boa que resolveram transformar a implementação do Hibernate em uma especificação e até hoje muita coisa que é implementada no framework posteriormente vira especificação na JPA.

Mas o que é JPA?

JPA significa Java Persistence API e como já falei ela é uma especificação que nasceu de uma JSR (Java Specification Requests) que basicamente são pedidos para mudanças na linguagem, entenda a JPA como um contrato, normas, regras ou interface e que todos os Frameworks Java que trabalham com persistência de dados devem implementa-la. Além do Hibernate também temos outros Framworks como por exemplo o OpenJPA, o Batoo e o EclipseLink.

Então basicamente a JPA é uma especificação que regulamenta ferramentas muito poderosas que utilizamos no nosso dia a dia para automatizar e economizar tempo de desenvolvimento. Essa especificação nos ajuda em todos os processos quando precisamos trabalhar com um banco de dados, sendo assim podemos usa-la para executar consultas, inserts, updates e deletes.

Lembra daquele código verboso? Como sera que ele ficaria se fosse escrito utilizando a JPA?

 
public Produto obterPorId(Produto produto) {
return manager.find(Produto.class, produto.getId());
}

@SuppressWarnings("unchecked")
public List obterTodos() {
return manager.createQuery("SELCT p FROM Produto p").getResultList();
}

Repare que no método obterPorId não foi necessário criar uma única query SQL para executar a consulta por ID, também não foi preciso fazer nenhum casting a JPA se encarregou de fazer tudo isso pra gente. Agora olhando o método obterTodos temos uma String que se parece muito com uma query SQL só que não é, a essa String damos o nome de JPQL (Java Persistence Query Language) e vamos conhecer mais sobre ela em outro momento.

Por fim espero que você nos acompanhe nos próximos posts porque vamos aprender mais sobre essa ferramenta poderosa em conjunto com boas práticas. A ideia é de que os posts não sejam muito longos e também não sejam só tutorias de JPA, aqui iremos explorar os conceitos, apresentar exemplos e colocar minha experiência em ação com as boas práticas.

segunda-feira, 25 de janeiro de 2016

Tagged under: , , , ,

Palestras confirmadas [Linguagil 2016]



Você já viu a grade de palestras do LinguÁgil 2016? Como sempre, ela está bem misturada, trazendo diversos assuntos ligados a linguagens de programação, frameworks, agilidade, comportamento e carreira.

Além da participação da comunidade através das apresentações submetidas e selecionadas, mais uma vez, teremos "keynotes", com palestrantes de referência. Outro fato importante é que pelo menos um terço das apresentações será feito por mulheres, numa ação para demonstrar como a participação feminina é necessária e muito bem-vinda.


Sexta, 18/03/16:



  • 08:50 às 09:35 - O trabalho de FDP do PO: fatiar, descartar e priorizar! (Mila Orrico)
  • 10:15 às 10:35 - SBTM - Testes exploratórios guiados à sessão (Lorena Caldas)
  • 10:45 às 11:30 - Construindo aplicativos móveis com Ionic Framework (Isaque Dias)
  • 11:30 às 12:15 - DevOps é uma prática, cultura ou um cargo? (Carlos Felippe Cardoso)
  • 13:45 às 14:30 - Programação Reactiva (Osvaldo "Tupy" Matos)
  • 14:50 às 15:35 - Como empreender tendo um emprego? (Paula Antunes)
  • 16:05 às 16:50 - Dobro do Resultado na Metade do Tempo (Rafael Miranda)
  • 16:50 às 17:35 - Histórias de Usuário - Por que e como escrever requisitos de forma ágil? (Rafael Helm)



Sábado, 19/03/16:



  • 08:50 às 09:35 - Controlefobia (Juliano Ribeiro)
  • 09:35 às 09:55 - Hackeando Representatividade: Mulheres Empreendedoras (Ana Paula Vargas Maia)
  • 10:15 às 10:35 - Quero ser um certificado Scrum! Porque ter e o que devo fazer para ter? (Adriana de Melo Fontes)
  • 10:45 às 11:30 - Resiliência, a competência que nos leva a excelência (Anneliese Gripp)
  • 11:30 às 12:15 - Computação Ubíqua, o que isso tem a ver com Android Wear. (Ramon Mota)
  • 13:45 às 14:30 - Empreendendo com Software Livre. (Francine Grando)
  • 14:50 às 15:35 - Programação funcional com Java 8 (Otávio Santana)



Visite a página do evento, veja mais informações e se inscreva: http://linguagil.com.br