informazioni su: Ariel Techiouba

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..