SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
1


Applets – O Retorno
A nova geração dos Plug-ins Java
Aprenda sobre o novo Java Plug-in com exemplos práticos em Java e JavaFX

SERGE REHEM E ULISSES TELEMACO

Resumo:

 Meio “esquecidas” em meio a tantas novidades no mundo RIA (Adobe Flash/Flex/Air, Microsoft
Silverlight, JavaFX, ...), a nova Arquitetura de Plug-ins pode colocar novamente as Applets como
opção a ser considerada. Elas podem ser utilizadas para o desenvolvimento desde pequenos
componentes a serem embutidos em páginas web tradicionais (como botões “estilizados”,
animações ou gráficos) até aplicações mais completas (como o preenchimento de um cadastro ou
questionário) similares a uma aplicação Desktop. A arquitetura atual oferece suporte a praticamente
as mesmas vantagens destinadas às aplicações Java WebStart.
 Iniciaremos relembrando a forma tradicional de construir Applets e mostrando um overview dessa
tecnologia. Em seguida apresentaremos as principais novidades da nova arquitetura do Java Plug-in,
mostrando exemplos práticos com Java e JavaFX testados em Windows, Linux e Mac OS. Veremos
como o uso de JNLP - o mesmo formato destinado às aplicações Java WebStart - permite a
customização de uma série de propriedades como, por exemplo, a seleção da JVM específica a ser
utilizada, o uso de um espaço próprio de endereçamento pra cada Applets, a possibilidade de
fornecer parâmetros individuais para a JVM, a opção de mudar a imagem de fundo padrão do Java
apresentada no momento de carga, entre outras. Uma das grandes novidades é a funcionalidade de
“arrastar-soltar” que permite que uma Applet para seja arrastada “fora do navegador” fazendo-a
executar de forma independente. Ao final, são apresentadas sugestões de leituras adicionais para
aqueles que desejem maior aprofundamento no tema.
 Quando nasceu o Java, há mais de 10 anos, os "mini-aplicativos" Java que rodavam no navegador
eram seu "grande barato". Na época era comum a discussão "quem é melhor? Applets Java ou
ActiveX da Microsoft?". Passado tanto tempo, até então praticamente nenhuma evolução
tecnológica significativa aconteceu com as Applets (bom, quanto aos ActiveX, melhor nem falar...).
O Java 1.6 update 10 veio para mudar radicalmente esse cenário, apresentando a nova geração dos
plug-ins Java. Este artigo cobrirá as principais mudanças na arquitetura de plug-ins, mostrando com
exemplos práticos que as Applets definitivamente estão de volta.

Relembrando

  Uma Applet é um tipo especial de programa Java, embutido em uma página HTML, que é
executado no contexto de um navegador habilitado para uso da tecnologia Java. Na prática, é uma
subclasse de java.applet.Applet (ou javax.swing.JApplet), que fornece uma interface
entre o programa e o ambiente do navegador. Embora aprofundar todos conceitos da tecnologia
Applet não seja o objetivo principal desse artigo, vamos relembrar a seguir os principais. Para isso,
iremos construir uma Applet tradicional, depois introduziremos gradativamente a nova arquitetura
de Plug-ins Java.
 O código a seguir cria uma Applet simples que exibe na tela a mensagem "Olá Java Bahia!".


import javax.swing.JApplet;
import javax.swing.JLabel;
2

public class OlaJavaBahia extends JApplet {
  @Override
  public void start() {
    getContentPane().add(new JLabel("Olá " + getParameter("nome") + "!"));
  }
}

 Para executá-lo em um navegador será necessário criar uma página HTML e utilizar a tag
<applet>1. Exemplo:

<html>
   <body>
     <h1>Minha primeira Applet</h1>
     <applet code="OlaJavaBahia.class" width="200" height="50">
        <param name="nome" VALUE="JavaBahia"/>
        Seu navegador não suporta Applets!
     </applet>
   </body>
</html>

    E o resultado seria:




                                   Figura 1. Applet Tradicional

Limitações conhecidas

 As tradicionais Applets possuem várias limitações. Algumas delas decorre do fato de a JRE e o
navegador executarem no mesmo espaço de endereçamento:
   • O navegador "congela" quando o JRE é iniciado pela primeira vez;
   • Um travamento no JRE trava também o navegador;
   • Apenas uma versão de JRE pode ser usada por vez;
   • O desenvolvedor não tem o controle sobre qual versão de JRE está sendo utilizada, nem
       pode passar parâmetros para a JVM (para, por exemplo, configurar memória);


1
 A tag <applet> é recomendada para ambientes onde a portabilidade de navegador
é um requisito importante (a Internet por exemplo). Em ambientes mais controlados,
como as Intranets, é possível também usar as tags <object>, que funcionará apenas
no Internet Explorer, e <embed>, para a família de navegadores Mozilla.
3

Outras limitações estão associadas às restrições (necessárias) de segurança:
   • As Applets não tem acesso ao Sistema de Arquivos e portanto não podem ler ou escrever
       arquivos na máquina do cliente.
   • As Applets não se estabelecer conexões com outras máquinas, exceto com o servidor de
       origem da Applet.
   • As Applet não conseguem iniciar ou finalizar um programa na máquina do cliente.

Nova Geração do Java Plug-in
 A nova geração do Java Plug-in traz uma arquitetura totalmente redesenhada e resolve vários
problemas conhecidos da geração anterior. Dentre as principais vantagens dessa nova arquitetura,
destacamos o fato de a JVM ser executada em um contexto independente do navegador. Assim,
caso ocorra algum erro de execução em uma Applet específica, o novo Java Plug-in consegue tratar
o problema sem afetar o funcionamento do navegador. O Quadro 1 resume as principais vantagens.

Quadro 1 – Vantagens da Nova Arquitetura do Java Plug-in
Maior Confiabilidade         A Applet pode ser configurada para utilizar uma JVM independente do navegador.
                             Nesse caso, o Java Plug-in detecta e trata os problemas sem que o navegador seja
                             afetado.
Suporte a JNLP               O novo Java Plug-in oferece as mesmas facilidades destinadas a aplicações Java
                             WebStart, permitindo carregar Applets diretamente a partir de arquivos JNLP (Java
                             Network Launching Protocol). É possível inclusive acessar as APIs JNLP para
                             persistência, acesso ao sistema de arquivos e outras funcionalidades.
Argumentos de linha de       Pode-se especificar parâmetros para a JVM (semelhante aos parâmetros passados por
comando por Applet           linha de comando) por Applet. Dessa forma, é possível configurar, por exemplo, o
                             tamanho do heap de memória ou funcionalidades de aceleração de hardware 2D.
Suporte a múltiplas          Agora é possível explicitar qual versão de JRE deve ser utilizada pela Applet. Cada
versões de JRE               instância individual de um Applet pode exigir executar uma versão específica de JRE
Melhor comunicação           Houve uma considerável melhora na comunicação entre JavaScript e Java Applet com
Java/JavaScript              compatibilidade entre os navegadores garantida. A API JavaScript pode ser usada para:
                             detectar JRE, instalar/atualizar JRE, executar Applets, acionar programas Java
                             WebStart, etc.
Melhor controle do ciclo de O comportamento das chamadas aos métodos de controle do ciclo de vida da API
vida de uma Applet          Applet (init, start, stop e destroy) agora estão mais determinísticos e a portabilidade
                            entre os navegadores aperfeiçoada.
Melhor configuração do       A quantidade máxima de memória que podia ser configurada para uma Applet era
espaço de memória            limitada na versão anterior do Java Plug-in. Essa limitação foi retirada da nova versão e
                             as Applets podem ser configuradas para utilizar a mesma quantidade de memória das
                             aplicações de linha de comando.
