ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 149
Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 36
Abonament PDF

Aplicații IoT cu Java ME Embedded 8

Dănuţ Chindriş
Java Developer
@Elektrobit Automotive



PROGRAMARE

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

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects