Tutorial Java Web Start

Embed Size (px)

Citation preview

Tutorial Java Web Start

Tutorial Java Web StartMarcelo Chinalia

21.Introduo

2.Como funciona o Java Web Start (JWS)23.Por que usar o JWS?44.Criando uma aplicao Hello World para utilizar o JWS54.1.Criando o protocolo JNLP84.2. Criando o pgina Web para iniciar o aplicativo115.Consideraes Finais156.Consideraes Finais15

1. Introduo

Essa documentao tem como objetivo apresentar comunidade de desenvolvedores e usurios de aplicaes Java, a tecnologia de deployment criada pela Sun Microsystems, o Java Web Start.

Mas, o que deployment? Bem, no vem ao caso discutirmos a fundo esse termo, mesmo porque no mercado, existem vrios autores que tratam do assunto de forma diferenciada. O que podemos resumir em poucas palavras sobre deployment que ele vai desde o processo de preparao de kits de instalao de aplicaes corporativas, passando pela instalao e disponibilizao desse aplicativo em mquinas clientes, at a primeira inicializao bem sucedida.

Suponhamos uma empresa possua uma aplicao desktop que utilizada em estaes espalhadas em vrias cidades por todo Brasil. Qualquer manuteno praticada nessa aplicao, seja ela corretiva ou evolutiva, produz uma nova release, o que requer um grande esforo da rea de tecnologia da informao (T.I.) dessa empresa, para que a nova verso esteja nas estaes clientes o mais rpido possvel, levando-se em considerao tambm que, s vezes, no horrio programado para a atualizao da verso, podemos encontrar problemas como: host fora do ar; estao cliente desligada; uma determinada estao est em manuteno; entre outros. Diante disso, imaginemos o custo e a complexidade para essa empresa manter uma estrutura de T.I. com esse cenrio?

Felizmente, para a plataforma Java foi criado o Java Web Start, que simplifica o deployment de aplicaes, permitindo a usurios leigos, atravs de um cone em seu desktop ou de um link em qualquer Web browser, iniciarem em suas mquinas as aplicaes mais recentes disponibilizadas na rede (Web, Lan, Wan, etc.).

2. Como funciona o Java Web Start (JWS)

Antes de apresentarmos o funcionamento do JWS, interessante sabermos que ele foi criado a partir da verso 1.2 do Java e com o passar do tempo sofreu melhorias, principalmente no requisito segurana, baseando-se agora na plataforma Java 2. At a verso 1.3 do Java Standard Edition (JSE), era necessrio baix-lo do site da Sun Microsystems. Na verso mais recente do Java (1.4), ele foi incorporado na instalao do J2SE. Para maiores informaes ou baixar a verso do Java Web Start referentes a verso do Java que voc est utilizando, acesse o endereo:

http://java.sun.com/products/javawebstartA tecnologia JWS permite aos usurios finais que iniciem suas aplicaes atravs de um Web browser qualquer, independentemente da plataforma ou lugar da Web. Ela disponibiliza o melhor de dois mundos: o deploymnet fcil e uso de HTML, bem como a potencialidade e a flexibilidade de aplicaes full-fledged.

O JWS permite que voc disponibilize aplicaes Java diretamente da Web, que pode ser iniciada de 3 formas diferentes:

De um Web browser atravs de um clique em um link;

Do gerenciador de aplicaes construdo em JWS, o qual verifica o uso mais recente de uma aplicao e disponibiliza seu acesso de forma rpida;

De cones no desktop menu Start (Iniciar) (infelizmente esse recurso no multiplataforma, utilizvel apenas no Microsoft Windows).

A figura abaixo ilustra o funcionamento e o comportamento dessa tecnologia, segundo os passo descritos logo abaixo:

1. Atravs de uma pgina Web, localizada em um servidor Web e previamente construda com um link de uma aplicao Java, o usurio com um nico clique ativa o servio do JWS, apresentando sua splash screen;

Observao: vale lembrar que, nessa pgina Web, devemos verificar se o JWS j est presente na mquina cliente, pois, caso no esteja, o JWS ser baixado para o desktop uma nica vez, seguindo o fluxo normal de execuo do servio (Veremos isso com mais detalhes na implementao do exemplo desse documento).

2. O JWS consulta o servidor Web para saber se todos os requisitos para iniciar a aplicao esto presentes na mquina cliente. A partir da, poder ocorrer o seguinte:

Iniciando a aplicao pela primeira vez: nesse caso o JWS detectou que nenhum arquivo do aplicativo ou mesmo o Java Runtime Environment (JRE) esto instalados na mquina cliente. A partir da, ele primeiro faz o download e instalao do JRE segundo a verso passada como parmetro no passo 1, depois, o download da aplicao na mquina cliente e a segue para o passo 3 logo em seguida;

Iniciando a aplicao j baixada no desktop: nesse caso, podem acontecer duas situaes:

o JWS identifica que todos os requisitos para execuo do aplicativo esto presentes na mquina cliente e segue para o passo 3;

o JWS identifica que houve alterao no servidor Web dos fontes da aplicao e imediatamente inicia o processo de atualizao da verso mais recente para a mquina cliente, seguindo para o passo 3.

3. A aplicao desktop inicializada e disponibilizada para o uso de seu usurio.

Nota: todo o processo de deteco de verso e requisitos, download e atualizao de verso uma aplicao, feito de forma rpida, segura e transparente para o usurio.

3. Por que usar o JWS?

Provavelmente voc deve estar se perguntando: que estranho, por que eu faria uma aplicao desktop utilizando Swing ou AWT* e para inici-la eu tenho que construir uma pgina Web? Eu poderia compactar minhas classes em um arquivo .jar e envi-la por e-mail para meus clientes..

* Swing e AWT so APIs Java especficas para a criao de aplicaes do tipo desktop.

De fato, esse pensamento no est totalmente errado. O problema de no se trabalhar com JWS que podemos nos deparar com os seguintes problemas:

1. E-mail tem na maioria das vezes, problemas de limitao com relao a capacidade de armazenamento ou envio de arquivos;

2. Poderamos at enviar por e-mail, porm, teramos que preparar um conjunto de instrues passo-a-passo, para que os usurios finais pudessem instalar a aplicao em seus desktops. Sabemos que existem vrios tipos de usurios em uma empresa: desde os experts at os leigos; imagine os transtornos que seriam causados. Alm disso, e se essas instrues fossem perdidas ou a pessoa responsvel por elas saiu da empresa?

3. Alto custo para manter um profissional ou, dependendo do negcio da empresa, uma equipe de profossionais dedicados apenas para essa atividade de deployment (um help desk).

Poderamos encontrar outras razes o uso do JWS, mas acho que as citadas acima so convincentes, mesmo porque, como j vimos anteriormente, aplicaes que so desenvolvidas em Java com deployment feito pelo JWS esto sempre disponveis e up-to-date. JWS suporta:

Mltiplas JREs em uma mesma mquina desktop;

Code-signing;

Sandboxing (ambiente protegido, com restries de acesso de disco ou recurso de rede);

Versionamento e atualio incremental;

Integrao com desktop;

Operao off-line;

Instalao automtica de JREs e pacote opcionais da aplicao disponibilizada.

A tecnologia JWS muita rica e extremamente til para empresas que desenvolvem aplicaes desktop em Java, pela facilidade de disponibilizao remota de sua aplicaes para qualquer cliente, esteja ele onde estiver.

4. Criando uma aplicao Hello World para utilizar o JWS

A partir de agora, vamos iniciar um exemplo prtico de utilizao do JWS, s que primeiro iremos fazer uma aplicao bem simples chamada Java Hello World.

Temos a classe abaixo:

Import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class HelloWorld extends JFrame {

protected JButton jlbHello;

protected Container container;

public HelloWorld(String titulo) {

loadCadastro(titulo);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

sairCadastro();

}

});

}

private void loadCadastro(String titulo){

jlbHello = new JButton("Java Hello World");

container = new Container();

container = getContentPane();

container.setLayout(new BorderLayout());

container.add(jlbHello, BorderLayout.CENTER);

this.setSize(400, 300);

this.setTitle(titulo);

this.setVisible(true);

}

private void sairCadastro(){

int i = JOptionPane.showConfirmDialog(this,

"Deseja mesmo fechar o formulrio?",

"Java Hello World",

JOptionPane.YES_NO_OPTION);

if (i == JOptionPane.YES_OPTION) {

System.exit(0);

}

}

public static void main(String args[]){

HelloWorld h = new HelloWorld("Hello World");

}

}

Se executarmos a classe HelloWorld, teremos a aplicao da figura abaixo.

