sexta-feira, 11 de junho de 2021

🏆 Vencedores do Duke’s Choice Award 2019!

🏆 Vencedores do Duke’s Choice Award 2019!


Nos últimos 24 anos, a tecnologia Java expandiu o cenário inovador de aplicações e soluções com as quais interagimos pessoal ou profissionalmente. E os próximos 24 anos prometem ser ainda mais inovadores, trazendo oportunidades maiores para o panorama tecnológico. E isso se deve à diversidade de mentes criativas que usam o Java para avançar o mundo com o qual interagimos todos os dias.


Desde 2002, o Java Platform Group da Oracle tem concedido o Duke’s Choice Award a inovadores que usaram as tecnologias Java de uma maneira única e inovadora, seja para um projeto, contribuições pessoais, em um produto, como parte de um programa ou em um serviço. Essas inovações representaram trabalhos em andamento, pesquisas contínuas, soluções disponíveis ou implementações de Java que auxiliam na entrega ou execução de funcionalidades produtivas em uma ampla gama de ambientes, casos de uso e indústrias, como em uma empresa, instituição de pesquisa, instituição educacional, programa sem fins lucrativos ou projeto de código aberto, por exemplo.


O Duke’s Choice Award deste ano foi concedido a um grupo seleto de inovadores cujas contribuições para o ecossistema Java melhoraram o mundo ao nosso redor. O Java Platform Group da Oracle tem o orgulho de reconhecer:


🎯 JUnit

Reconhecimento por produtividade do desenvolvedor.


🤝 JavaBin

Reconhecimento por capacitação do ecossistema.


🏥 CarePay

Reconhecimento por inovação em saúde.


🌍 Jakarta EE

Reconhecimento por contribuição ao código aberto.


🎓 Dataverse

Reconhecimento no âmbito universitário/ensino superior.


🌟 Chris Thalinger

Reconhecimento da comunidade.


📚 Denver Java User Group

Reconhecimento pelo aprendizado de desenvolvedores.


O Java Platform Group da Oracle agradece pela ampla variedade de usos da tecnologia Java no vasto ecossistema de desenvolvedores e está ansioso para reconhecer os futuros vencedores em 2020.

🌍 Nosso Mundo. Movido por Java.

🌍 Nosso Mundo. Movido por Java.


Uma Jornada de 25 Anos

É difícil acreditar que já se passaram 25 anos desde que o Java se tornou oficialmente disponível. Por outro lado, parece que várias eras se passaram – e, de certo modo, passaram mesmo.


O Início de Uma Missão

Mesmo sendo um grupo pequeno, a equipe pensava grande. Havia tantas empresas e pessoas que acreditavam na perspectiva de "escreva uma vez, execute em qualquer lugar" que o desafio não era como cobrir todo o hardware e sistemas operacionais diferentes, mas sim como canalizar, focar e organizar os esforços de tantas partes que queriam... participar da festa!

Felizmente isso aconteceu – e elas participaram. E agora, 25 anos depois, é uma alegria celebrar "o primeiro quarto de século do Java".


Uma Visão Superada

Hoje, aquela visão original, por mais ambiciosa que fosse, foi alcançada e superada muitas vezes, conforme o Java evoluiu para ajudar os desenvolvedores a enfrentar novos desafios. A indústria de software abraçou o Java porque ele tornou o desenvolvimento um prazer, resolveu problemas de distribuição e eliminou a dor de portar constantemente entre plataformas.

O Java foi aproveitado pelo universo crescente de websites e fez o conteúdo estático ganhar vida, não apenas com coisas divertidas como o Duke quicando, mas também com uso real para a distribuição de aplicativos de negócios.

A utilidade do Java se multiplicou quando as pessoas perceberam como ele poderia resolver seus problemas em servidores – elevando a produtividade, o desempenho e a escalabilidade a novos patamares. Da distribuição de software pela internet à escalabilidade do lado do servidor da arquitetura multicamada, do aproveitamento de arquiteturas de hardware em constante melhoria às implantações nativas em nuvem, e muito mais.


Constância na Mudança

