Blog

Search by tag: java

bruno @ 03/07/2008 11:51 - No comments yet

In ogni grande azienda, quando si tratta di adottare una nuova tecnologia, ci si trova sempre frenati da qualcuno che pone la domanda “e con tutto il software sviluppato finora che facciamo?”.
In effetti è vero che non si può pretendere di fare il porting di tutto il codice già scritto ogni volta che viene scoperto un nuovo framework di programmazione.

interoperabilityLa soluzione sono i Web Services, “un sistema software progettato per supportare l’interoperabilità tra diversi elaboratori su di una medesima rete” (fonte: Wikipedia).

Il Web Services Description Language (WSDL) è uno standard internazionale, promosso dal World Wide Web Consortium (W3C), che permette la descrizione delle caratteristiche di un Web Service attraverso uno schema XML/SOAP, il quale viene utilizzato come “strumento di sincronizzazione” tra il framework fornitore del servizio e quello che sarà l’utilizzatore (che, grazie a questa forma di comunicazione standard, potranno anche essere basati su linguaggi di programmazione eterogenei).
Grazie al WSDL è possibile, per esempio, utilizzare un’infrastruttura software progettata e sviluppata su un server Java (es. Tomcat), richiamandone i metodi da un server basato su Ruby on Rails (es. Mongrel).
In particolare, per quanto riguarda Ruby, si dovrebbe utilizzare la gemma SOAP4R, che però nelle ultime versioni è inclusa direttamente nel pacchetto ufficiale.

Un piccolo esempio di tutto ciò si può realizzare in pochi semplici passi, non c’è neanche bisogno di scrivere un vero tutorial.

  • Creare una Web Application con un Web Service in Java e deployarla su Tomcat:
@WebService()
public class MyWebService {
    @WebMethod(operationName = "sayHello")
    public String sayHello(@WebParam(name = "firstName")
    String firstName) {
        return "Hello, " + firstName + "!";
    }
}
  • Creare un progetto in Rails e richiamare il Web Service remoto:
class MyController < ApplicationController
  require 'soap/wsdlDriver'

  def index
    XSD::Charset.encoding = 'UTF8'
    wsdl = "http://TOMCAT_SERVER:8080/MyWebApp/MyWebService?wsdl" 
    service = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver

    result = service.sayHello :firstName => 'Bruno'

    render :text => result.return
  end
end

Ovviamente i due componenti precedentemente descritti potranno anche stare sulla stessa macchina, comunicando tramite l’interfaccia di loopback.

C’è da ricordare che lo standard XML dei Web Services permette di ritornare come output soltanto i seguenti tipi di dato:

  • Boolean
  • Byte
  • Double
  • Datatype
  • Decimal
  • Enumeration
  • Float
  • Int
  • Long
  • Qname
  • Short
  • String
  • TimeInstant
  • UnsignedByte
  • UnsignedInt
  • UnsignedLong
  • UnsignedShort
  • Array dei suddetti tipi

quindi per passare tipi di dati complessi da un’applicazione all’altra sarà necessario implementare dei metodi di serializzazione/deserializzazione sugli oggetti.

PS: un motivo in più per utilizzare NetBeans, che dalla versione 6 supporta anche Ruby on Rails e PHP! :)


bruno @ 10/12/2007 22:06 - 8 comments

Ricordare quando scoppiò la bufera sul DRM, sul TCPA, sul cosiddetto “Palladium”, il chip Fritz e (soprattutto) l’adozione di queste tecnologie sui sistemi operativi proprietari?
Al giorno d’oggi Microsoft continua per la sua strada (fallimentare), Apple è tornata saggiamente sui suoi passi, ma… è tutto qui? Non direi!

Oggi ho assaporato con i miei stessi polpastrelli le limitazioni di un sistema di Trusted Computing, quello che abbiamo tutti installato sui nostri cellulari (o almeno tutti quelli con SO basati su Java). Lo sapevate?
E cosa comporta la presenza di questo “sistema di sicurezza”?
Vi racconto la mia esperienza.

Ho sviluppato un programmino in Java 2 Micro Edition (J2ME), da far girare sul mio Nokia 6280, che ha un sistema operativo Nokia Series 40 (S40).
Ho implementato molte feature, tra cui connessione TCP/IP e Bluetooth, RecordStore per registrare le impostazioni come su un normale database, parsing di feed RSS, parsing di dati GPS provenienti da un ricevitore collegato, cattura delle immagini dalla fotocamera, accesso al filesystem per importare immagini nel programma.

Cosa vengo a scoprire?? Che quando tento di utilizzare alcune funzioni, come l’accesso ai file o la connessione tramite socket, l’applicazione si blocca dicendo “You are not authorized to access the restricted API!
L’ambiente MIDP2, sotto cui girano le MIDlet, è come un recinto da cui si riesce a vedere perfettamente ciò che sta all’esterno, ma qualcosa ti blocca quando tenti di raggiungerlo.

OK, ho pensato che se hanno deciso di vietare anche soltanto la lettura dei file, ci sarà un buon motivo che riguarda ALMENO la sicurezza dell’universo!
Ma che!!!! Ho letto sul forum degli sviluppatori Nokia che, per usare quelle ed altre funzioni, è necessario COMPRARE un certificato dalle authority internazionali e “firmare” la MIDlet con questo certificato!! (in pratica, basta pagare per allargare il recinto!)
E quanto costano questi certificati, presso le varie authority?? Verisign offre un certificato con validità di 1 anno al modico prezzo di 499 dollari, mentre Thawte ci fa il favore di proporre lo stesso articolo per 299 dollari.
Dopo questa banalissima operazione, la nostra applicazione avrà finalmente accesso alle preziose funzioni riservate che ci erano state negate.

Wow! Grazie! Ma io volevo soltanto realizzare un programmino cretino e avere il piacere di farlo girare sul mio cellulare!! E’ veramente frustrante! :’-(

A questo punto aspetto con ansia gli sviluppi di Android... free, open source e, SPERO, senza problemi con i certificati!


bruno @ 07/12/2007 16:15 - 8 comments

Chi ha intenzione di sviluppare MIDlet per cellulari utilizzando il WTK 2.5.2 della Sun su una macchina a 64 bit, si troverà nella situazione di non poter avviare l’emulatore, poichè esso si rifiuterà di partire sostenendo che:

java.lang.UnsatisfiedLinkError:
    /home/user/netbeans-6.0/mobility8/WTK2.5.2/bin/sublime.so:
    /home/user/netbeans-6.0/mobility8/WTK2.5.2/bin/sublime.so:
    wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)

Insomma… problemi di compatibilità tra binari a 32 e a 64 bit!

Per risolvere il problema, cominciamo con lo scaricare una JDK a 32 bit;
poi andiamo nella directory dove abbiamo installato WTK (nel mio caso è quello compreso nell’installazione di NetBeans 6) e decomprimiamo il pacchetto:

$ cd ~/netbeans-6.0/mobility8/WTK2.5.2
$ sh /path/to/jdk-6u3-linux-i586.bin
$ ln -s jdk1.6.0_03 jdk32

In seguito, dovremo editare lo script di avvio dell’emulatore WTK:

$ cd ~/netbeans-6.0/mobility8/WTK2.5.2
$ vim bin/emulator

(ovviamente potete utilizzare il vostro editor preferito al posto di vim)

e modificare la prima riga del codice in questo modo:

javapathtowtk=/home/user/netbeans-6.0/mobility8/WTK2.5.2/jdk32/bin/

Adesso potrete finalmente testare le vostre applicazioni J2ME sull’emulatore! :)


bruno @ 22/11/2007 11:27 - 2 comments

Dopo aver aggiornato automaticamente, e senza alcun problema, la mia Kubuntu casalinga dalla release Feisty Fawn alla nuova Gusty Gibbon, mi sono buttato nell’upgrade della distribuzione sul mio PC in ufficio… c’era da aggiornare Fedora dalla versione 6 alla 8 (passando per la 7) utilizzando yum, ma niente mi faceva pensare che sarebbe stato un cambiamento indolore.

Si trovano numerose guide in giro per la rete, tutte che consigliano gli stessi passaggi (cito solo quelli per l’aggiornamento alla versione 8, per la 7 sono analoghi):

Scaricare fedora-release-8-3.noarch.rpm e fedora-release-notes-8.0.0-3.noarch.rpm.

# rpm -Uhv fedora-release-8-3.noarch.rpm fedora-release-notes-8.0.0-3.noarch.rpm
# yum clean all
# yum -y update

