informazioni su: Ariel Techiouba

mercoledì 1 giugno 2011

Usare Google Spreadsheet come un database SQL

Google continua nella sua strada di aprire il più possibile i propri prodotti agli sviluppatori. Le API di Google ormai annoverano decine e decine di prodotti, con i quali interfacciarsi nelle proprie applicazioni Web e Desktop.

Ritengo che Spreadsheet sia uno dei migliori successi, tanto che per quanto mi riguarda, non sento minimamente la mancanza di Excel sui computer che uso. Per questo prodotto Google ha messo a disposizione le Google Data API, che fornisce un sacco di informazioni su come interrogare le tabelle che usiamo su spreadsheet e utilizzarle così all'esterno.

Nel caso poi volessimo rendere le nostre query presentabili, ci pensa un altro prodotto, Google Visualization, che consente di interagire tramite servizi REST con molti dei prodotti Google.

Per esempio ho trovato chi ha utilizzato le Google Spreadsheets come se fossero un database, potendo fare vere e proprie query SQL (con qualche limitazione) direttamente tramite 'url.
Per utilizzarle è necessario essere loggati con un account Google.

Ecco come provare a fare una query su una propria tabella:
  1. Fate il login su Google Docs: http://docs.google.com
  2. Create una nuova tabella con Spreadsheet
  3. Cliccate su Condivisione e pubblicate la tabella, quindi copiatevi l'URL restituito
  4. Create la vostra query: (esempio "select *"..) ricordandovi che i nomi delle colonne non sono le intestazioni che avete assegnato voi, bensì A, B, C e così via..
  5. Create la url per la visualizzazione:
  • URL base
  • Parametri da passare in GET , quindi in chiaro sull'indirizzo
    • tqx: formato di output, un valore tra "out:html" oppure "out:csv"
    • tq: la query, come ad esempio: "select *" (tutte le colonne) oppure select A,B .. fate attenzione che i nomi delle colonne sono CASE SENSITIVE (quindi la colonna "A" non è uguale alla colonna "a")
    • key: la chiave che potete recuperare dall'url che dovreste aver copiato

ecco un esempio:

giovedì 12 maggio 2011

Quando gli script bash non funzionano più..

..ma fino al giorno prima funzionavano, potrebbe essere colpa di qualcuno che li ha editati con il lettore sbagliato!

Se lanciando uno script bash si ottiene l'errore

bad interpreter: No such file or directory

potrebbe essere un problema di path, cioè non è stato trovato il bash (o il dialetto utilizzato) e bisogna esplicitarlo oppure il file è stato preparato con gli "a capo" stile windows (\r\n) anzichè stile unix (\n).


Come apprendiamo da questo link, in questi casi proviamo a editare con vi e digitiamo:

:set fileformat=unix

mercoledì 27 aprile 2011

Cosa sono i servizi RESTful?

Capita talvolta di dover accedere a servizi web esterni al nostro dominio. E' possibile in alcuni casi che questi servizi siano esposti in modo da facilitare la loro interrogazione, fornendo un URL univoco che resistuisce una risposta in XML.

In queste situazioni, sarebbe inutile e dispendioso in termini di tempo / risorse creare un client per l'interrogazione del web service, dal momento che possiamo ottenere le risposte semplicemente con una richiesta HTTP (in GET o in POST) e fare il parsing dell' XML restituito.

Come cita Wikipedia questo approccio (REST) ai web service si chiama REpresentational State Transfer , e consiste in un particolare approccio architetturale che prevede l'assenza di STATO nell'interrogazione del servizio, per cui la risposta è generata direttamente sulla base dei parametri inviati con la richiesta.

L'interrogazione di questi servizi si riduce quindi alla creazione della HttpRequest e della attesa di una HttpResponse contenente l' XML che rappresenta la risposta. Non c'è alcun passaggio attraverso SOAP e Remote Procedure Calls dal lato "client".

venerdì 22 aprile 2011

Eclipse e l'editor "a colonne"

Della serie "non tutti sanno che..", Eclipse è un IDE potentissimo, che permette tra le varie cose l'editing "a colonne".

In pratica si può selezionare un'area rettangolare in cui ogni carattere che digiteremo verrà replicato su tutte le righe dell'area.