Compilada a aplicao (javac), o prximo passo a gerao do arquivo .jar contendo a classe (ou classes) que compe o aplicativo, no nos esquecendo de criar o arquivo manifest (arquivo que contm dados sobre a verso do aplicativo). Por questes de padronizao, devemos sempre criar uma pasta no diretrio que contm as classes que compem o aplicativo, a pasta chamada META-INF. nessa pasta que devemos criar o arquivo Manifest.mf contendo o seguinte:

Manifest-Version: 1.0

Created-By: 1.4 (GlobalCode - The Developer's Company)

Main-Class: HelloWorld

onde:

Manifest-Version: corresponde verso inicial de um aplicativo que, por conveno, iniciamos com 1.0;

Created-By: 1.4 (verso do Java) + descrio ou nome da empresa que criou o aplicativo; Main-Class: nome da classe que contm a public static void main(String args[]) que inicia o aplicativo.As ilustraes abaixo mostram a estrutura de diretrio e os arquivos compactos no arquivo jhelloworld.jar.

Vamos recapitular o que fizemos at agora:

1. Criamos uma pasta (diretrio) onde colocamos a nossa classe HelloWorld.java;

2. Compilamos nossa classe e geramos o arquivo HelloWorld.class;

3. Criamos a pasta Meta-Inf, contendo o arquivo Manisfest.mf;

4. Criamos o arquivo jhelloworld.jar, contendo as classes e a subpasta Meta-inf, referente ao nosso aplicativo.

Esses so os passos que a equipe de desenvolvimento deve seguir para criar um aplicativo executvel. Falta ainda, criarmos nosso ambiente no servidor Web, que disponibilizar o Java Hello World, sua pgina de start e o protocolo utilizado pelo JWS para controle do aplicativo.

No exemplo, utilizamos como servidor Web, o TomCat verso 4.1.18, mas lembramos que o Java Web Start funciona em qualquer Web Server. Porm, algumas precaues devem ser tomadas, para o funcionamento correto do JWS. So elas:

No arquivo server.xml do servidor Web, criamos uma nova pasta de contexto, root para nossa aplicao, incluindo as linhas abaixo:

No arquivo web.xml verificamos a presena do MIME TYPE, JNLP. Caso seu servidor no contenha esse MIME TYPE, adicione o seguinte:

jnlp

application/x-java-jnlp-file

Por questo de organizao, criamos dentro da pasta aplic, as subpastas: images/ onde guardaremos todas as imagens usadas para apresentao do JWS; jar/jhelloworld/ onde guardaremos nosso arquivo jhelloworld.jar, junto com o protocolo JNLP, o arquivo jhelloworld.jnlp.

No diretrio root (/aplic) criaremos a pgina Web index.html, onde discutiremos mais tarde seu cdigo.

4.1. Criando o protocolo JNLP

O Java Network Launching Protocol (JNLP) corresponde a um documento XML, com extenso .jnlp, que contm as especificaes para que o JWS consulte-o e, a partir dele, execute determinada tarefa conforme vimos no item 2. Como funciona o Java Web Start (JWS).

Criaremos o arquivo jhelloworld.jnlp, em nosso Servidor Web na pasta /aplic/jar/jhelloworld, com a seguinte estrutura:

Java Hello World GlobalCode Demo de Java Web Start Java Hello World

No objetivo desse documento tratar o assunto XML, caso voc ainda no o conhea, faa download da apostila XML para iniciantes do endereo: http://www.clubedelphi.com.br/apostilas/apostilas.asp .O arquivo XML apresentado possui as principais tags necessrias para o funcionamento correto do JWS. A tabela abaixo mostra de forma mais completa, todas as tags que o documento XML (JNLP) pode apresentar:

Estrutura do arquivo XML

Grupo de InformaesElementoAtributoDescrio

JNLPjnlpspecPor default o valor 1.0+, podendo ser 1.0 ou verses superiores da release que se est trabalhando.

codebaseURL do servidor Web onde a aplicao dever ser iniciada.

hrefURL que aponta a localizao do prprio arquivo JNLP. O JWS precisa desse atributo definido para identificar as caractersticas de execuo de um aplicativo.

Informationtitle

Nome da aplicao disponibilizada.

vendor

Nome da companhia que fez a aplicao.

homepagehrefO atributo desse elemento aponta para a URL da pgina Web que inicia um aplicativo.

description

Pequena descrio sobre a aplicao.

iconhrefURL que aponta para uma imagem, correspondente ao cone do aplicativo.

kind; hrefPara kind o nico valor deve ser kind=splash, que significa que uma splash screen ser apresentada na inicializao da aplicao. Se no colocarmos nada, o JWS assumira como default a sua prpria splash, caso contrrio, precisamos complementar com o atributo href a localizao da imagem (gif) que queremos que o JWS mostre.

offline-allowed

Opcional, quando utilizada, indica se a aplicao pode ou no ser iniciada off-line. Esse elemento tambm controla como o JWS deve fazer a checagem para a atualizao de um aplicativo.

Se ele no for especificado, forosamente a aplicao deve ser iniciada on-line, fazendo com que o JWS sempre cheque a verso para saber se deve ou no atualiz-la, para depois inici-la de fato.

Se ele for especificado, o JWS tenta verificar se uma atualizao nova est disponvel. No entanto, se a aplicao j foi baixada, ento a checagem terminar alguns segundos depois e, neste caso, a aplicao armazenada no desktop iniciar instantaneamente. Isso aumenta em muito a velocidade com a conexo com o servidor, sendo que na maioria dos casos o uso tem grande chances de executar a verso mais atual do aplicativo, mas isso no garantido (essa tag depende muito do nvel de estabilidade do cdigo do aplicativo, para que o desenvolvedor tome a deciso mais correta de acordo com o cenrio). Alm disso, com essa tag se o JWS estiver rodando em ambiente Windows, ele perguntar para o usurio se ele quer a criao de cones para chamada da aplicao no modo off-line, tanto na rea de desktop, como no menu Iniciar.

Estrutura do arquivo XML

Grupo de InformaesElementoAtributoDescrio

Securityall-permissions

Opcional, quando indicado, limita o acesso do aplicativo a recurso na mquina cliente ou em local de rede. Se o omitirmos, esse elemento pode ser usado para se especificar acesso irrestrito de uma aplicativo.

Resourcesresources

Usado para especificar todos arquivos Java class, bibliotecas nativas e propriedades de sistema que eventualmente faam parte do aplicativo, tendo sua restrio ligado ao tipo de sistema operacional, arquitetura ou uso local dos atributos os, arch e locale.

j2seversionEspecifica qual a verso do J2SE Runtime Environment suportada pelo aplicativo. Sugerimos nunca especificar ao mximo a verso do J2SE, pois, se num prximo momento o mesmo aplicativo utilizar recursos de uma nova verso J2SE lanada, o JWS no atualizar a JRE na mquina cliente podendo causar erros de funcionamento no aplicativo. Para contornar isso, podemos, colocar a raiz da verso, por exemplo, 1.4 + *, ficando assim 1.4*.

hrefURL para o JWS fazer o auto-download do JRE requirido pelo aplicativo. Por conveno, devemos sempre apontar para a URL do site da Sun. Exemplo: http://java.sun.com/products/autodl/j2se.

jar

Especifica a URL e o arquivo JAR que faz parte do aplicativo.

nativelibhrefQuando usada, indica a URL da biblioteca nativa contida no arquivo JAR do aplicativo.

downloadAtributo usado para controlar o download do recurso de forma rpido ou lenta usando as diretivas: eager ou lazy

Applicationapplication-descmain-classDeve-se informar nome da classe do arquivo JAR que contm o mtodo public static void main (String args[]) que inicia o aplicativo.

argument

Essa tag pode ser usada n vezes de acordo com parmetro de entrada passado para a o mtodo public static void main (String args[]).

applet-descdocumentBase possvel com essa tag tambm disponibilizar um applet Java, passando para esse atributo a URL da mesma.

nameNome do aplicativo applet.

main-classNome da classe applet (sem a extenso .class).

widthTamanho para apresentao do applet.

heightLargura para apresentao do applet.

paramnameEsse atributo usado indica o nome do parmetro em a ser passado para o applet, pode ocorrer n vezes.

valueEsse atributo deve vir sempre precedido do atributo name, pois ele quem contm o valor do parmetro.

Nota: apesar do protocolo ser um arquivo XML, imprescindvel que sua extenso seja .jnlp e no .xml.

4.2. Criando o pgina Web para iniciar o aplicativo

Estamos com quase tudo OK para iniciar nosso Java Hello World, s falta agora o elemento menos complexo de nossa estrutura, a pgina Web que chamar da pasta aplic/jar/ o protocolo jhelloworld.jnlp. Nosso arquivo index.html ficar no root de nossa rea de trabalha, ou seja, dentro da pasta aplic.

Poderamos ter colocado apenas uma descrio e a ncora apontando para o endereo http da localizao do arquivo index.html, porm, importante preveni-los do seguinte: e se a empresa acabou de comprar uma mquina nova e esqueceu de instalar o JWS 1.2, o que acontecer?

Se no fizermos uma rotina que verifique essa situao, com certeza ser mais um usurio dizendo que o sistema no funciona, ou que a pgina Web est com erro. Para contornar essa situao colocaremos um cdigo JavaScript que trate automaticamente essa verificao da presena do JWS 1.2 na mquina cliente. Caso o browser (seja ele qual for) no encontre nosso agente, faremos um download direto da pgina da Sun Microsystems para essa mquina e, logo em seguida, chamaremos a pgina index.html.

O cdigo abaixo trata justamente dessa breve descrio do pargrafo anterior:

on error resume next

If isIE = "true" Then

If Not(IsObject(CreateObject("JavaWebStart.IsInstalled"))) Then

javawsInstalled = 0

Else

javawsInstalled = 1

End If

End If

var javawsInstalled = 0;

isIE = "false";

if (navigator.mimeTypes && navigator.mimeTypes.length) {

x = navigator.mimeTypes['application/x-java-jnlp-file'];

if (x) javawsInstalled = 1;

} else {

isIE = "true";

}

function insertLink(url, name) {

if (javawsInstalled) {

document.write("" + name + "");

} else {

document.write("Need to install Java Web Start");

}

}

Nota: no cdigo acima existe um bloco de cdigo em VBScript porque nosso exemplo foi montado no ambiente Windows. Caso queira fazer um funo para o browser da famlia Netscape ou equivalentes veja como no site da Netscape como faz-lo.

Portanto, o cdigo-fonte completo de nossa pgina :

..:: Demo de Java Web Start ::..

on error resume next

If isIE = "true" Then

If Not(IsObject(CreateObject("JavaWebStart.IsInstalled"))) Then

javawsInstalled = 0

Else

javawsInstalled = 1

End If

End If

var javawsInstalled = 0;

isIE = "false";

if (navigator.mimeTypes && navigator.mimeTypes.length) {

x = navigator.mimeTypes['application/x-java-jnlp-file'];

if (x) javawsInstalled = 1;

} else {

isIE = "true";

}

function insertLink(url, name) {

if (javawsInstalled) {

document.write("" + name + "");

} else {

document.write("Need to install Java Web Start");

}

}

Pgina de Apresentao da Tecnologia Java Web

Start

..: Clique aqui para executar

o Java Hello World :..

Denvolvido por: Marcelo Chinalia

Apoio: GlobalCode - The Developer's Company

Pronto!! Agora s colocarmos o nosso servidor Web no ar e acessar o endereo http://localhost:8080/aplic/index.html. A partir de um nico clique do usurio a aplicao ser iniciada em sua mquina de forma simples e transparente, como mostra as figuras abaixo:

Pgina de start do Java Hello World

A partir do clique do usurio, o JWS inicia seu processo.

O Java Web Start lendo o protocolo JNLP do Servidor Web e carregando o aplicativo.

Aplicao Java Desktop rodando na mquina cliente.

5. Consideraes Finais

A tecnologia Java Web Start bem mais ampla e completa, em relao ao exemplo que criamos nessa documentao. O que tentamos passar nesse documento foi uma viso geral sobre a essa tecnologia de deployment, bem como, mostrar seus benefcios.

Para quem quer ir alm, possvel encontrar todas as informaes com relao API JNLP atravs do endereo http://java.sun.com/products/javawebstart/1.2/docs/javadoc/index.html, ou ainda, potencializar o uso dessa API com Java Server Pages (JSP), para customizaes que requerem tratamentos mais avanados, que os apresentados aqui. Tudo isso voc encontra no endereo: http://java.sun.com/products/javawebstart/1.2/docs/developersguide.html.

6. Consideraes Finais

Essa documentao foi inspirada no endereo oficial do Java Web Start, no site da Sun Microsystems, atravs do endereo: http://java.sun.com/products/javawebstart.

115