Melhor experiência do        Melhora de responsividade do navegador fazendo o carregamento de Applets em
usuário                      segundo plano. As Applets são carregadas em background, então o navegador continua
                             respondendo normalmente. A Applet aparece na página web apenas quando estiver
                             totalmente pronta para ser executada.
Suporte melhorado para        Assinando as Applets, é possível que neste ambiente elas possuam os mesmo
Windows Vista                privilégios que aplicações comuns.



Applets com JNLP
 O Java Network Launch Protocol, JNLP, é a forma padrão de realizar a distribuição e instalação
de aplicações Java WebStart. A nova arquitetura de plug-ins do Java permite a utilização do mesmo
descritor JNLP, o que fará com que a Applet se comporte como uma aplicação convencional
acionada via WebStart. Retomando o exemplo anterior, poderíamos reescrever a tag <applet>
da seguinte forma:
4


 <applet code="javabahia.javaplugin.OlaJavaBahia" width="200" height="50">
   <param name="nome" value="JavaBahia">
   <param name="jnlp_href" value="olajavabahia.jnlp">
 </applet>

 Nesse segundo exemplo pressupomos que a classe OlaJavaBahia pertence ao pacote
javabahia.javaplugin e que é compilada em novojavaplugin.jar. Observe que o
parâmetro jnlp_href aponta para o arquivo JNLP da listagem abaixo. Vamos analisá-lo com mais
detalhe.
1.     <?xml version="1.0" encoding="UTF-8"?>
2.     <jnlp href="olajavabahia.jnlp">
3.      <information>
4.        <title>Olá JavaBahia Applet</title>
5.        <vendor>JavaBahia.org</vendor>
6.      </information>
7.      <resources>
8.        <j2se version="1.4+" href="http://java.sun.com/products/autodl/j2se" />
9.        <jar href="novojavaplugin.jar" main="true" />
10.     </resources>
11.     <applet-desc name="Olá JavaBahia Applet"
12.      main-class="javabahia.javaplugin.OlaJavaBahia"
13.      width="1"
14.      height="1" />
15.    </jnlp>

 O elemento <information> (linhas 3 a 6) é requerido e contém informações sobre o autor e