Per passare alla modalità editing "a colonne" basta premere la combinazione di tasti: ALT + SHIFT + A quando il focus è sull'editor di codice di Eclipse.

Per tornare alla modalità normale, premere nuovamente ALT + SHIFT + A

Spero che questo hint vi sia utile

Segue qualche screenshot, perchè 1 immagine vale 1000 parole..




giovedì 21 aprile 2011

Google Visualization: creare grafici con Google

Google Visualization & Salesforce
Google Visualization Tools sono degli strumenti dedicati agli sviluppatori web che permettono di creare in poche righe di codice dei grafici per rappresentare i propri dati.
Sono disponibili diversi modelli, a seconda delle esigenze. Nella pagina introduttiva dedicata al progetto si possono vedere diversi esempi.

Uno degli strumenti più utili, perchè abbastanza unico nel suo genere è quello delle GeoMap. Con questi grafici è possibile creare mappe e configurarle in modo da essere interattive a piacimento. Le possibilità di customizzazione non sono moltissime, ma sufficienti per rappresentare dati su aree geografiche.

Va notato che a causa di alcuni bug, Internet Explorer non è compatibile al 100% con questo strumento, tanto che nemmeno le pagine di esempio di Google a volte funzionano correttamente.


Questo errore non viene nemmeno segnalato nella console JavaScript, e si presenta solo se il plugin non è all'ultima versione. Probabilmente Google Visualization utilizza alcune parti in Flash per il rendering delle mappe.

lunedì 14 marzo 2011

Le stringhe Java e i caratteri speciali


Capita spesso di dover fare il parsing di una stringa in Java, utilizzando come separatori i caratteri speciali. Sono tali, proprio perchè hanno un particolare valore all'interno di espressioni regolari.
Il metodo split() dell'oggetto String prende come argomento proprio una espressione regolare.

Nelle espressioni regolari il carattere " | " (detto "pipe") rappresenta l'operatore "OR". Nel caso volessimo ottenere sottostringhe separate proprio dal carattere | il codice da usare è il seguente:

String source = "testo|da|separare";
String[] parsed_result = source.split("\\|");
for(String s : parsed_result)
{
  System.out.println(s);
}

In tutti i casi in cui volessimo usare un carattere speciale nelle espressioni regolari, è necessario far precedere il carattere da un doppio backslash "\\". 

domenica 13 marzo 2011

Come fare per usare JQuery con le pagine VisualForce Salesforce

 
Questo piccolo tutorial illustra quali sono i passi da seguire per poter utilizzare jquery, insieme con tutti i suoi plugin vari, sulla piattaforma Salesforce.

Il procedimento è abbastanza semplice, grazie alla possibilità di includere Risorse Statiche nelle org di Salesforce. Questa funzionalità infatti permette di caricare foglie di stile, librerie JavaScript e anche file jar (da eseguire dentro applets o Java Web Start) e accederle dentro le proprie pagine create in VisualForce, il linguaggio dinamico proprietario della piattaforma SF.

Ecco i passi da seguire:
  1. Scaricare le librerie occorrenti. Come esempio supponiamo di voler installare jQuery e jQueryUI per usare queste librerie in una pagina VisualForce. Dal sito ufficiale jQuery, scarichiamo l'ultima versione di jQueryUI, scegliendo un tema che faccia al caso nostro. Il file zip conterrà al suo interno la libreria JavaScript di jQueryUI, il core jQuery, e i fogli di stile css necessari alla corretta visualizzazione dei componenti UI che vogliamo utilizzare. Nel mio esempio ho scaricato la versione 1.8 con tutti i componenti e il tema "lightness".
  2. Carichiamo il file zip come Static Resource: Eseguito il login su Salesforce, "Setup > Develop > Static Resources > New" , selezionare il file zip scaricato, e assegnare un nome (nell'esempio "JQueryUI")
  3. Creiamo la pagina VisualForce dove vogliamo usare jQuery. In questo esempio la pagina si chiamerà TestJquery. "Setup > Develop > Pages > New" e assegnare il nome ("TestJquery").
  4. Nella pagina importiamo le librerie contenute nello script: 
    1. Core di jQuery: <apex:includeScript value="{!URLFOR($Resource.JQueryUI, '/js/jquery-1.4.4.min.js')}" />
    2. Estensioni di jQueryUI: <apex:includeScript value="{!URLFOR($Resource.JQueryUI, '/js/jquery-ui-1.8.10.custom.min.js')}" />
    3. Fogli di stile di jQueryUI: <apex:stylesheet value="{!URLFOR($Resource.JQueryUI, '/css/ui-lightness/jquery-ui-1.8.10.custom.css')}" />
  5. Definiamo una variabile per jquery in modo da evitare i possibili conflitti. Infatti Salesforce già utilizza il simbolo $ per alcune librerie proprie. Nel mio esempio ho usato le tre lettere jqr per rappresentarmi le funzioni jquery: var jqr = jQuery.noConflict();
  6. Inseriamo il nostro codice all'interno della pagina VisualForce, per esempio aprendo un dialog: jqr("#dialog").dialog();
  7. Testiamo il codice all'indirizzo /apex/TestJquery
Per comodità riporto l'intero codice della pagina VisualForce TestJquery:

<apex:page>
    <apex:includeScript value="{!URLFOR($Resource.JQueryUI, '/js/jquery-1.4.4.min.js')}" />
    <apex:includeScript value="{!URLFOR($Resource.JQueryUI, '/js/jquery-ui-1.8.10.custom.min.js')}" />
    <apex:stylesheet value="{!URLFOR($Resource.JQueryUI, '/css/ui-lightness/jquery-ui-1.8.10.custom.css')}" />
    <h1>Test di utilizzo di jqeury</h1>
    <p></p>
    <div id="dialog">Questa &egrave; una finestra di dialogo fatta con jQueryUI (tema lightness)</div>
    <script type="text/javascript" language="JavaScript">
        var jqr = jQuery.noConflict();
        jqr("#dialog").dialog();
    </script>

</apex:page>

martedì 1 marzo 2011

Javascript e le date che non funzionano..

Usando Javascript in maniera intensiva è facile incappare in alcune difficoltà che somigliano un po' ai verbi irregolari della lingua inglese. Mi riferisco a particolari aspetti o funzionalità che sono fatte in un determinato modo e vanno prese così come sono, ricordandosi che essi sono "casi speciali".

Un esempio è l'oggetto Date. Per usare le date in Javascript infatti esiste questo oggetto predefinito di grande utilità.
Per riferirsi alla data odierna per esempio è sufficiente istanziare un nuovo oggetto Date:

var today = new Date();

Per mostrarlo a video possiamo semplicemente usare la variabile che invocherà il metodo toString() in automatico:

var today = new Date();
alert(today);

Anche per quanto riguarda le operazioni tra date, l'oggetto predefinito è molto potente e permette di utilizzare gli operatori == , < , > per poter confrontare 2 date distinte:


var today = new Date();
var a_chosen_day = new Date("October 13, 1975 11:13:00");
if(today > a_chosen_day) alert("Oggi e' un giorno successivo alla data scelta");
else alert("Oggi e' un giorno precedente (oppure lo stesso giorno) alla data scelta");

I problemi iniziano quando vogliamo istanziare un nuovo giorno senza passare dalla stringa come nell'esempio. Infatti questa ha il difetto di richiedere la data in lingua inglese ed in un certo formato, mentre l'utilizzo più tipico è quello di usare giorni, mesi e anni per rappresentare una data.

L'oggetto Date contiene 4 costruttori, ognuno utile per determinati scopo, ma l'ultimo sicuramente è quello più generico:

new Date() // imposta la data e l'ora ad oggi, al momento in cui viene invocato
new Date(milliseconds) // millisecondi trascorsi dal 1 gennaio 1970
new Date(dateString) // la stringa deve essere in formato "October 13, 1975 11:13:00" (Month day, Year Hour:Minutes:Seconds)
new Date(year, month, day, hours, minutes, seconds, milliseconds) // tutti i parametri sono opzionali quindi è lecito usare "new Date(1975,10,13)" senza specificare l'ora

L'ultimo costruttore ha però un difetto: la numerazione dei mesi! Infatti mentre gli anni vengono intepretati correttamente (se inserisco 1975, l'anno rappresentato è il 1975) i mesi sono rappresentati da 0 a 11.
Questo comporta che il risultato del seguente codice:

var a_chosen_day = new Date("October 13, 1975 00:00:00");
var another_day = new Date(1975,10,13);
if(another_day == a_chosen_day) alert("Le due date coincidono");
else alert("Le due date sono differenti!");


Risulta questo:

"Le due date sono differenti!"

Per ottenere la stessa data è necessario cambiare il mese di another_day:

var another_day = new Date(1975,9,13);

E' molto importante ricordarsi di questo comportamento particolare, dato che i giorni invece non seguono lo stesso andamento e sono rappresentati con un numero da 1 a 31.


mercoledì 23 febbraio 2011

Invocare callback javascript da una Applet Java

Le applet sono studiate apposta per essere integrate nel browser. Di conseguenza una tipica azione richiesta all'interno delle applet è quella di richiamare del codice JavaScript, presente o meno sulla pagina entro cui vengono caricate.

Per ottenere questo risultato è sufficiente usare questo codice:

try {
String messageToJs = "Message received from applet";
getAppletContext().showDocument(new URL( "javascript:myJavascriptFunction(\"" + messageToJs + "\")" ));
} catch (MalformedURLException me) {
;//trattamento eccezione
}

Ovviamente sulla pagina html che include l'applet deve essere presente la funzione javascript "myJavascriptFunction" che deve prendere un parametro messaggio, per esempio in questo modo:

<script type="text/javascript" language="JavaScript">
function myJavascriptFunction (message)
{
alert(message);
}
</script>

Le chiamate Javascript non sono bloccanti.

martedì 8 febbraio 2011

Salesforce e il Web Service Connector per Java

Salesforce ha messo a disposizione una serie di tool per permettere una integrazione più facile e rapida degli applicativi con la piattaforma.

In particolare oggi ho usato il Java WSC (Web Service Connector) per creare un client che restituisse la lista degli ultimi contatti creati su Salesforce, sulla mia org di sviluppo. Sul sito dedicato agli sviluppatori è disponibile una ottima e dettagliata guida per creare una prima applicazione: "Introduzione al Web Service Connector di Salesforce per Java"

Anzitutto è necessario scaricare i WSDL necessari, entrambi relativi alla org di sviluppo. I due file sono raggiungibili facendo login su salesforce, quindi clikkare su "Setup > App Setup > Develop > API"
Su questa pagina è possibile scaricare 2 WSDL:
  • Enterprise WSDL: Questo è il descrittore specifico per la nostra org, che espone i metodi e gli oggetti da noi creati. Ovviamente, ogni volta che cambiamo la struttura di qualche nostro oggetto, dovremmo scaricare il nuovo wsdl.
  • Partner WSDL: Questo descrittore è più generico ed è usato per creare applicazioni dinamiche "guidate dai metadati"
A questo punto, se Java è installato, possiamo creare le librerie jar che ci consentiranno di utilizzare i nostri oggetti custom. Per questa operazione è necessario scaricare il jar del Web Service Connector direttamente dalla pagina del progetto WSC; attualmente la versione più aggiornata è la 20.
Avendo scaricato i 2 wsdl, supponiamo con il nome di "enterprise.wsdl" e "partner.wsdl", usiamo i seguenti comandi per ottenere i jar:

java -classpath wsc-20.jar com.sforce.ws.tools.wsdlc enterprise.wsdl enterprise.jar
java -classpath wsc-20.jar com.sforce.ws.tools.wsdlc metadata.wsdl metadata.jar

Ottenuti i due jar, possiamo iniziare a scrivere la nostra applicazione su Eclipse. E' sottinteso che occorre aver installato il plugin Force, disponibile a questo indirizzo: plugin Force IDE per Eclipse 3.6 Helios
Creiamo un nuovo progetto di tipo Java Project, e aggiungiamo le librerie trascinandole su di esso.
Clicchiamo il destro su di esso una volte creato e apriamo le "Properties > Java Build Path > Libraries > Add JARs". Aggiungiamo le seguenti:
  • enterprise.jar
  • metadata.jar
  • wsc-20.jar
Clicchiamo su OK ed abbiamo finito. Ora possiamo utilizzare gli oggetti di Salesforce nel nostro applicativo Java..

giovedì 3 febbraio 2011

