TSM - Aplicații IoT cu Java ME Embedded 8

Dănuţ Chindriş - Java Developer

În numărul 31 al revistei am făcut o introducere în ceea ce privește subiectul Internet of Things din perspectiva platformei Java. Așa cum am promis, vom continua această discuție prezentând detaliile creării unui proiect Java ME Embedded 8. Această versiune reprezintă un important pas înainte, odată cu adoptarea CLDC 8 - care este un subset al Java Standard Edition - și MEEP 8 - specificație care definește un mediu puternic și flexibil pentru sisteme embedded de dimensiuni reduse. Alături de acestea, trebuie să remarcăm alinierea platformei despre care discutăm la Java SE 8.

Tooling pentru aplicații ME - Oracle Java ME SDK 8.1

Aplicațiile Micro Edition pot fi dezvoltate atât manual cât și cu ajutorul unui SDK specializat, cunoscut sub numele Oracle Java ME SDK 8.1. SDK-ul, distribuția Java ME, documentația și orice alte resurse mai sunt necesare dezvoltării aplicațiilor embedded, se găsesc la adresa Oracle destinată platformei.

Înainte de a începe să dezvoltăm aplicații embedded, Oracle recomandă în primul rând instalarea Oracle Java ME SDK 8.1 - pachet software care la momentul scrierii acestui articol este disponibil doar pentru sistemul de operare Windows. Următorul pas este descărcarea distribuției Java ME Embedded 8 destinată dispozitivului pe care dorim să rulăm aplicațiile. Aceasta vine sub forma unei arhive ZIP și trebuie transferată pe dispozitiv - cu ajutorul unui tool cum este PuTTY -, unde urmează să fie instalată. De asemenea, se recomandă păstrarea unei copii pe sistemul desktop, unde se va executa dezvoltarea aplicațiilor. Acest ultim pas nu este obligatoriu, însă este recomandat pentru cazul în care dezvoltatorul dorește să execute comenzi pe dispozitiv cu ajutorul AMS CLI (Application Management System Command Line), prin intermediul programului Developer Agent.

Prima noastră aplicație Java ME

Odată ce am instalat SDK-ul și Java ME, putem să începem dezvoltarea unei aplicații embedded. Sub forma ei cea mai simplă, o astfel de aplicație trebuie să conțină o clasă care extinde clasa abstractă javax.microedition.midlet.MIDlet, un fișier manifest și un fișier JAD (Java Application Descriptor). Am putea scrie o astfel de aplicație manual, fără ajutorul unui IDE, care să automatizeze anumiți pași. Acesta este un bun exercițiu pentru dezvoltatorul care intră pentru prima dată în contact cu Java ME Embedded 8. Astfel, ne propunem să creăm o simplă aplicație, care afișează în consolă un mesaj la pornirea aplicației și unul la oprirea acesteia.

În primul rând, creăm o clasă care extinde javax.microedition.midlet.MIDlet, implementând metodele :

public class Hello extends javax.microedition.midlet.MIDlet {
public void startApp() {
 System.out.println("Hello MIDlet");
}
public void destroyApp(boolean 
  unconditional) {
    System.out.println(
        "Goodbye MIDlet");
    }
}

Pentru a continua în aceeași manieră, compilăm manual clasa pe care tocmai am scris-o, cu o comandă similară celei listată aici:

javac -cp %JAVA\_ME\_SDK%\\lib\\meep\_8.0.jar -d classes
src\\ro\\leje\\Hello.java

Observăm că avem nevoie de biblioteca meep_8.0.jar la compilare, întrucât aceasta definește clasa abstractă . Această bibliotecă se găsește în directorul %JAVA\_ME\_SDK%\\lib, unde %JAVA\_ME\_SDK% reprezintă calea unde a fost instalat SDK-ul.

Următorul pas îl reprezintă crearea fișierului manifest, care trebuie să conțină cel puțin următoarele informații:

MIDlet-Name: Hello
MIDlet-Version: 1.0
MIDlet-Vendor: Today Software Magazine
MIDlet-1: Hello,,ro.leje.Hello
MicroEdition-Configuration: CLDC-1.8
MicroEdition-Profile: MEEP-8.0

Presupunând că am salvat fișierul manifest cu numele , putem trece la următorul pas, care este crearea arhivei JAR. Această arhivă trebuie să conțină clasa compilată și fișierul manifest. Realizăm aceasta lansând în execuție următoarea comandă:

jar cfm build\\Hello.jar MANIFEST.MF -C classes .

Odată ce am creat fișierul , pentru această aplicație mai avem nevoie de un singur lucru, și anume descriptorul aplicației, cunoscut și sub numele de fișier JAD (Java Application Descriptor). Acesta se aseamănă cu fișierul manifest, conținând următoarele linii obligatorii:

MIDlet-Name: Hello
MIDlet-Version: 1.0
MIDlet-Vendor: Today Software Magazine
MIDlet-1: Hello,,ro.leje.Hello
MIDlet-Jar-Size: 1076
MIDlet-Jar-URL: Hello.jar
MicroEdition-Profile: MEEP-8.0

Observăm că unul dintre atributele obligatorii ale fișierului JAD este dimensiunea în bytes a arhivei. Salvăm acest fișier cu numele în același director cu arhiva JAR.

Rularea aplicației cu un emulator

În acest moment avem o aplicație Java ME Embedded 8 completă, pe care o putem lansa în execuție. Cea mai simplă modalitate pentru a face acest lucru este folosirea emulatorului pe care ni-l pune la dispoziție SDK-ul. Presupunând că directorul curent este directorul al proiectului nostru, putem lansa următoarea comandă:

emulator -Xdevice:EmbeddedDevice1 -Xdescriptor:Hello.jad

Cu ajutorul opțiunii -Xdevice specificăm numele dispozitivului pe care dorim să rulăm aplicația. EmbeddedDevice este un dispozitiv emulat, configurat automat în momentul în care instalăm SDK-ul. Prin intermediul celei de-a doua opțiuni prezente în comanda pe care am executat-o -Xdescriptor specificăm locația și numele descriptorului aplicației noastre.

Putem observa rezultatul rulării aplicației în următoarea figură:

 

Aplicaţia Hello în emulator

Mesajul Hello MIDlet este afișat la pornirea MIDlet-ului, iar mesajul Goodbye MIDlet la oprirea acestuia, cu ajutorul combinației de taste Ctrl + C.

Rularea aplicației pe dispozitiv

O altă modalitate de a rula aplicația este prin instalarea acesteia pe dispozitivul țintă. Pentru acest articol am folosit o plăcuță de dezvoltare Raspberry PI Model B+, dotată cu un dongle Wi-Fi. De asemenea, menționăm faptul că platforma are deja instalat un sistem de operare Linux, ceea ce facilitează munca noastră cu acest hardware. Având această configurație la îndemână putem accesa de la distanță sistemul Raspberry PI, cu ajutorul unui program precum PuTTY.

Accesăm plăcuța cunoscându-i IP-ul și un user cu drepturi de root. Odată ce ne-am autentificat, schimbăm directorul curent, pentru a ne situa în directorul bin al distribuției Java ME Embedded 8 instalată. Acest lucru este ilustrat în următoarea captură de ecran:  

Accesarea plăcuţei de dezvoltare cu PuTTY

Figura ne arată faptul că următorul pas a fost rularea script-ului usertest.sh cu ajutorul comenzii sudo ./usertest.sh. Acest script a lansat în execuție Java runtime, care permite accesul la AMS. Platforma ascultă pe portul 2201 și ne permite să ne conectăm de la distanță pentru a face managementul aplicațiilor ME.

Înainte de a putea continua, trebuie să înregistrăm dispozitivul cu ajutorul aplicației Device Connections Manager. De vreme ce avem instalat SDK-ul, ar trebui să găsim în SysTray o iconiță intitulată Oracle Java(TM) ME SDK 8.1 Device Manager. Făcând click pe aceasta, deschidem managerul de conexiuni, unde putem adăuga plăcuța noastră, pe care o identificăm după IP. Odată ce am înregistrat dispozitivul, ar trebui să avem în fereastra activă ceva similar figurii următoare:

 

 Înregistrarea unui dispozitiv

Acum putem instala pe Raspberry PI aplicația pe care am creat-o într-o secțiune anterioară. Avem la dispoziție câteva modalități pentru a face aceasta, una dintre ele fiind cu ajutorul utilitarului Device Selector, care este la dispoziția noastră, bineînțeles, datorită faptului că am instalat SDK-ul. Deschizând această aplicație, observăm o listă cu toate dispozitivele instalate la momentul curent. Predefinit, avem la dispoziție trei dispozitive emulate: EmbeddedDevice1, EmbeddedDevice2 și Qualcomm_IoE_Device. Alături de acestea, putem vedea plăcuța Raspberry PI, pe care tocmai am înregistrat-o, cu numele EmbeddedExternalDevice1. Dorim să rulăm aplicația Hello pe acest dispozitiv, așa că facem click-dreapta și alegem Run JAR or JADÖ, după cum este ilustrat și în figura următoare:

  

 Rularea aplicaţiei pe dispozitiv

Alegând de pe disk fișierul Hello.jad cu ajutorul ferestrei de tip Open care a apărut, platforma lansează în execuție managerul de aplicații, care instalează pachetul nostru software pe plăcuță, lucru pe care îl putem vedea în următoarea captură de ecran:

 

 

Managerul de aplicaţii

Faptul că aplicația noastră Java ME Embedded 8 rulează într-adevăr pe dispozitiv ni-l demonstrează consola PuTTY, unde putem vedea output-ul pornirii și opririi aplicației:

Output-ul aplicaţiei în consolă

Observăm faptul că în captura de ecran anterioară este listat și mesajul care trebuie afișat la distrugerea aplicației. Aceasta pentru că înainte de a face captura am apăsat butonul Remove, prezent în interfața aplicației de management.

Așadar, oricare ar fi modalitatea aleasă pentru a rula aplicații Java ME Embedded 8 fie pe dispozitive, fie într-un emulator, acesta este un proces relativ facil. Mai există o cale de a rula aplicații embedded pe dispozitive, cu ajutorul liniei de comandă AMS, prin intermediul utilitarului Developer Agent, însă această metodă este în fază de concept în această versiune a platformei.

Pe parcursul acestui articol am urmărit pașii creării, instalării și rulării unei aplicații minimale, efectuând manual fiecare sarcină. Totuși, platforma ne pune la dispoziție o serie de unelte care vin în întâmpinarea nevoilor dezvoltatorilor și țintesc sporirea productivității acestora. Într-un articol viitor ne propunem să prezentăm procesul dintr-o altă perspectivă, automatizat cu ajutorul acestor unelte.

Concluzii

Dezvoltarea aplicațiilor Java ME Embedded 8 poate fi un proces interesant și distractiv, dar uneori dificil și frustrant. Din păcate, materialele de studiu dedicate Java ME Embedded 8 sunt puține. Până în momentul de față există o singură carte publicată care abordează subiectul dezvoltării aplicațiilor Java ME Embedded 8. De asemenea, majoritatea articolelor existente pe această temă au o abordare generală, prezentând în linii mari trăsăturile acestei noi platforme. Deocamdată, thread-urile pe forumuri sunt relativ puține, însă putem observa interesul din ce în ce mai mare al utilizatorilor, dornici să învețe cum să folosească noua versiune. Cele mai consistente resurse pe care le avem la dispoziție sunt ghidurile oficiale compilate de către Oracle, care pot fi descărcate de pe site-ul oficial al platformei.