In questo articolo vedremo come realizzare una semplice applicazione Java Embedded. Immaginiamo uno scenario nel quale abbiamo una società produttrice di frigoriferi dotati di collegamento wi-fi e quindi accesso alla rete Internet.
La nostra azienda immaginaria vorrebbe installare su ogni frogorifero venduto un'applicazione Java in grado di trasmettere la temperatura media dell'elettrodomestico ad un proprio server remoto, per fornire un supporto di assistenza di maggiore qualità ai clienti.
L'applicativo Java
L'applicazione Java che andiamo a realizzare utilizza le API socket per stabilire una connessione HTTP verso il server dell'azienda al fine di trasmettere la temperatura del frigorifero:
package it.fridge.services;
import java.net.*;
import java.io.*;
public class FridgeClient {
public static void main(String [] args) {
String serverName = "www.fridgeservice.it";
int port = 80;
int temp = 23;
try {
Socket client = new Socket(serverName, port);
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("Temperature: " + temp);
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Nel nostro programma dimostrativo la temperatura è un valore costante ma in un caso reale dobbiamo pensarla acquisita attraverso l'utilizzo di un sensore. Posizioniamoci all'interno della directory di installazione di Java Embedded e compiliamo da riga di comando il file Java creato:
javac it/fridge/services/FridgeClient.java
sfruttiamo quindi il tool jdeps per analizzare il file compilato:
jdeps -P it/fridge/services/FridgeClient.class
l'output del comando ci informa che il profilo minimo per eseguire la nostra applicazione è il compact1
. Con questa informazione andiamo a compilare nuovamente il file Java specificando il profilo compact1
:
javac -profile compact1 it/fridge/services/FridgeClient.java
completiamo il tutto con la realizzazione di un jar eseguibile da installare sul dispositivo embedded:
jar -cvfm fridgeclient.jar manifest.txt
it/fridge/services/*.class
dove manifest.txt
è un semplice file di testo contenente la sola linea:
Main-Class: it.fridge.services.FridgeClient
La seguente immagine riassume, graficamente, i passi precedentemente eseguiti:
Deploy dell'applicazione
Come nel caso di una JRE personalizzata, per eseguire l'applicazione sul dispositivo embedded dobbiamo trasferire il file dalla directory in cui risiede al file system del dispositivo di destinazione. La copia può essere realizzata con il comando scp
:
scp -r /home/osboxes/jembedded/ejdk1.8.0_211/fridgeclient.jar
root@target:/opt/local/ejdk/
Attraverso il Java launcher possiamo eseguire l'applicazione sul target device utilizzando sia l'opzione -cp
che -jar
. La seguente sequenza di comandi esegue in remoto, sul target device, l'applicativo installato:
ssh username@192.1.2.1
richiesta password ....
java -cp fridgeclient.jar it.fridge.services.FridgeClient