Durante todo esse tempo, aqueles que escolheram apostar no Java foram recompensados com uma tecnologia que evoluiu continuamente para apoiá-los. Através de mudanças constantes na indústria, o Java forneceu uma batida constante de estabilidade, compatibilidade e um ecossistema cada vez maior de ferramentas, bibliotecas e frameworks para escolher.


Uma Visão que Permanece

A visão é a mesma hoje como era então – uma busca incessante pela produtividade do desenvolvedor e pelo desempenho do programa, mantendo a legibilidade e a compatibilidade diante de um cenário tecnológico em constante evolução.


Celebrando o Presente e o Futuro

Para marcar o 25º aniversário do Java, está sendo usado o tema "Nosso Mundo. Movido por Java." Esta celebração tem como objetivo honrar o passado, reconhecer o presente e oferecer um vislumbre do futuro... bem como agradecer às muitas vozes influentes na comunidade Java.

Conforme o Java nos leva adiante através dos avanços tecnológicos, um conjunto diversificado de programas comunitários destacará inovadores, inovações e organizações que movem o mundo com Java. Desde empresas que constroem aplicativos dos quais dependemos todos os dias, até professores que transmitem o ofício da programação para a próxima geração de desenvolvedores, e alunos que carregarão a tocha por muitos anos vindouros. E através de tudo isso, será compartilhada a contínua liderança tecnológica e a administração comunitária que estão impulsionando a inovação e evolução contínuas do Java.

Há um convite para participar do webcast online inaugural que acontecerá em 20 de maio, onde muitos rostos técnicos e comunitários reconhecidos compartilharão suas memórias e insights sobre o Java.

Além disso, como uma oferta especial, a Oracle University está oferecendo o exame de certificação Java por apenas US$ 25. Esta oferta especial é válida até 25 de abril de 2021.


Seguindo em Frente

25 anos? Sim, tem sido uma jornada incrível, mas é uma jornada que continua avançando. Vamos manter o mundo avançando e tornar os próximos 25 anos ainda melhores... JUNTOS!

Nosso Mundo. Movido por Java.

💻 Java e a Nova Personalidade do Duke: Conheça o Duke Surfista da Nuvem!

Java e a Nova Personalidade do Duke

Por mais de 24 anos, a tecnologia Java tem avançado o mundo com o qual interagimos todos os dias. Com a gestão da Oracle, a tecnologia Java continua a oferecer aos desenvolvedores funcionalidades inovadoras para construir a próxima geração de aplicações que trazem utilidade para nós, tanto pessoal quanto profissionalmente.


E durante a história do Java, ela foi representada pela personalidade altamente reconhecida do Duke. Nos primeiros dias do desenvolvimento Java, a equipe do Projeto Green da Sun Microsystems criou sua primeira demonstração funcional — um controlador interativo de entretenimento doméstico portátil chamado Star7. No coração da interface de usuário animada de tela sensível ao toque estava um personagem de desenho animado chamado Duke.


O Duke saltitante e dando cambalhotas foi criado por um dos artistas gráficos da equipe. Ele seguiu para trabalhar em filmes animados populares como Shrek, Sobre Rodas e A Casa Monstro.


O Duke foi projetado para representar um "agente de software" que realizava tarefas para o usuário. Duke era o anfitrião interativo que permitia um novo tipo de interface de usuário que ia além dos botões, mouses e menus pop-up do mundo da computação desktop.


O Duke foi instantaneamente adotado. Na verdade, quase ao mesmo tempo em que o Java foi introduzido e o primeiro logo da xícara de Java foi encomendado, o Duke se tornou o mascote oficial da tecnologia Java. Em 2006, o Duke foi oficialmente "aberto" sob uma licença BSD. Desenvolvedores e designers foram incentivados a experimentar com o Duke e, pela primeira vez, tiveram acesso às especificações gráficas do Duke por meio de um projeto no java.net. Os esforços em torno do Duke agora são hospedados como "Project Duke" no OpenJDK.


Na Oracle, o Duke também é celebrado. Um Duke em tamanho real foi uma atração popular em todas as conferências de desenvolvedores JavaOne, e agora no principal evento de desenvolvedores da Oracle... o Oracle Code One.


🎉 Dando as Boas-Vindas ao Duke Surfista da Nuvem!

Este ano, a Oracle está lançando uma nova personalidade para o Duke que incorpora o espírito aberto e inovador e como o Java continua a se projetar para o futuro. Ajude a dar as boas-vindas ao Duke Surfista da Nuvem!