Salesforce e Ajax Toolkit - capitolo 1

Salesforce è una piattaforma di CRM (Costumer Relationship Management) "On Demand". La cosa che la rende particolarmente interessante è che ha una comunità attivissima di sviluppatori e continua ad innovarsi integrandosi con framework esistenti.

Per esempio ci sono dei "Connectors" che permettono di utilizzare le API della piattaforma in modo da personalizzare le interazioni tra il sistema, che è "on the clouds", i client, e i servizi esterni. Un esempio è il Java WSC (Web Service Connector), ma oggi mi sono studiato un'altra parte interessante: Ajax Toolkit.

Seguendo la Guida per sviluppatori - Ajax Toolkit, ovviamente in inglese, è abbastanza facile iniziare a fare qualche prova.
Si crea una paginetta di test sulla propria org di sviluppo per mettere subito in pratica gli esempi.. ma dalla guida non è così chiaro quale sia il metodo giusto per utilizzare gli oggetti forniti.

In particolare, avendo creato una pagina visualforce, si deve includere i seguenti script:

<script type="text/javascript" language="JavaScript">
var __sfdcSessionId = '{!GETSESSIONID()}';
</script>
<script src="/soap/ajax/20.0/connection.js" type="text/javascript" language="JavaScript"></script>

Senza il primo, è necessario effettuare la connessione a salesforce tramite login, in quest'altro modo:

<script type="text/javascript" language="JavaScript">
{!requireScript("/soap/ajax/20.0/connection.js")}
sforce.connection.login("username", "password");
</script>

Dove lo username è quello usato nella org per lo sviluppo e la password è la concatenazione della password e del token.

Con questi script è possibile utilizzare gli oggetti JavaScript di Saleseforce per comunicare con la piattaforma.

Le altre funzionalità sono documentate abbastanza bene, con esempi completi e ben fatti. Consiglio di leggere la guida accuratamente ed esercitarsi proprio con gli esempi inclusi.

mercoledì 2 febbraio 2011

Alcune note sull'installazione di Tomcat e la sua configurazione

Seguono alcune note sulla configurazione di un web server. In questo settore uno dei prodotti più validi e gratuiti è Apache Tomcat (giunto alla versione 7 al momento in cui scrivo).

Per installare Tomcat su Windows (XP, Vista o 7):
  1. Installare una JDK o una JRE. Per esempio scarica la JRE 1.6u23
  2. Dopo aver installato java, settare la variabile di ambiente Java Home. In windows cliccare il destro sulle risorse del computer: "Proprietà > Avanzate > Variabili di ambiente > Nuova". Nome: JAVA_HOME , valore: C:\percorso_cartelle_java\java\
  3. Scaricare lo zip da questo indirizzo: Tomcat 7 per Windows 32 bit
  4. Decomprimere lo zip in una cartella (esempio: C:\Tomcat)
  5. Provare ad avviare Tomcat aprendo un terminale (in windows: "Start > Esegui > cmd") e digitando: "C:\Tomcat\bin\startup.bat"
  6. Se non ci sono stati errori, Tomcat è installato correttamente. Aprire un browser e portarsi all'indirizzo: "localhost:8080". Dovrebbe comparire la pagina di Tomcat

A questo punto, nel caso di una rete aziendale, potrebbe essere necessario iompostare le proprietà della connessione per far si che le chiamate rivolte verso localhost siano direzionate direttamente alla macchina che stiamo usando e non ad un proxy che le bloccherebbe.
Anche per ottenere visibilità dalle altre macchine potrebbe essere necessario configurarle in modo da bypassare l'eventuale proxy.

Infine per configurare Tomcat in modo che giri sulla porta "XX" seguire i seguenti passi:

1. Aprire la cartella "C:\Tomcat\conf" sulla macchina
2. Aprire e modificare con notepad il file "server.xml" . Scorrere in basso fino alla linea 184 (circa) ed effettuare le seguenti modifiche:

--- PARTE DA MODIFICARE ----

<Http10Connector port="8080"
secure="false"
maxThreads="100"
maxSpareThreads="50"
minSpareThreads="10" />


--- PARTE MODIFICATA ---

<Http10Connector port="XX"secure="false"
maxThreads="100"
maxSpareThreads="50"
minSpareThreads="10" />