Si è messo a scaricare qualche migliaio di pacchetti e il mattino successivo ho trovato un bel “Completed!” impresso sul terminale. Bene! cioè… Strano! :D

Prima “sorpresina”: la ATI/AMD ha deciso di non supportare più, con i driver ufficiali fglrx, la scheda video installata su questo PC, una FireGL V3100 128 MB, come se ormai fosse da buttare. Mah!
Per far funzionare l’accelerazione 3D si dovrebbero downgradare i driver manualmente, ma la versione precedente supporta fino a Xorg 7.1… quindi avrei dovuto downgradare anche Xorg… e tutte le sue dipendenze ovviamente (credo che si sarebbe portato appresso tutti gli altri pacchetti di Fedora!).
Insomma… risultato finale: niente Compiz! :(
(lo so, può sembrare poco attinente ad un pc da ufficio, ma vi assicuro che alcuni plugin sono utilissimi)

Secondo inconveniente: non funziona Java! Al primo tentativo di far partire NetBeans, il risultato è stato un bellissimo…
java: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.

Identico messaggio per tutte le altre applicazioni Java con interfaccia grafica.

Wow! Che accoglienza!

Ho girovagato un po’ su Google e poi ho trovato la soluzione… basta aprire un terminale e…
# sed -i 's/XINERAMA/FAKEEXTN/g' [path java]/jre/lib/i386/xawt/libmawt.so
( spiegazione: sed è uno “stream editor”, cioè tratta anche i file binari mantenendone l’integrità… gli è stato dato il comando di sostituire (s) tutte le occorrenze (g) della stringa XINERAMA con la stringa FAKEEXTN nel file [..]/libmawt.so, scrivendo direttamente sul file (-i) )

Dopo questa operazione è partito tutto regolarmente.

Per il resto tutto a posto.
C’è da notare che gli unici problemi sono stati causati uno dalla ATI e l’altro dalla Sun, ma mi sento di dire che Ubuntu è completamente su un altro pianeta! :)


bruno @ 01/03/2007 22:04 - No comments yet

A lavoro ho sviluppato un programma in Java che utilizza delle librerie particolari per la comunicazione con la porta seriale; le librerie però sono diverse tra Windows e Linux, con una procedura di installazione abbastanza noiosa. Mi serviva quindi qualcosa che potesse automatizzare questo processo e che rendesse anche più semplice l’accesso al programma (i programmi Java si lanciano da riga di comando con java -jar ”/percorso/del/file.jar”.. non è molto bello da vedere!). Dopo un po’ di ricerche mi sono imbattuto in questo simpaticissimo programmino

anch’esso scritto in Java (quindi per girare necessita semplicemente di un qualsiasi sistema con Java Virtual Machine installata), open source, rilasciato sotto la Apache Software License version 2.0, e che ha il compito di produrre dei semplicissimi wizard di installazione per le nostre applicazioni. Dopo un primo momento di smarrimento, ho capito il funzionamento (e ho capito anche che non è più il caso di non leggere mai il manuale) ed in pochi minuti sono stato in grado di produrre il mio installer multipiattaforma, con una gradevole interfaccia grafica multilingua. :)

Il pregio di IzPack è appunto la sua natura orientata alla realizzazione di programmi che possano girare su diversi sistemi operativi; per la configurazione si basa su file XML con una struttura molto user-friendly e che permette di personalizzare ogni singolo aspetto dell’installer finale: è possibile distribuire il programma con i sorgenti o meno, includere un eseguibile di disinstallazione, aggiungere i collegamenti nel menù e sul desktop, il tutto indifferentemente da quale sistema si stia utilizzando. Sarebbe anche possibile sviluppare facilmente dei moduli aggiuntivi per l’installer (tutto spiegato nella documentazione), ma non ne ho avuto bisogno perchè è già veramente molto completo. Una volta completata la configurazione, si lancia la compilazione dandogli in input il file XML con le specifiche… et voilà, è pronto il brodo + brodo che possa esistere, per un informatico che sta assaporando solo adesso le gioie di vedere la propria creatura girare ovunque! :P

Consigliatissimoooooooo!


bruno @ 15/01/2007 23:00 - 12 comments

Molti sono scoraggiati ad imparare a programmare in Java Enterprise Edition (J2EE) dalle difficoltà nell’impostazione dell’ambiente di lavoro nel proprio PC di casa. La scelta dei componenti e la poca documentazione “user-friendly” reperibile in rete contribuiscono a lasciare J2EE relegato in ambito aziendale, dove di solito si trova un sistema di server già pronti all’uso e… bisogna solo programmarci dentro.

Anch’io ho rimandato l’approccio a questo ambiente più di quanto volessi, ma a questo punto posso confermare che è più facile di quello che sembra! :D

Prima di tutto c’è da fare una doverosa introduzione: avevo sempre sentito parlare male di Java, a causa della sua pesantezza e della conseguente lentezza. Ad un certo punto mi sono chiesto il motivo per cui è così diffuso nelle aziende… e vi assicuro che è INCREDIBILMENTE diffuso!

Mi sono dato una spiegazione dopo diversi colloqui di lavoro: è frequente che un’azienda abbia la necessità di sviluppare diverse forme di interazione con un unico ambiente centrale, un “core”, che dovrà dialogare con client sviluppati in vario modo (interfacce testuali, grafiche, per dispositivi mobili, interfacce web, eccetera)... ed in questa ottica Java mette a disposizione dei programmatori una stuttura orientata al riutilizzo del codice già scritto, alla scalabilità ed al lavoro di gruppo. Ne risulta che l’azienda ci guadagna… ed anche tanto!

Andiamo all’aspetto pratico. Bisogna decidere quali programmi utilizzare come application server e come ambiente di sviluppo. Come Wikipedia insegna, un application server è un software che fornisce l’infrastruttura e le funzionalità di supporto, sviluppo ed esecuzione di applicazioni e componenti server in un contesto distribuito. Si tratta di un complesso di servizi orientati alla realizzazione di applicazioni per il web, multilivello ed enterprise, con alto grado di complessità. Sapendo per certo che in queste diatribe ne escono sempre vincitori i rappresentanti del software libero, sia come sicurezza che come reperibilità (ed anche per i costi!!!), non ho neanche guardato il software commerciale (WebSphere di IBM, Oracle AS, Weblogic, ...). La scelta, per quanto riguarda l’AS, è ricaduta sul progetto open-source più sviluppato e più supportato da una vasta comunità di sviluppatori: JBoss.

E’ possibile scaricarlo direttamente dalla sezione download del sito ufficiale (io ho optato per l’ultima release stabile, che al momento è la 4.0.5).

Un IDE di sviluppo che qualche mese fa mi è risultato ottimo nella programmazione Java (standard e mobile) è stato Eclipse (anch’esso open source), quindi mi sono informato se fosse possibile renderlo interoperabile con le strutture J2EE. Le soluzioni erano diverse, ma alla fine ho deciso scaricare JBoss Eclipse IDE, una versione di Eclipse modificata direttamente dagli sviluppatori di JBoss, con installati tutti i plugin necessari al funzionamento in accoppiata con l’application server.

Ah… ovviamente la macchina server è equipaggiata con una stupenda Slackware Linux 11.0! ;)
(tutte le indicazioni seguenti riguardano Slackware, ma sono facilmente riportabili ad altre distribuzioni)

L’installazione di JBoss è semplice, basta estrarre l’archivio:

$ cd /opt
$ unzip /path/to/downloaded/jboss-4.0.5.GA.zip
$ ln -s jboss-4.0.5.GA jboss

Non bisogna compilarlo perchè è anch’esso scritto in Java, quindi è multi-piattaforma e gira sotto la Java VM ;)

Prima di far partire il server è necessario installare JDK, qualora non fosse già presente nel sistema, per poi impostare qualche variabile d’ambiente:

$ ln -s /usr/lib/jdk1.5.0_09 /usr/lib/java
$ export JBOSS_HOME='/opt/jboss'
$ export JAVA_HOME='/usr/lib/java'
$ export CLASSPATH='/usr/lib/java/lib/tools.jar'

A questo punto si potrà lanciare JBoss eseguendo

/opt/jboss/bin/run.sh > /dev/null &

(uso la redirezione dell’output per evitare che la shell sia inondata dai messaggi di debug anche con il programma messo in background)

E’ consigliabile salvare uno script d’avvio in

/etc/rc.d/rc.jboss
, in modo da poter decidere se lanciare il server al boot della macchina dando o meno l’attributo di esecuzione al file:

case "$1" in
  start)
    echo "Starting JBoss:  /opt/jboss/bin/run.sh" 
    export JBOSS_HOME='/opt/jboss'
    export JAVA_HOME='/usr/lib/java'
    export CLASSPATH='/usr/lib/java/lib/tools.jar'
    /opt/jboss/bin/run.sh > /dev/null &
  ;;
  stop)
    echo "Stopping JBoss..." 
    /opt/jboss/bin/shutdown.sh -S > /dev/null &
  ;;
  restart)
    echo "Restarting JBoss..." 
    /opt/jboss/bin/shutdown.sh -S > /dev/null &
    /opt/jboss/bin/run.sh > /dev/null &
  ;;
  *)
    echo "Usage: $0 {start|stop|restart}" 
    exit 1
  ;;
esac

Adesso è il turno di JBoss IDE:

# cd /usr/local
# tar xfvz /path/to/downloaded/JBossIDE.tar.gz
# chmod +x /usr/local/eclipse/eclipse

Sarà necessario eseguire Eclipse come root, per fare in modo che il server possa essere gestito dall’interno dell’applicazione. Per fare ciò, utilizzeremo il programma sudo, modificando il file

/etc/sudoers
in questo modo:

# User alias specification
#### inserisci qui gli utenti sviluppatori ####
User_Alias     JBOSS_DEVEL = bruno, pippo 
# Cmnd alias specification
Cmnd_Alias     JBOSS_IDE = /usr/local/eclipse/eclipse
# User privilege specification
JBOSS_DEVEL     ALL = NOPASSWD: JBOSS_IDE

Poi basterà lanciare JBoss IDE con il comando

$ sudo /usr/local/eclipse/eclipse

(ed eventualmente aggiungere un’icona sul desktop che lanci questo comando).

Prima di iniziare a programmare, sarà necessario impostare su Eclipse i parametri del server JBoss nella finestra Run > Debug…, cliccando a sinistra su JBoss 4.0.x e poi su New. Ovviamente la home directory deve essere impostata su

/opt/jboss
.

A questo punto sarà possibile iniziare un nuovo progetto J2EE, aggiungere componenti come EJB e Servlet, impostare le XDoclet, effettuare il packaging ed eseguire debug e deploy sulle proprie web-app! :)

Adesso la cosa migliore da fare è seguire un buon TUTORIAL per imparare velocemente ad usare tutti questi simpaticissimi giocattoli :)


bruno @ 11/05/2006 00:30 - 3 comments

E’ tanto che non scrivo. Sia perchè ci sono delle situazioni un po’ troppo delicate in gioco, quindi la mia testa è altrove, sia perchè ho avuto veramente pochissimo tempo.

Ho imparato il Java! :D

In 2 giorni mi sono letto un intero corso… molte cose già le sapevo, perchè sono i fondamenti della programmazione Object Oriented, ma devo dire che come si imparano con Java non si imparano con nessun altro linguaggio! Quindi… ieri ho finito con il “corso base” e mi sono buttato subito sulla cosa + sfiziosa: la programmazione MIDP1 e MIDP2 per i cellulare J2ME-enabled!!! :D Il primo “Hello World!” spuntato sul display del mio Nokia 6280 è stato troppo emozionante! Poi ho capito anche come programmare semplici giochini grafici, ma non è esattamente il mio obbiettivo.

Oggi mi sono detto “OK, fin quì tutto facile: perchè non andare a sbirciare un po’ nell’ambiente enterprise?”. Significava installare tutto l’occorrente per J2EE, ma la piattaforma di programmazione più utilizzata costa “una cifra”... quindi mi sono messo d’impegno, ho predisposto la mia Slackware per avviare il demone Tomcat e poi ho installato il plugin Lomboz su Eclipse. Tutto perfetto, soltanto qualche problemino iniziale con i permessi che ho risolto inizialmente in maniera molto… ehm… sbrigativa (777 :P). Adesso andando con il browser sulla porta 8080 della mia macchina, si apre il mio nuovo mondo :)

Perchè tutto ciò? Beh… perchè il mercato richiede fortemente questo! Ho detto tutto….....