vendedor da Applet. As linhas 7 a 10 (tag <resources>) apresentam novidades interessantes:
A tag <j2se version="1.4+">2 informa a versão mínima da JVM3 aceita para executar a
Applet. A tag <jar> aponta para o arquivo do tipo JAR que contém o código executável da
Applet. A tag <applet-desc> (linhas 11 a 14) informa o nome da Applet (atributo name) e
indica o nome da classe principal (atributo main-class> e pode sobrecarregar alguns parâmetros
da tag <applet> do arquivo HTML. Neste exemplo, apesar de fornecidos, os atributos width e
height do JNLP são desconsiderados, prevalecendo as propriedades definidas na tag <applet>.
Isso ocorre porque pressupõe-se que o navegador sabe melhor como acomodar a Applet na página
web, e apenas ele pode suportar altura e largura relativos à pagina (ex: width=“40%”). Consulte a
página oficial do novo Java Plug-in para saber detalhes sobre todos os parâmetros suportados e as
formas de resolver outros tipo de conflito.
Parâmetros de Configuração da JVM

Além da opção de disponibilizar uma Applet a partir de um arquivo JNPL, é possível utilizar a tag
<applet> associada a uma série de parâmetros (tag <param>) específicos da JVM. Veremos
a partir de agora os três principais tipos de configuração para JVM: separate_jvm,
java_version e java_arguments. Veja o exemplo abaixo:
<applet code="javabahia.javaplugin.OlaJavaBahia" width="200" height="50">
   ...


2
  A tag <j2se> também suporta argumentos de linha de comando a serem passados
para a JVM, como propriedades do sistema ou o tamanho máximo do heap, Caso
nenhuma JVM ativa atenda o desejado, uma nova instância será lançada. Consulte as
referências ao final do artigo para mais detalhes.
3
  Uma vez que o suporte a JNLP no Java Plug-in só está disponível a partir da versão
1.6update10, especificações tipo “1.4+” basicamente não tem serventia.
Especificações de versão farão mais sentido quando pudermos usar por exemplo
“1.7+” (a partir da versão 1.7), “1.7*” (qualquer update da família 1.7) ou “1.6.0_13”
(apenas na verão 1.6 udpate 13).
5

   <param name="separate_jvm" value="true" />
   <param name="java_version" value="1.5+" />
   <param name="java_arguments" value="-Xmx128m" />
</applet>

Através do primeiro parâmetro (separate_jvm) uma Applet pode ser executada em uma
instância própria da JVM, separada de todas as outras Applets. Isso pode ser útil ao migrar certos
tipos de aplicações Desktop para uso direto no browser. O segundo parâmetro (java_version)
permite especificar a versão mínima da JVM necessária para executar a Applet. Já o terceiro
parâmetro (java_arguments) foi usado para configurar o total máximo de memória que a
Applet pode utilizar em tempo de execução.
Funcionalidade “Arrastar-Soltar”
  Uma das novidades interessantes da nova arquitetura do Java Plug-in é a possibilidade de arrastar
uma Applet e soltá-la na área de trabalho. No entanto, vale ressaltar que essa é uma funcionalidade
experimental e que não há garantias que ela continuará sendo suportada nas próximas versões do
Java Plug-in. Para habilitar essa funcionalidade basta acrescentar o parâmetro <param
name=“draggable” value=“true” /> dentro da tag <applet>. Para testar, utilize a
combinação (tecla Alt + botão esquerdo do mouse) e arraste a Applet para a sua área de trabalho.
Você irá observar um pequeno botão de fechar no canto superior direito. A API Applet permite
ainda customizar o gesto do “arrastar”, o botão fechar e a imagem de carregamento (substituindo a
tradicional xícara de café do Java).
  Enquanto a página de onde veio a Applet estiver aberta, ela poderá retornar ao seu lugar de
origem. Se a página for fechada, recarregada ou navegada para uma outra, a Applet é desconectada
do navegador e passa a executar de forma independente.

Em algumas plataformas Linux essa combinação (tecla Alt + botão esquerdo
do mouse) é normalmente usada para mover janelas, então é preciso alterar o
comportamento dessa combinação no gerenciador de janelas desse Sistema
Operacional. Opcionalmente, pode-se customizar a combinação no Applet. Para
isso implemente na Applet um método público com a interface public
boolean isAppletDragStart(MouseEvent e);


Integração com JavaScript

 A especificação LiveConnect, usada para integração entre JavaScript e Java Applet, foi totalmente
reimplementada. A nova arquitetura        garante maior confiabilidade, compatibilidade entre
navegadores e performance, tanto para Javascript chamando Applets quanto para Applets chamando
métodos Javascript.
 Veja um exemplo de Javascript invocando método de um Applet.

import javax.swing.JApplet;
import javax.swing.JLabel;



public class OlaJavaBahia extends JApplet {

    @Override
    public void start() {
        getContentPane().add(new JLabel("Olá " + getParameter("nome") + "!"));
    }

    public String upperCase(String s){
6

         return s.toUpperCase();
    }
}

 A chamada ao método upperCase é feita de forma transparente:

<html>
   <body>
     <h1>Minha primeira Applet</h1>
     <applet id="app" code="OlaJavaBahia.class" archive="OlaJavaBahiaApplet.jar"
              width="200" height="50">
        <param name="nome" VALUE="Java Bahia"/>
        Seu navegador não suporta Applets!
     </applet>
     <script language="javascript">
         var msg = app.upperCase("Olá Java Bahia!!!");
         document.write(msg);
    </script>
   </body>
</html>

E o resultado pode ser visto na Figura 2 abaixo:




                             Figura 2. Integração entre JavaScript e Applet

 Evitando tornar o artigo muito longo, não vamos detalhar aqui a integração com JavaScript. Para
maiores informações (como por exemplo como chamar um método JavaScript dentro de um
Applet), favor consultar a documentação do LiveConnect indicada no final desse artigo.

Preparando o navegador

 O novo Java Plug-In foi projeto para funcionar no Internet Explorer 6 e 7, no Windows XP e
Vista, e no Firefox 3, no Windows XP ou Vista, Solaris e Linux.
  A configuração do Internet Explorer deve ser feita pelo Painel de Controle Java (Java Control
Panel), acessível pelo Painel de Controle do Windows XP ou Vista, habilitando a nova geração do
Java Plug-In na guia Avançado (Advanced), como na Figura 3.
7




                        Figura 3. Habilitando o novo Java Plug-in no Windows

 No Linux ou Solaris a configuração Firefox 3 é um pouquinho mais complicada. É necessário criar
manualmente um link simbólico (symlink) para a novo Java Plug-in. Para isso, abra um terminal e
vá para a pasta plugins em seu diretório de instalação do Firefox (por exemplo: /etc/lib/firefox-
3.0.10/plugins) e crie execute o comando ln -s apontando para sua pasta <JRE_HOME |
JDK_HOME>/jre/lib/{i386,sparc}/libnpjp2.so. Por exemplo:
cd /opt/firefox/plugins
ln -s /usr/jvm/lib/sun-java6/jre/lib/i386/libnpjp2.so
8


Applets JavaFX com NetBeans

 Explorando ainda mais as possibilidades do novo Java Plug-in, veremos agora como criar uma
Applet com JavaFX, uma plataforma de software multimídia para a criação e disponibilização de
Internet Rica, que pode ser executada em vários dispositivos diferentes. Totalmente baseada em
Java, JavaFx permite criar aplicações de altíssima qualidade visual e interatividade para rodar em
desktop, browser, telefone celulares, video-games, Blu-rays e até na TV Digital. Entrar em detalhes
foge do escopo do artigo, então recomendamos uma visita ao http://javafx.com para quem deseja
conhecer um pouco mais.
 Usando o NetBeans 6.8 (a versão mais recente, até a escrita deste artigo, da única IDE com suporte
a JavaFX), crie um novo projeto da Categoria JavaFX e escolha JavaFX Script Application.
Preencha as informações como na Figura 4.




                       Figura 4. Criação de um projeto JavaFX no NetBeans 6.8

 Depois de criar o projeto OlaJavaBahiaJavaFX, clique com o botão direito em seu nome e escolha
a opção Properties (Propriedades). Na categoria Run (Executar), crie uma nova Configuração
clicando em New (Novo) e digite Applet. Selecione a opção Run in Browser (Executar no
Navegador). Sua tela deverá estar como na Figura 5.
9




                     Figura 5: Configuração do projeto JavaFX no Netbeans 6.8

 Em seguida, ainda na janela de Propriedades, escolha a categoria Application (Aplicação) e
preencha como na Figura 6. Observe que a opção Draggable Applet deve estar marcada.




                            Figura 6. Alterando preferências do projeto

 O código gerado automaticamente pelo NetBeans já pode ser executado. Será aberta uma página
no navegador mostrando uma página HTML contendo código JavaFX Script exibindo o texto
“Application Content” abaixo do título OlaJavaBahiaJavaFX em negrito. No subdiretório dist do
seu projeto, observe que, além dos arquivos do tipojar, foram criados um arquivo HTML e dois
JNLP (um para execução no navegador como Applet, outro como aplicativo Java WebStart).
10




                        Figura 7. Arquivos gerados automaticamente no build do NetBeans

 Na listagem a seguir é mostrado o código Java FX Script do arquivo Main.fx. As linhas destacadas
em negrito foram alteradas ou acrescentadas para dar um melhor comportamento visual à Applet,
alterando as cores de frente e fundo e adicionando um efeito chamado reflexão.
Main.fx
1.        package olajavabahiajavafx;
2.
3.        import   javafx.stage.Stage;
4.        import   javafx.scene.Scene;
5.        import   javafx.scene.text.Text;
6.        import   javafx.scene.text.Font;
7.        import   javafx.scene.effect.Reflection;
8.        import   javafx.scene.shape.Rectangle;
9.        import   javafx.scene.paint.Color;
10.
11.       Stage {
12.           title: "Olá JavaBahia JavaFX"
13.           scene: Scene {
14.               width: 250
15.               height: 80
16.               content: [
17.                   Rectangle {
18.                       x: 0, y: 0
19.                       width: 200, height: 80
20.                       fill: Color.BLACK
21.                   }
22.                   Text {
23.                       font: Font {
24.                           size: 16
25.                       }
26.                       x: 10
27.                       y: 30
28.                       content: "Olá JavaBahia"
29.                       fill: Color.WHITE
30.                       effect: Reflection {fraction: 0.9 topOpacity: 0.9 topOffset: 0.1};
31.                   }
32.               ]
33.           }
34.       }


 O arquivo OlaJavaBahiaJavaFX_browser.jnlp, mostrado em seguida, traz várias tags que não
foram discutidas até aqui. Não vamos explicá-las porque consideramos que elas são bastante auto-
explicativas. Caso o leitor tenha alguma dúvida sobre essas tags, sugerimos a leitura das referências
indicadas no final desse artigo.
11


   1. <?xml version="1.0" encoding="UTF-8"?>
   2. <jnlp spec="1.0+" codebase="file:/home/serge/NetBeansProjects/OlaJavaBahiaJavaFX/dist/"
   3.       href="OlaJavaBahiaJavaFX_browser.jnlp">
   4.     <information>
   5.         <title>OlaJavaBahiaJavaFX</title>
   6.         <vendor>JavaBahia</vendor>
   7.         <homepage href=""/>
   8.         <description>OlaJavaBahiaJavaFX</description>
   9.         <offline-allowed/>
   10.         <shortcut>
   11.             <desktop/>
   12.         </shortcut>
   13.     </information>
   14.     <security>
   15.         <all-permissions/>
   16.     </security>
   17.     <resources>
   18.         <j2se version="1.5+"/>
   19.         <property name="jnlp.packEnabled" value="true"/>
   20.         <property name="jnlp.versionEnabled" value="true"/>
   21.         <extension name="JavaFX Runtime" href="http://dl.javafx.com/1.2/javafx-rt.jnlp"/>
   22.         <jar href="OlaJavaBahiaJavaFX.jar" main="true"/>
   23.     </resources>
   24.     <applet-desc name="OlaJavaBahiaJavaFX" main-class="com.sun.javafx.runtime.adapter.Applet"
   25.                  width="200" height="200">
   26.         <param name="MainJavaFXScript" value="olajavabahiajavafx.Main">
   27.     </applet-desc>
   28.     <update check="background">
   29. </jnlp>


 O código do arquivo OlaJavaBahiaJavaFX.html, contudo, será alterado para os fins didáticos.
Observe que as linhas de 14 a 26 foram comentadas, pois o NetBeans não gera o código usando a
tag <applet> que estamos estudando aqui. Em seu lugar, é usada a tag <script> e dentro
dele, o código JavaFX que carrega o script Main.fx no browser. No lugar desse trecho, pusemos
uma chamada padrão usando a tag <applet> e fornecendo o parâmetro draggable=“true”.
   1. <html>
   2.     <head>
   3.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   4.         <title>OlaJavaBahiaJavaFX</title>
   5.     </head>
   6.     <body>
   7.         <h1>OlaJavaBahiaJavaFX</h1>
   8.         <applet code="OlaJavaBahiaJavaFX" archive="OlaJavaBahiaJavaFX.jar" width="200"
   9.                  height="60">
   10.              <param name="jnlp_href" value="OlaJavaBahiaJavaFX_browser.jnlp"/>
   11.              <param name="draggable" value="true"/>
   12.         </applet>
   13.         <!--
   14.         <script src="http://dl.javafx.com/1.2/dtfx.js"></script>
   15.         <script>
   16.              javafx(
   17.                  {
   18.                        archive: "OlaJavaBahiaJavaFX.jar",
   19.                        draggable: true,
   20.                        width: 200,
   21.                        height: 200,
   22.                        code: "olajavabahiajavafx.Main",
   23.                        name: "OlaJavaBahiaJavaFX"
   24.                  }
   25.              );
   26.         </script>
   27.         -->
   28.     </body>
   29. </html>
12


 Por fim, o resultado final o resultado final da nossa “AppletFX” pode ser conferido na Figura 8.




                           Figura 8. Visualização da Applet feita em JavaFX

Conclusão
 Este artigo procurou relembrar as tradicionais Applets, apresentando as novas possibilidades
disponíveis para Java e JavaFX a partir da Java SE 1.6 update 10 com o novo Java Plug-In. Depois
de muito tempo “estagnadas”, o leitor deve ter percebido que a Sun correu atrás do prejuízo e
apresenta agora opções bem interessantes para que o desenvolvedor possa voltar a considerar o uso
Applets em suas aplicações e páginas Web.


Links
http://java.sun.com/docs/books/tutorial/deployment/applet/index.html
Applet Tutorial
http://java.sun.com/j2se/1.4.2/docs/guide/misc/applet.html
Sintaxe completa da tag Applet
http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/contents.html
Guia do Java Plugin, antes do Jdk1.6u10
http://java.sun.com/javase/6/docs/technotes/guides/jweb/index.html
Applets e Aplicações Java WebStart para o Jdk1.6u10
http://java.sun.com/developer/technicalArticles/javase/6u10_applets
A nova feature Draggable Applet no Java SE 6 Update 10 Plug-In
https://jdk6.dev.java.net/plugin2
Notas de versão da Nova Geração do Java Plug-In
http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-6290.pdf
Apresentação no JavaOne 2008 sobre sobre o novo Java Plug-in
https://jdk6.dev.java.net/plugin2/jnlp/
Suporte a JNLP no novo Java Plug-in
https://jdk6.dev.java.net/plugin2/version-selection/
Seleção de versão da JVM com o novo Java Plug-in
https://jdk6.dev.java.net/plugin2/liveconnect/
Integração entre Java Applet e Javascript
https://scenegraph-demos.dev.java.net/demo-applets.html
Demonstrações de Applets usando o novo Java Plug-in
Serge Rehem (serge.rehem@gmail.com) é PMP, MBA em Administração pela Unifacs, especialista em
Sistemas Distribuídos pela UFBA. Analista do Serpro/Salvador desde 1997, atualmente coordena a equipe
técnica do Framework Demoiselle, na projeção da Coordenação Estratégica de Tecnologia (Cetec) na
regional Salvador. É líder do JavaBahia e mantém o blog bazedral.blogspot.com, sobre trabalho
colaborativo nas empresas.

Ulisses Telemaco (ulisses@jeebrasil.com.br) é idealizador, fundador e mantenedor do projeto JEEBrasil.
Formado em Ciência da Computação pela UFRN. Mestrando em Mecatrônica pela UFBA. Palestrante em
vários eventos Java como JustJava, Abaporu, Natal Java Day, Salvador Java Day, Maratona 4 Java, entre
outros. Participou ativamente da organização dos JUGs JavaBahia e JavaRN. Atualmente trabalha como
Arquiteto de Software na OWSE Informática no Rio de Janeiro. Reforça o time do SouJava na terra
maravilhosa.

Mais conteúdo relacionado

Mais procurados

Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Emerson Saito
 
Spring: uma introdução prática
Spring: uma introdução práticaSpring: uma introdução prática
Spring: uma introdução práticaJosé Barros
 
Mvc model view controller - java para desenvolvimento web
Mvc   model view controller - java para desenvolvimento webMvc   model view controller - java para desenvolvimento web
Mvc model view controller - java para desenvolvimento webValdir Junior
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Strutseduan
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 
O framework spring
O framework springO framework spring
O framework springBruno Catão
 
Introdução ao zend framework
Introdução ao zend frameworkIntrodução ao zend framework
Introdução ao zend frameworkMarcos Oliveira
 
Apostila de programacao java
Apostila de programacao javaApostila de programacao java
Apostila de programacao javaCleber Costa
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 

Mais procurados (19)

Apostila java
Apostila javaApostila java
Apostila java
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Applets
AppletsApplets
Applets
 
Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL
 
Spring: uma introdução prática
Spring: uma introdução práticaSpring: uma introdução prática
Spring: uma introdução prática
 
Mvc model view controller - java para desenvolvimento web
Mvc   model view controller - java para desenvolvimento webMvc   model view controller - java para desenvolvimento web
Mvc model view controller - java para desenvolvimento web
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
O framework spring
O framework springO framework spring
O framework spring
 
Eclipse uml
Eclipse umlEclipse uml
Eclipse uml
 
Introdução ao zend framework
Introdução ao zend frameworkIntrodução ao zend framework
Introdução ao zend framework
 
Apostila de programacao java
Apostila de programacao javaApostila de programacao java
Apostila de programacao java
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
Java Web 1 Introducao
Java Web 1 IntroducaoJava Web 1 Introducao
Java Web 1 Introducao
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Curso tomcat
Curso tomcatCurso tomcat
Curso tomcat
 

Semelhante a A nova geração dos Applets Java

Semelhante a A nova geração dos Applets Java (20)

Iniciação JSP!
Iniciação JSP!Iniciação JSP!
Iniciação JSP!
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves Pages
 
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoModularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
 
Instalacao eclipse-servidor-tomcat
Instalacao eclipse-servidor-tomcatInstalacao eclipse-servidor-tomcat
Instalacao eclipse-servidor-tomcat
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuração
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
Java apostilha
Java apostilhaJava apostilha
Java apostilha
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com Java
 
Apostila java
Apostila javaApostila java
Apostila java
 
Tutorial De Instalação Do Tomcat
Tutorial De Instalação Do TomcatTutorial De Instalação Do Tomcat
Tutorial De Instalação Do Tomcat
 
Introdução - Java WEB
Introdução - Java WEBIntrodução - Java WEB
Introdução - Java WEB
 
Jsf
JsfJsf
Jsf
 
Java pode ser_hipster
Java pode ser_hipsterJava pode ser_hipster
Java pode ser_hipster
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Apostila de java
Apostila de javaApostila de java
Apostila de java
 
Tecnologia Java
Tecnologia JavaTecnologia Java
Tecnologia Java
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane Fidelix
 

Mais de Serge Rehem

Envie Certificados em PDF com Certiflink
Envie Certificados em PDF com CertiflinkEnvie Certificados em PDF com Certiflink
Envie Certificados em PDF com CertiflinkSerge Rehem
 
Product-led Growth - Produtos que se vendem sozinho (será?)
Product-led Growth - Produtos que se vendem sozinho (será?)Product-led Growth - Produtos que se vendem sozinho (será?)
Product-led Growth - Produtos que se vendem sozinho (será?)Serge Rehem
 
Product-led Growth: Produtos que se vendem sozinhos
Product-led Growth: Produtos que se vendem sozinhosProduct-led Growth: Produtos que se vendem sozinhos
Product-led Growth: Produtos que se vendem sozinhosSerge Rehem
 
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...Serge Rehem
 
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...Serge Rehem
 
Vamos falar sobre feedback?
Vamos falar sobre feedback?Vamos falar sobre feedback?
Vamos falar sobre feedback?Serge Rehem
 
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações Técnicas
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações TécnicasBitcoin Direto ao Ponto, Na Prática e Sem Complicações Técnicas
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações TécnicasSerge Rehem
 
Empreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos DigitaisEmpreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos DigitaisSerge Rehem
 
MVP Canvas: Protótipos Organizados, Negócios Acelerados
MVP Canvas: Protótipos Organizados, Negócios AceleradosMVP Canvas: Protótipos Organizados, Negócios Acelerados
MVP Canvas: Protótipos Organizados, Negócios AceleradosSerge Rehem
 
Micro-Lançamentos em 7 Passos
Micro-Lançamentos em 7 PassosMicro-Lançamentos em 7 Passos
Micro-Lançamentos em 7 PassosSerge Rehem
 
Empreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos DigitaisEmpreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos DigitaisSerge Rehem
 
Vendas SPIN: Perguntas que vendem CARO!
Vendas SPIN: Perguntas que vendem CARO!Vendas SPIN: Perguntas que vendem CARO!
Vendas SPIN: Perguntas que vendem CARO!Serge Rehem
 
O que uma Matryoshka me ensinou sobre Marketing Digital
O que uma Matryoshka me ensinou sobre Marketing Digital O que uma Matryoshka me ensinou sobre Marketing Digital
O que uma Matryoshka me ensinou sobre Marketing Digital Serge Rehem
 
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu Favor
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu FavorGanhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu Favor
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu FavorSerge Rehem
 
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing Digital
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing DigitalO Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing Digital
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing DigitalSerge Rehem
 
Como o Marketing Digital Pode Turbinar Sua Carreira em TI
Como o Marketing Digital Pode Turbinar Sua Carreira em TIComo o Marketing Digital Pode Turbinar Sua Carreira em TI
Como o Marketing Digital Pode Turbinar Sua Carreira em TISerge Rehem
 
Saia da Inércia!
Saia da Inércia!Saia da Inércia!
Saia da Inércia!Serge Rehem
 
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...Serge Rehem
 
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto PrimeiroComo Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto PrimeiroSerge Rehem
 

Mais de Serge Rehem (20)

Envie Certificados em PDF com Certiflink
Envie Certificados em PDF com CertiflinkEnvie Certificados em PDF com Certiflink
Envie Certificados em PDF com Certiflink
 
Product-led Growth - Produtos que se vendem sozinho (será?)
Product-led Growth - Produtos que se vendem sozinho (será?)Product-led Growth - Produtos que se vendem sozinho (será?)
Product-led Growth - Produtos que se vendem sozinho (será?)
 
Product-led Growth: Produtos que se vendem sozinhos
Product-led Growth: Produtos que se vendem sozinhosProduct-led Growth: Produtos que se vendem sozinhos
Product-led Growth: Produtos que se vendem sozinhos
 
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...
 
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...
 
Vamos falar sobre feedback?
Vamos falar sobre feedback?Vamos falar sobre feedback?
Vamos falar sobre feedback?
 
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações Técnicas
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações TécnicasBitcoin Direto ao Ponto, Na Prática e Sem Complicações Técnicas
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações Técnicas
 
Empreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos DigitaisEmpreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos Digitais
 
MVP Canvas: Protótipos Organizados, Negócios Acelerados
MVP Canvas: Protótipos Organizados, Negócios AceleradosMVP Canvas: Protótipos Organizados, Negócios Acelerados
MVP Canvas: Protótipos Organizados, Negócios Acelerados
 
Micro-Lançamentos em 7 Passos
Micro-Lançamentos em 7 PassosMicro-Lançamentos em 7 Passos
Micro-Lançamentos em 7 Passos
 
Empreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos DigitaisEmpreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos Digitais
 
Vendas SPIN: Perguntas que vendem CARO!
Vendas SPIN: Perguntas que vendem CARO!Vendas SPIN: Perguntas que vendem CARO!
Vendas SPIN: Perguntas que vendem CARO!
 
O que uma Matryoshka me ensinou sobre Marketing Digital
O que uma Matryoshka me ensinou sobre Marketing Digital O que uma Matryoshka me ensinou sobre Marketing Digital
O que uma Matryoshka me ensinou sobre Marketing Digital
 
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu Favor
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu FavorGanhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu Favor
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu Favor
 
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing Digital
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing DigitalO Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing Digital
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing Digital
 
Como o Marketing Digital Pode Turbinar Sua Carreira em TI
Como o Marketing Digital Pode Turbinar Sua Carreira em TIComo o Marketing Digital Pode Turbinar Sua Carreira em TI
Como o Marketing Digital Pode Turbinar Sua Carreira em TI
 
Saia da Inércia!
Saia da Inércia!Saia da Inércia!
Saia da Inércia!
 
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...
 
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto PrimeiroComo Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
 
Manifesto Ágil
Manifesto ÁgilManifesto Ágil
Manifesto Ágil
 

A nova geração dos Applets Java

  • 1. 1 Applets – O Retorno A nova geração dos Plug-ins Java Aprenda sobre o novo Java Plug-in com exemplos práticos em Java e JavaFX SERGE REHEM E ULISSES TELEMACO Resumo: Meio “esquecidas” em meio a tantas novidades no mundo RIA (Adobe Flash/Flex/Air, Microsoft Silverlight, JavaFX, ...), a nova Arquitetura de Plug-ins pode colocar novamente as Applets como opção a ser considerada. Elas podem ser utilizadas para o desenvolvimento desde pequenos componentes a serem embutidos em páginas web tradicionais (como botões “estilizados”, animações ou gráficos) até aplicações mais completas (como o preenchimento de um cadastro ou questionário) similares a uma aplicação Desktop. A arquitetura atual oferece suporte a praticamente as mesmas vantagens destinadas às aplicações Java WebStart. Iniciaremos relembrando a forma tradicional de construir Applets e mostrando um overview dessa tecnologia. Em seguida apresentaremos as principais novidades da nova arquitetura do Java Plug-in, mostrando exemplos práticos com Java e JavaFX testados em Windows, Linux e Mac OS. Veremos como o uso de JNLP - o mesmo formato destinado às aplicações Java WebStart - permite a customização de uma série de propriedades como, por exemplo, a seleção da JVM específica a ser utilizada, o uso de um espaço próprio de endereçamento pra cada Applets, a possibilidade de fornecer parâmetros individuais para a JVM, a opção de mudar a imagem de fundo padrão do Java apresentada no momento de carga, entre outras. Uma das grandes novidades é a funcionalidade de “arrastar-soltar” que permite que uma Applet para seja arrastada “fora do navegador” fazendo-a executar de forma independente. Ao final, são apresentadas sugestões de leituras adicionais para aqueles que desejem maior aprofundamento no tema. Quando nasceu o Java, há mais de 10 anos, os "mini-aplicativos" Java que rodavam no navegador eram seu "grande barato". Na época era comum a discussão "quem é melhor? Applets Java ou ActiveX da Microsoft?". Passado tanto tempo, até então praticamente nenhuma evolução tecnológica significativa aconteceu com as Applets (bom, quanto aos ActiveX, melhor nem falar...). O Java 1.6 update 10 veio para mudar radicalmente esse cenário, apresentando a nova geração dos plug-ins Java. Este artigo cobrirá as principais mudanças na arquitetura de plug-ins, mostrando com exemplos práticos que as Applets definitivamente estão de volta. Relembrando Uma Applet é um tipo especial de programa Java, embutido em uma página HTML, que é executado no contexto de um navegador habilitado para uso da tecnologia Java. Na prática, é uma subclasse de java.applet.Applet (ou javax.swing.JApplet), que fornece uma interface entre o programa e o ambiente do navegador. Embora aprofundar todos conceitos da tecnologia Applet não seja o objetivo principal desse artigo, vamos relembrar a seguir os principais. Para isso, iremos construir uma Applet tradicional, depois introduziremos gradativamente a nova arquitetura de Plug-ins Java. O código a seguir cria uma Applet simples que exibe na tela a mensagem "Olá Java Bahia!". import javax.swing.JApplet; import javax.swing.JLabel;
  • 2. 2 public class OlaJavaBahia extends JApplet { @Override public void start() { getContentPane().add(new JLabel("Olá " + getParameter("nome") + "!")); } } Para executá-lo em um navegador será necessário criar uma página HTML e utilizar a tag <applet>1. Exemplo: <html> <body> <h1>Minha primeira Applet</h1> <applet code="OlaJavaBahia.class" width="200" height="50"> <param name="nome" VALUE="JavaBahia"/> Seu navegador não suporta Applets! </applet> </body> </html> E o resultado seria: Figura 1. Applet Tradicional Limitações conhecidas As tradicionais Applets possuem várias limitações. Algumas delas decorre do fato de a JRE e o navegador executarem no mesmo espaço de endereçamento: • O navegador "congela" quando o JRE é iniciado pela primeira vez; • Um travamento no JRE trava também o navegador; • Apenas uma versão de JRE pode ser usada por vez; • O desenvolvedor não tem o controle sobre qual versão de JRE está sendo utilizada, nem pode passar parâmetros para a JVM (para, por exemplo, configurar memória); 1 A tag <applet> é recomendada para ambientes onde a portabilidade de navegador é um requisito importante (a Internet por exemplo). Em ambientes mais controlados, como as Intranets, é possível também usar as tags <object>, que funcionará apenas no Internet Explorer, e <embed>, para a família de navegadores Mozilla.
  • 3. 3 Outras limitações estão associadas às restrições (necessárias) de segurança: • As Applets não tem acesso ao Sistema de Arquivos e portanto não podem ler ou escrever arquivos na máquina do cliente. • As Applets não se estabelecer conexões com outras máquinas, exceto com o servidor de origem da Applet. • As Applet não conseguem iniciar ou finalizar um programa na máquina do cliente. Nova Geração do Java Plug-in A nova geração do Java Plug-in traz uma arquitetura totalmente redesenhada e resolve vários problemas conhecidos da geração anterior. Dentre as principais vantagens dessa nova arquitetura, destacamos o fato de a JVM ser executada em um contexto independente do navegador. Assim, caso ocorra algum erro de execução em uma Applet específica, o novo Java Plug-in consegue tratar o problema sem afetar o funcionamento do navegador. O Quadro 1 resume as principais vantagens. Quadro 1 – Vantagens da Nova Arquitetura do Java Plug-in Maior Confiabilidade A Applet pode ser configurada para utilizar uma JVM independente do navegador. Nesse caso, o Java Plug-in detecta e trata os problemas sem que o navegador seja afetado. Suporte a JNLP O novo Java Plug-in oferece as mesmas facilidades destinadas a aplicações Java WebStart, permitindo carregar Applets diretamente a partir de arquivos JNLP (Java Network Launching Protocol). É possível inclusive acessar as APIs JNLP para persistência, acesso ao sistema de arquivos e outras funcionalidades. Argumentos de linha de Pode-se especificar parâmetros para a JVM (semelhante aos parâmetros passados por comando por Applet linha de comando) por Applet. Dessa forma, é possível configurar, por exemplo, o tamanho do heap de memória ou funcionalidades de aceleração de hardware 2D. Suporte a múltiplas Agora é possível explicitar qual versão de JRE deve ser utilizada pela Applet. Cada versões de JRE instância individual de um Applet pode exigir executar uma versão específica de JRE Melhor comunicação Houve uma considerável melhora na comunicação entre JavaScript e Java Applet com Java/JavaScript compatibilidade entre os navegadores garantida. A API JavaScript pode ser usada para: detectar JRE, instalar/atualizar JRE, executar Applets, acionar programas Java WebStart, etc. Melhor controle do ciclo de O comportamento das chamadas aos métodos de controle do ciclo de vida da API vida de uma Applet Applet (init, start, stop e destroy) agora estão mais determinísticos e a portabilidade entre os navegadores aperfeiçoada. Melhor configuração do A quantidade máxima de memória que podia ser configurada para uma Applet era espaço de memória limitada na versão anterior do Java Plug-in. Essa limitação foi retirada da nova versão e as Applets podem ser configuradas para utilizar a mesma quantidade de memória das aplicações de linha de comando. Melhor experiência do Melhora de responsividade do navegador fazendo o carregamento de Applets em usuário segundo plano. As Applets são carregadas em background, então o navegador continua respondendo normalmente. A Applet aparece na página web apenas quando estiver totalmente pronta para ser executada. Suporte melhorado para Assinando as Applets, é possível que neste ambiente elas possuam os mesmo Windows Vista privilégios que aplicações comuns. Applets com JNLP O Java Network Launch Protocol, JNLP, é a forma padrão de realizar a distribuição e instalação de aplicações Java WebStart. A nova arquitetura de plug-ins do Java permite a utilização do mesmo descritor JNLP, o que fará com que a Applet se comporte como uma aplicação convencional acionada via WebStart. Retomando o exemplo anterior, poderíamos reescrever a tag <applet> da seguinte forma:
  • 4. 4  <applet code="javabahia.javaplugin.OlaJavaBahia" width="200" height="50">    <param name="nome" value="JavaBahia">    <param name="jnlp_href" value="olajavabahia.jnlp">  </applet> Nesse segundo exemplo pressupomos que a classe OlaJavaBahia pertence ao pacote javabahia.javaplugin e que é compilada em novojavaplugin.jar. Observe que o parâmetro jnlp_href aponta para o arquivo JNLP da listagem abaixo. Vamos analisá-lo com mais detalhe. 1. <?xml version="1.0" encoding="UTF-8"?> 2. <jnlp href="olajavabahia.jnlp"> 3. <information> 4. <title>Olá JavaBahia Applet</title> 5. <vendor>JavaBahia.org</vendor> 6. </information> 7. <resources> 8. <j2se version="1.4+" href="http://java.sun.com/products/autodl/j2se" /> 9. <jar href="novojavaplugin.jar" main="true" /> 10. </resources> 11. <applet-desc name="Olá JavaBahia Applet" 12. main-class="javabahia.javaplugin.OlaJavaBahia" 13. width="1" 14. height="1" /> 15. </jnlp> O elemento <information> (linhas 3 a 6) é requerido e contém informações sobre o autor e vendedor da Applet. As linhas 7 a 10 (tag <resources>) apresentam novidades interessantes: A tag <j2se version="1.4+">2 informa a versão mínima da JVM3 aceita para executar a Applet. A tag <jar> aponta para o arquivo do tipo JAR que contém o código executável da Applet. A tag <applet-desc> (linhas 11 a 14) informa o nome da Applet (atributo name) e indica o nome da classe principal (atributo main-class> e pode sobrecarregar alguns parâmetros da tag <applet> do arquivo HTML. Neste exemplo, apesar de fornecidos, os atributos width e height do JNLP são desconsiderados, prevalecendo as propriedades definidas na tag <applet>. Isso ocorre porque pressupõe-se que o navegador sabe melhor como acomodar a Applet na página web, e apenas ele pode suportar altura e largura relativos à pagina (ex: width=“40%”). Consulte a página oficial do novo Java Plug-in para saber detalhes sobre todos os parâmetros suportados e as formas de resolver outros tipo de conflito. Parâmetros de Configuração da JVM Além da opção de disponibilizar uma Applet a partir de um arquivo JNPL, é possível utilizar a tag <applet> associada a uma série de parâmetros (tag <param>) específicos da JVM. Veremos a partir de agora os três principais tipos de configuração para JVM: separate_jvm, java_version e java_arguments. Veja o exemplo abaixo: <applet code="javabahia.javaplugin.OlaJavaBahia" width="200" height="50"> ... 2 A tag <j2se> também suporta argumentos de linha de comando a serem passados para a JVM, como propriedades do sistema ou o tamanho máximo do heap, Caso nenhuma JVM ativa atenda o desejado, uma nova instância será lançada. Consulte as referências ao final do artigo para mais detalhes. 3 Uma vez que o suporte a JNLP no Java Plug-in só está disponível a partir da versão 1.6update10, especificações tipo “1.4+” basicamente não tem serventia. Especificações de versão farão mais sentido quando pudermos usar por exemplo “1.7+” (a partir da versão 1.7), “1.7*” (qualquer update da família 1.7) ou “1.6.0_13” (apenas na verão 1.6 udpate 13).
  • 5. 5 <param name="separate_jvm" value="true" /> <param name="java_version" value="1.5+" /> <param name="java_arguments" value="-Xmx128m" /> </applet> Através do primeiro parâmetro (separate_jvm) uma Applet pode ser executada em uma instância própria da JVM, separada de todas as outras Applets. Isso pode ser útil ao migrar certos tipos de aplicações Desktop para uso direto no browser. O segundo parâmetro (java_version) permite especificar a versão mínima da JVM necessária para executar a Applet. Já o terceiro parâmetro (java_arguments) foi usado para configurar o total máximo de memória que a Applet pode utilizar em tempo de execução. Funcionalidade “Arrastar-Soltar” Uma das novidades interessantes da nova arquitetura do Java Plug-in é a possibilidade de arrastar uma Applet e soltá-la na área de trabalho. No entanto, vale ressaltar que essa é uma funcionalidade experimental e que não há garantias que ela continuará sendo suportada nas próximas versões do Java Plug-in. Para habilitar essa funcionalidade basta acrescentar o parâmetro <param name=“draggable” value=“true” /> dentro da tag <applet>. Para testar, utilize a combinação (tecla Alt + botão esquerdo do mouse) e arraste a Applet para a sua área de trabalho. Você irá observar um pequeno botão de fechar no canto superior direito. A API Applet permite ainda customizar o gesto do “arrastar”, o botão fechar e a imagem de carregamento (substituindo a tradicional xícara de café do Java). Enquanto a página de onde veio a Applet estiver aberta, ela poderá retornar ao seu lugar de origem. Se a página for fechada, recarregada ou navegada para uma outra, a Applet é desconectada do navegador e passa a executar de forma independente. Em algumas plataformas Linux essa combinação (tecla Alt + botão esquerdo do mouse) é normalmente usada para mover janelas, então é preciso alterar o comportamento dessa combinação no gerenciador de janelas desse Sistema Operacional. Opcionalmente, pode-se customizar a combinação no Applet. Para isso implemente na Applet um método público com a interface public boolean isAppletDragStart(MouseEvent e); Integração com JavaScript A especificação LiveConnect, usada para integração entre JavaScript e Java Applet, foi totalmente reimplementada. A nova arquitetura garante maior confiabilidade, compatibilidade entre navegadores e performance, tanto para Javascript chamando Applets quanto para Applets chamando métodos Javascript. Veja um exemplo de Javascript invocando método de um Applet. import javax.swing.JApplet; import javax.swing.JLabel; public class OlaJavaBahia extends JApplet { @Override public void start() { getContentPane().add(new JLabel("Olá " + getParameter("nome") + "!")); } public String upperCase(String s){
  • 6. 6 return s.toUpperCase(); } } A chamada ao método upperCase é feita de forma transparente: <html> <body> <h1>Minha primeira Applet</h1> <applet id="app" code="OlaJavaBahia.class" archive="OlaJavaBahiaApplet.jar" width="200" height="50"> <param name="nome" VALUE="Java Bahia"/> Seu navegador não suporta Applets! </applet> <script language="javascript"> var msg = app.upperCase("Olá Java Bahia!!!"); document.write(msg); </script> </body> </html> E o resultado pode ser visto na Figura 2 abaixo: Figura 2. Integração entre JavaScript e Applet Evitando tornar o artigo muito longo, não vamos detalhar aqui a integração com JavaScript. Para maiores informações (como por exemplo como chamar um método JavaScript dentro de um Applet), favor consultar a documentação do LiveConnect indicada no final desse artigo. Preparando o navegador O novo Java Plug-In foi projeto para funcionar no Internet Explorer 6 e 7, no Windows XP e Vista, e no Firefox 3, no Windows XP ou Vista, Solaris e Linux. A configuração do Internet Explorer deve ser feita pelo Painel de Controle Java (Java Control Panel), acessível pelo Painel de Controle do Windows XP ou Vista, habilitando a nova geração do Java Plug-In na guia Avançado (Advanced), como na Figura 3.
  • 7. 7 Figura 3. Habilitando o novo Java Plug-in no Windows No Linux ou Solaris a configuração Firefox 3 é um pouquinho mais complicada. É necessário criar manualmente um link simbólico (symlink) para a novo Java Plug-in. Para isso, abra um terminal e vá para a pasta plugins em seu diretório de instalação do Firefox (por exemplo: /etc/lib/firefox- 3.0.10/plugins) e crie execute o comando ln -s apontando para sua pasta <JRE_HOME | JDK_HOME>/jre/lib/{i386,sparc}/libnpjp2.so. Por exemplo: cd /opt/firefox/plugins ln -s /usr/jvm/lib/sun-java6/jre/lib/i386/libnpjp2.so
  • 8. 8 Applets JavaFX com NetBeans Explorando ainda mais as possibilidades do novo Java Plug-in, veremos agora como criar uma Applet com JavaFX, uma plataforma de software multimídia para a criação e disponibilização de Internet Rica, que pode ser executada em vários dispositivos diferentes. Totalmente baseada em Java, JavaFx permite criar aplicações de altíssima qualidade visual e interatividade para rodar em desktop, browser, telefone celulares, video-games, Blu-rays e até na TV Digital. Entrar em detalhes foge do escopo do artigo, então recomendamos uma visita ao http://javafx.com para quem deseja conhecer um pouco mais. Usando o NetBeans 6.8 (a versão mais recente, até a escrita deste artigo, da única IDE com suporte a JavaFX), crie um novo projeto da Categoria JavaFX e escolha JavaFX Script Application. Preencha as informações como na Figura 4. Figura 4. Criação de um projeto JavaFX no NetBeans 6.8 Depois de criar o projeto OlaJavaBahiaJavaFX, clique com o botão direito em seu nome e escolha a opção Properties (Propriedades). Na categoria Run (Executar), crie uma nova Configuração clicando em New (Novo) e digite Applet. Selecione a opção Run in Browser (Executar no Navegador). Sua tela deverá estar como na Figura 5.
  • 9. 9 Figura 5: Configuração do projeto JavaFX no Netbeans 6.8 Em seguida, ainda na janela de Propriedades, escolha a categoria Application (Aplicação) e preencha como na Figura 6. Observe que a opção Draggable Applet deve estar marcada. Figura 6. Alterando preferências do projeto O código gerado automaticamente pelo NetBeans já pode ser executado. Será aberta uma página no navegador mostrando uma página HTML contendo código JavaFX Script exibindo o texto “Application Content” abaixo do título OlaJavaBahiaJavaFX em negrito. No subdiretório dist do seu projeto, observe que, além dos arquivos do tipojar, foram criados um arquivo HTML e dois JNLP (um para execução no navegador como Applet, outro como aplicativo Java WebStart).
  • 10. 10 Figura 7. Arquivos gerados automaticamente no build do NetBeans Na listagem a seguir é mostrado o código Java FX Script do arquivo Main.fx. As linhas destacadas em negrito foram alteradas ou acrescentadas para dar um melhor comportamento visual à Applet, alterando as cores de frente e fundo e adicionando um efeito chamado reflexão. Main.fx 1. package olajavabahiajavafx; 2. 3. import javafx.stage.Stage; 4. import javafx.scene.Scene; 5. import javafx.scene.text.Text; 6. import javafx.scene.text.Font; 7. import javafx.scene.effect.Reflection; 8. import javafx.scene.shape.Rectangle; 9. import javafx.scene.paint.Color; 10. 11. Stage { 12. title: "Olá JavaBahia JavaFX" 13. scene: Scene { 14. width: 250 15. height: 80 16. content: [ 17. Rectangle { 18. x: 0, y: 0 19. width: 200, height: 80 20. fill: Color.BLACK 21. } 22. Text { 23. font: Font { 24. size: 16 25. } 26. x: 10 27. y: 30 28. content: "Olá JavaBahia" 29. fill: Color.WHITE 30. effect: Reflection {fraction: 0.9 topOpacity: 0.9 topOffset: 0.1}; 31. } 32. ] 33. } 34. } O arquivo OlaJavaBahiaJavaFX_browser.jnlp, mostrado em seguida, traz várias tags que não foram discutidas até aqui. Não vamos explicá-las porque consideramos que elas são bastante auto- explicativas. Caso o leitor tenha alguma dúvida sobre essas tags, sugerimos a leitura das referências indicadas no final desse artigo.
  • 11. 11 1. <?xml version="1.0" encoding="UTF-8"?> 2. <jnlp spec="1.0+" codebase="file:/home/serge/NetBeansProjects/OlaJavaBahiaJavaFX/dist/" 3. href="OlaJavaBahiaJavaFX_browser.jnlp"> 4. <information> 5. <title>OlaJavaBahiaJavaFX</title> 6. <vendor>JavaBahia</vendor> 7. <homepage href=""/> 8. <description>OlaJavaBahiaJavaFX</description> 9. <offline-allowed/> 10. <shortcut> 11. <desktop/> 12. </shortcut> 13. </information> 14. <security> 15. <all-permissions/> 16. </security> 17. <resources> 18. <j2se version="1.5+"/> 19. <property name="jnlp.packEnabled" value="true"/> 20. <property name="jnlp.versionEnabled" value="true"/> 21. <extension name="JavaFX Runtime" href="http://dl.javafx.com/1.2/javafx-rt.jnlp"/> 22. <jar href="OlaJavaBahiaJavaFX.jar" main="true"/> 23. </resources> 24. <applet-desc name="OlaJavaBahiaJavaFX" main-class="com.sun.javafx.runtime.adapter.Applet" 25. width="200" height="200"> 26. <param name="MainJavaFXScript" value="olajavabahiajavafx.Main"> 27. </applet-desc> 28. <update check="background"> 29. </jnlp> O código do arquivo OlaJavaBahiaJavaFX.html, contudo, será alterado para os fins didáticos. Observe que as linhas de 14 a 26 foram comentadas, pois o NetBeans não gera o código usando a tag <applet> que estamos estudando aqui. Em seu lugar, é usada a tag <script> e dentro dele, o código JavaFX que carrega o script Main.fx no browser. No lugar desse trecho, pusemos uma chamada padrão usando a tag <applet> e fornecendo o parâmetro draggable=“true”. 1. <html> 2. <head> 3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4. <title>OlaJavaBahiaJavaFX</title> 5. </head> 6. <body> 7. <h1>OlaJavaBahiaJavaFX</h1> 8. <applet code="OlaJavaBahiaJavaFX" archive="OlaJavaBahiaJavaFX.jar" width="200" 9. height="60"> 10. <param name="jnlp_href" value="OlaJavaBahiaJavaFX_browser.jnlp"/> 11. <param name="draggable" value="true"/> 12. </applet> 13. <!-- 14. <script src="http://dl.javafx.com/1.2/dtfx.js"></script> 15. <script> 16. javafx( 17. { 18. archive: "OlaJavaBahiaJavaFX.jar", 19. draggable: true, 20. width: 200, 21. height: 200, 22. code: "olajavabahiajavafx.Main", 23. name: "OlaJavaBahiaJavaFX" 24. } 25. ); 26. </script> 27. --> 28. </body> 29. </html>
  • 12. 12 Por fim, o resultado final o resultado final da nossa “AppletFX” pode ser conferido na Figura 8. Figura 8. Visualização da Applet feita em JavaFX Conclusão Este artigo procurou relembrar as tradicionais Applets, apresentando as novas possibilidades disponíveis para Java e JavaFX a partir da Java SE 1.6 update 10 com o novo Java Plug-In. Depois de muito tempo “estagnadas”, o leitor deve ter percebido que a Sun correu atrás do prejuízo e apresenta agora opções bem interessantes para que o desenvolvedor possa voltar a considerar o uso Applets em suas aplicações e páginas Web. Links http://java.sun.com/docs/books/tutorial/deployment/applet/index.html Applet Tutorial http://java.sun.com/j2se/1.4.2/docs/guide/misc/applet.html Sintaxe completa da tag Applet http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/contents.html Guia do Java Plugin, antes do Jdk1.6u10 http://java.sun.com/javase/6/docs/technotes/guides/jweb/index.html Applets e Aplicações Java WebStart para o Jdk1.6u10 http://java.sun.com/developer/technicalArticles/javase/6u10_applets A nova feature Draggable Applet no Java SE 6 Update 10 Plug-In https://jdk6.dev.java.net/plugin2 Notas de versão da Nova Geração do Java Plug-In http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-6290.pdf Apresentação no JavaOne 2008 sobre sobre o novo Java Plug-in https://jdk6.dev.java.net/plugin2/jnlp/ Suporte a JNLP no novo Java Plug-in https://jdk6.dev.java.net/plugin2/version-selection/ Seleção de versão da JVM com o novo Java Plug-in https://jdk6.dev.java.net/plugin2/liveconnect/ Integração entre Java Applet e Javascript https://scenegraph-demos.dev.java.net/demo-applets.html Demonstrações de Applets usando o novo Java Plug-in
  • 13. Serge Rehem (serge.rehem@gmail.com) é PMP, MBA em Administração pela Unifacs, especialista em Sistemas Distribuídos pela UFBA. Analista do Serpro/Salvador desde 1997, atualmente coordena a equipe técnica do Framework Demoiselle, na projeção da Coordenação Estratégica de Tecnologia (Cetec) na regional Salvador. É líder do JavaBahia e mantém o blog bazedral.blogspot.com, sobre trabalho colaborativo nas empresas. Ulisses Telemaco (ulisses@jeebrasil.com.br) é idealizador, fundador e mantenedor do projeto JEEBrasil. Formado em Ciência da Computação pela UFRN. Mestrando em Mecatrônica pela UFBA. Palestrante em vários eventos Java como JustJava, Abaporu, Natal Java Day, Salvador Java Day, Maratona 4 Java, entre outros. Participou ativamente da organização dos JUGs JavaBahia e JavaRN. Atualmente trabalha como Arquiteto de Software na OWSE Informática no Rio de Janeiro. Reforça o time do SouJava na terra maravilhosa.