3. Fare un restart di Tomcat.

Per renderlo accessibile tramite browser, sostituire XX con 80. Basterà conoscere l' ip della macchina a cui collegarsi

Probabilmente aggiungerò altre note in seguito, ma per adesso è tutto.

A@T - Java2Easy

martedì 1 febbraio 2011

Come creare una Applet java che invoca un web service

A quanto pare il web manca di un po' di documentazione chiara sull'argomento. Per questo ho deciso di aprire questo blog e riassumere un po' i passi fatti.

Partiamo dal problema..
E' facile trovare diversi tutorial su come creare un web service con Eclipse, che una volta configurato permette di usare una procedura di 2 o 3 click adatta anche ad un programmatore inesperto.

In particolare si può far riferimento a questa ottima guida: "Build a simple web service tutorial"

Dando per scontato di essere riusciti a seguire il tutorial, supponiamo di voler eseguire il client del web service all'interno di una applet java.
Il motivo è banale: vogliamo riuscire a costruire il nostro web service e farne il deploy su un server, ma poi vogliamo interrogarlo da un browser.

E' molto facile costruire la classe java che implementa la applet, poichè Eclipse ci ha già creato in automatico le classi "HelloProxy" e compagnia bella.. ci viene in mente di usare proprio tali classi per evitarci di riscrivere codice, oppure di seguire la loro traccia per invocare il servizio. Iniziamo a scrivere..

Per prima cosa creiamo una classe "HelloApplet" che estende "java.applet.Applet" e della quale facciamo l'override del metodo paint:

package com.tutorial;
import java.applet.*;

import java.awt.Graphics;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;



public class HelloApplet extends Applet
{


 public void paint(Graphics g)
 {
  String msg = "Applet inizializzata";
  String parametro = "MIO_NOME";
  int i = 1;
  g.drawString(msg, 20, 20*i++);
  try {
   Service service = new Service();
   Call call = (Call)service.createCall();
   call.setTargetEndpointAddress("http://localhost:8080/WebServiceTutorial/services/Hello");
   call.setOperationName(new QName("http://soapinterop.org/", "sayHello"));
   msg = (String)call.invoke(new Object[]{ parametro});
  } catch (RemoteException e) {
   msg = "Errore: RemoteException");
  }
  g.drawString(msg, 20, 20*i++);
 }


}

Salviamo la classe, e cliccandoci il destro scelgiamo "Run As.. > Java Applet"

Tutto SEMBRA funzionare.. dico sembra perchè purtroppo se andiamo a usare gli stessi file sul browser, quindi fuori da Eclipse, non funziona più niente.

Il motivo principale è che Eclipse configura la applet per funzionare correttamente, settando il classpath e le policy di sicurezza. La applet però rimane "unsigned" dunque senza la possibilità di avere accesso all'esterno: come fare quindi a parlare col web service?!

Ecco la soluzione:

  1. Creare un fatjar contenente anche le librerie usate nel classpath: axis.jar, commons-logging.jar, commons-discovery-0.2.jar, jaxrpc.jar, saaj.jar, webserviceutils.jar, wsdl4j.jar . La procedura è descritta in questo post precedente: Esportare più librerie java in un unico jar
  2. Firmare il fatjar creato con la procedura descritta qui: Come creare una apple signed
  3. Far partire il server tomcat e provare la applet in un browser

Esportare più librerie java in un unico jar

Prerequisiti:


Per installare fatjar:
  1. Scaricare lo zip da questo link
  2. Estrarre il contenuto della cartella "plugin" interna al file zip nella cartella "Eclipse\plugin"
  3. Riavviare eclipse con l'opzione clean: eclipse -clean
Installato fatjar, usiamolo:
  1. Aprire in eclipse il progetto di cui vogliamo esportare le classi e le librerie.
  2. Cliccare il destro e selezionare "Export > Other > Fat Jar Exporter"
  3. Selezionare il progetto che contiene i file
  4. Dare un nome al fat jar (esempio: "fatwstest.jar")
  5. Aggiungere al classpath tutte le liberierche debbono essere visibili nella nostra classe
  6. Selezionare i jar dall'elenco
Verrà creato il file "fatwstest.jar" nella cartella principale del progetto