🌐 Visão Geral do JavaFX WebView: Como Embutir um Navegador em Aplicações Desktop

Visão Geral do JavaFX WebView

Neste blog, será analisada a forma como o JavaFX pode renderizar páginas da web e o componente responsável por isso – conhecido como WebView.


O JavaFX é uma:

  • Plataforma de software para criar e entregar aplicações desktop, bem como aplicações ricas para a internet (RIAs) que podem ser executadas em uma ampla variedade de dispositivos.
  • Conjunto de pacotes de gráficos e mídia que permite aos desenvolvedores projetar, criar, testar, depurar e implementar aplicações clientes ricas que operam de forma consistente em diversas plataformas.

Principais Características do JavaFX:

WebView: Um componente web que usa a tecnologia HTML WebKit para possibilitar a incorporação de páginas da web dentro de uma aplicação JavaFX. O JavaScript em execução no WebView pode chamar APIs Java, e as APIs Java podem chamar JavaScript em execução no WebView. Suporte para recursos adicionais do HTML5, incluindo Web Sockets, Web Workers e Web Fonts, e capacidades de impressão foram adicionados no JavaFX.


JavaFX WebView:

  • O JavaFX WebView é um mini navegador (também chamado de navegador embutido) que fornece um visualizador web e funcionalidade completa de navegação por meio de sua API em aplicações JavaFX.
  • Este navegador é baseado no WebKit, um mecanismo de navegador web de código aberto que suporta HTML5, JavaScript, CSS, renderização DOM e gráficos SVG.
  • A classe WebView é uma extensão da classe Node.
  • O navegador embutido herda todos os campos e métodos da classe Node e, portanto, possui todas as suas características.
  • Ele encapsula um objeto WebEngine, incorpora conteúdo HTML na cena de uma aplicação e fornece propriedades e métodos para aplicar efeitos e transformações.
  • O método getEngine() chamado em um objeto WebView retorna um WebEngine associado a ele.
  • As classes que constituem o navegador embutido residem no pacote javafx.scene.web.
  • O WebView permite que os desenvolvedores implementem os seguintes recursos em suas aplicações Java:
    • Renderizar conteúdo HTML de URLs locais ou remotas
    • Suportar histórico e fornecer navegação para Trás e Avançar
    • Recarregar o conteúdo
    • Aplicar efeitos ao componente web
    • Editar o conteúdo HTML
    • Executar comandos JavaScript
    • Realizar "upcalls" do JavaScript para o JavaFX
    • Manipular eventos

🔧 Funcionalidades Suportadas

O componente WebView suporta os seguintes recursos do HTML5, além de suportar CSS3 e ecmascript6 (ES6):

  • DOM3
  • Canvas
  • Reprodução de Mídia
  • Controles de Formulário (exceto para <input type="color">)
  • Conteúdo editável
  • Manutenção de histórico
  • Suporte para as tags <meter>, <progress>, <details> e <summary>
  • SVG
  • Web Sockets
  • Web Workers
  • Suporte para nomes de domínio escritos em idiomas nacionais

O diagrama abaixo descreve a arquitetura do navegador embutido e sua relação com outras classes JavaFX:

Web Engine:

  • É um objeto não visual capaz de gerenciar uma página Web por vez.
  • Fornece funcionalidade básica de página web por meio de sua API.
  • Suporta interação do usuário, como navegar por links e enviar formulários HTML, embora não interaja diretamente com os usuários.
  • Carrega páginas Web, cria seus modelos de documento, aplica estilos conforme necessário e executa JavaScript nas páginas.
  • Fornece acesso ao modelo de documento da página atual e permite comunicação bidirecional entre uma aplicação Java e o código JavaScript da página.
  • Envolve um objeto WebPage, que fornece interação com o núcleo WebKit nativo.

🔄 Relação entre as Classes WebView e WebEngine


Snippets de Código para Carregar Conteúdo no JavaFX WebView:

1️⃣ Criar objetos WebView, WebEngine e carregar via URL Remota

WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
webEngine.load("https://www.example.com");

2️⃣ Carregar Conteúdo HTML Estático

WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
webEngine.loadContent("<html><body><h1>Olá, Mundo!</h1></body></html>");

3️⃣ Carregar conteúdo HTML a partir de um arquivo local

WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
File file = new File("caminho/para/seu/arquivo.html");
webEngine.load(file.toURI().toString());

4️⃣ Rastrear o Progresso de Carregamento com a ajuda do LoadWorker

Worker<Void> loadWorker = webEngine.getLoadWorker();
loadWorker.stateProperty().addListener((obs, oldState, newState) -> {
    if (newState == Worker.State.SUCCEEDED) {
        System.out.println("Página carregada com sucesso!");
    }
});

O carregamento sempre acontece em uma thread em segundo plano. Métodos que iniciam o carregamento retornam imediatamente após agendar um trabalho em segundo plano.

Para rastrear o progresso e/ou cancelar um trabalho, pode-se usar a instância Worker disponível do método getLoadWorker().

O exemplo a seguir altera o título do palco quando o carregamento é concluído com sucesso:

loadWorker.stateProperty().addListener((observable, oldValue, newValue) -> {
    if (newValue == Worker.State.SUCCEEDED) {
        stage.setTitle(webEngine.getTitle());
    }
});

5️⃣ Acesso ao Modelo de Documento

Os objetos WebEngine criam e gerenciam um Modelo de Objeto de Documento (DOM) para suas páginas Web. O modelo pode ser acessado e modificado usando as classes Java DOM Core.

O método getDocument() fornece acesso à raiz do modelo. Além disso, a especificação DOM Event é suportada para definir manipuladores de eventos em código Java.

O exemplo a seguir anexa um listener de evento Java a um elemento de uma página Web. Clicar no elemento faz com que a aplicação seja encerrada:

EventListener listener = (Event ev) -> {
    Platform.exit();
};

Document doc = webEngine.getDocument();
Element el = doc.getElementById("sair");
((EventTarget) el).addEventListener("click", listener, false);

6️⃣ Chamar JavaScript a partir do JavaFX

Após o WebView carregar um site, é possível executar código JavaScript arbitrário no contexto da página atual usando o método executeScript(java.lang.String).

webEngine.executeScript("alert('Olá do JavaFX!');");

Mapeamento entre Java e JavaScript

7️⃣ Mapear Valores JavaScript para Objetos Java

  • Valores JavaScript são representados usando as classes Java óbvias: null se torna null em Java; um booleano se torna um java.lang.Boolean; e uma string se torna um java.lang.String.
  • Se o resultado for um objeto JavaScript, ele é empacotado como uma instância da classe JSObject.
  • A classe JSObject é um proxy que fornece acesso a métodos e propriedades de seu objeto JavaScript subjacente.
  • Os métodos JSObject mais comumente usados são getMember (para ler uma propriedade nomeada), setMember (para definir uma propriedade) e call (para chamar uma propriedade de valor de função).
  • Um DOM Node é mapeado para um objeto que estende JSObject e implementa as interfaces DOM apropriadas. Para obter um objeto JSObject para um Node, basta fazer um cast:
    JSObject jdoc = (JSObject) webEngine.getDocument();

8️⃣ Mapear Objetos Java para Valores JavaScript

  • Os argumentos dos métodos JSObject setMember e call passam objetos Java para o ambiente JavaScript.
  • Este é aproximadamente o inverso do mapeamento JavaScript para Java descrito acima: Objetos Java String, Number ou Boolean são convertidos para os valores JavaScript óbvios.
  • Um objeto JSObject é convertido para o objeto JavaScript empacotado original. Caso contrário, um JavaRuntimeObject é criado.
  • Este é um objeto JavaScript que atua como um proxy para o objeto Java, no sentido de que acessar propriedades do JavaRuntimeObject faz com que o campo ou método Java com o mesmo nome seja acessado.

Atualização do WebKit no JDK

O mecanismo WebKit do WebView é baseado na porta Apple Safari. Esta porta também é usada por iOS, GTK, WinCairo, EFL etc.

O ciclo de lançamento do WebKit GTK é seguido e o WebKit será atualizado a cada 6 meses.

O objetivo de atualizar o WebKit é ter correções de vulnerabilidades de segurança, além de novos recursos e adesão aos padrões mais recentes.