Come creare una Applet "signed"

Anzitutto perchè occore "firmare" una applet?

Le applet vengono eseguite in un contesto particolare di sicurezza (sandbox) per cui non possano causare "danni" volontari o meno all'utente che le esegue nel proprio browser.

Una applet è una classe java che estende l'oggetto java.apple.Applet e ne sovraccarica alcuni metodi (tipicamente: init, start, stop, destroy e paint).
Di default è sottoposta a restrizioni e si dice che è una applet "unsigned" (non firmata). Alcune delle restrizioni sono le seguenti:

  • può "parlare" solo con il server su cui è collocata: non può comunicare con altri!
  • Non può leggere file dal server se questi sono oltre un certo livello di gerarchia di cartelle (sopra il padre per esempio)
  • Non può accedere nè in lettura nè in scrittura ai file della macchina locale che la esegue nel browser
Ci sono anche altre limitazioni per le quali vi invito a leggere questa ottima guida riassuntiva:

Tali restrizioni non sono applicate ad una Applet SIGNED (firmata). Vediamo quindi come firmare la nostra.


PREREQUISITI:

Per eseguire questo tutorial è necessario disporre delle seguenti cose:
  • Java installato e configurato correttamente (Nel mio esempio ho la JDK 1.6, ma vanno bene anche le precedenti)
  • Eclipse J2EE

Ecco un riassunto degli step da compiere:
  1. Esportare la applet in un file jar
  2. Creare un file "keystore" per associare una chiave privata al jar tramite keytool
  3. Firmare il file jar con il tool jarsigner e creare il certificato
  4. Creare la pagina html con i giusti riferimenti per utilizzare il jar firmato


1 -  Esportare la applet in un file jar

Ho utilizzato Eclipse (versione 3.2 Helios J2EE) per questa operazione, ma java fornisce già un tool per fare tutto da console. In Eclipse è sufficiente cliccare il destro sul package che contiene la applet e scegliere "Export > jar".
Indicare il file e il percorso dove vogliamo creare il jar e lasciare le altre opzioni di default

In questo esempio la mia applet si chiama "SimpleWSApplet" ed è contenuta nel package "wstest"
Ho esportato quindi la classe nel file "wstest.jar" sul desktop.


2 - Creare un file "keystore" per associare una chiave privata al jar tramite keytool

Aprire il terminale (su Windows: "Start > Esegui > cmd") e portarsi nella cartella che contiene il jar da associare alla chiave. Nel mio esempio: "cd Desktop"

Eseguire keytool. Nel mio caso, dato che Java è installato nella cartella "C:\java\jdk1.6.0_23" ho usato il seguente comando:
C:\java\jdk1.6.0_23\bin\keytool.exe -genkey -alias www.mio_sito_web.it -keyalg RSA -keystore .\nome_file_keystore.jks

Nella procedura guidata, è importante che associate il sito web usato nell'alias e che utilizziate lo stesso nel prossimo step.
Gli altri dettagli sono a vostra discrezione e compariranno nel certificato.

Verrà creato il file "nome_file_keystore.jks" sul Desktop.


3 - Firmare il file jar con il tool jarsigner e creare il certificato

Eseguire jarsigner. Nell'esempio ho usato i seguenti parametri per il comando:
C:\java\jdk1.6.0_23\bin\jarsigner.exe -keystore .\nome_file_keystore.jks .\wstest.jar www.mio_sito_web.it

Verrà modificato il file wstest.jar, firmandolo ed associandoci un certificato con una certa validità.


4 - Creare la pagina html con i giusti riferimenti per utilizzare il jar firmato

Apriamo notepad e creiamo la pagina per testare il nostro jar firmato. Il codice che ho usato è il seguente:
<html>
<head>
<title>Signed Applet Test</title>
</head>
<body>
<p>Test di una applet firmata</p>
<br />
<applet width="400" height="400" code="wstest.SimpleWSApplet.class" archive="wstest.jar>Applet not supported in your browser</applet>
</body>
</html>

Salviamo il file come "prova_applet.html" nella stessa cartella che contiene il jar e apriamolo in un browser.

Ci viene rischiesto di accettare il certificato per permettere alla applet di funzionare.

That's all folks..