Showing posts with label Today Software Magazine. Show all posts
Showing posts with label Today Software Magazine. Show all posts

Wednesday, June 24, 2015

Aplicații IoT cu Java ME Embedded 8

(Publicat în revista Today Software Magazine, Numărul 36, Iunie 2015: http://issuu.com/todaysoftmag/docs/tsm_36_2015_ro)

Î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 sub-set 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 dedicat, 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 dedicată 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 cópii 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 startApp() şi destroyApp(boolean unconditional):

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ă MIDlet. 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 MANIFEST.MF, 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 Hello.jar, 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 Hello.jad î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 emulator-ului pe care ni-l pune la dispoziţie SDK-ul. Presupunând că am adăugat în PATH calea %JAVA_ME_SDK%\bin şi că directorul curent este directorul build 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. EmbeddedDevice1 este un dispozitiv emulat, configurat automat în momentul în care instalăm SDK-ul. Cea de-a doua opţiune prezentă în comanda pe care am executat-o este -Xdescriptor, prin intermediul căreia 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 intr-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 QualcommIoEDevice. 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 dedicate 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.

Tuesday, January 20, 2015

Integrarea datelor între sisteme cu Talend Open Studio

(Publicat în revista Today Software Magazine, Numărul 25, Iulie 2014: http://www.todaysoftmag.ro/article/1038/integrarea-datelor-intre-sisteme-cu-talend-open-studio)

Aşa cum menţiona Jonathan Bowen în cartea sa, „Getting Started with Talend Open Studio for Data Integration”, de îndată ce a apărut cel de-al doilea calculator, integrarea sistemelor a devenit o parte esenţială a muncii echipelor IT.

Complexitatea sistemelor de astăzi, împreună cu ritmul alert în care afacerile evoluează, evidenţiază nevoia de a avea la îndemână un set de unelte care să ne permită executarea rapidă a sarcinilor de integrare. De asemenea, trebuie să fim în stare să reacţionăm cu promptitudine la oportunităţile de noi afaceri.

Experienţa ne-a arătat că, de cele mai multe ori, noii clienţi vin cu cerinţa de a integra în ecosistemul acestora produsul pe care noi îl oferim. Rareori un sistem informatic funcţionează izolat, în propriul său univers. În mai multe rânduri am observat că succesul proiectului propus unui client a depins de capacitatea noastră de a integra sistemul cu produsele pe care acesta deja le folosea.

Procesul despre care vorbim poate însemna sincronizarea a două baze de date o singură dată sau recurent, consumarea unor servicii – fie ele servicii web sau de altă natură – generarea şi transferul de fişiere în diferite formate etc. Aşadar, observăm că avem de-a face cu o varietate de modalităţi prin care putem duce la îndeplinire aceste sarcini, acest lucru contribuind la creşterea complexităţii problemei. De asemenea, uneori este la latitudinea noastră să decidem modalitatea prin care vom realiza integrarea însă, de multe ori, clientul are cerinţe specifice şi în legătură cu acest aspect.

Atunci când ne confruntăm cu o astfel de situaţie, putem fie să construim manual interfaţa între sisteme, ca o soluţie custom, fie să utilizăm un tool specializat pe rezolvarea problemelor de integrare. Un astfel de tool este Talend Open Studio, care vine cu o ofertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastre de integrare.

Un overview al mediului Talend Open Studio

Talend Open Studio for Data Integration este un mediu de dezvoltare grafic care, după cum spune şi numele acestuia, este specializat în integrarea datelor între sisteme. La baza sistemului open source stă mediul Eclipse. Alături de crearea soluţiilor de integrare, Talend Open Studio cuprinde şi mecanismele necesare livrării acestora – job-urile pot fi rulate atât din interiorul mediului, cât şi ca script-uri de sine stătătoare.

Pentru modelarea proceselor, sistemul utilizează conectori. Dezvoltatorii produsului ne oferă peste 800 de astfel de conectori, care ne dau posibilitatea să conectăm cu uşurinţă baze de date, să citim informaţii din diverse surse, să transferăm fişiere şi să efectuăm operaţii asupra lor. De asemenea, avem posibilitatea de a conecta componente specializate pentru a defini procese complexe de integrare.

O bună parte din munca pe care o îndeplinim cu ajutorul Talend Open Studio este reprezentată de modelarea grafică a proceselor pe care dorim să le definim. În tot acest timp, platforma îşi face treaba de zidar în background, generând cod Java. În fond, fiecare componentă pe care o utilizăm are asociat un comportament, descris prin intermediul codului Java.

Având în vedere faptul că acesta este un tool grafic, produsul poate fi utilizat atât de programatori, cât şi de persoane care nu au cunoştinţe de programare. Totuşi, pentru a putea defini anumite comportamente complexe, este nevoie să scriem din când în când cod Java, lucru care ne determină să concluzionăm că utilizatorii care nu cunosc programare se confruntă cu anumite limitări.

Talend Open Studio este relativ uşor de folosit, este o modalitate rapidă de a modela scenarii de integrare, de cele mai multe ori reducând timpul de implementare de la săptămâni sau luni, la zile sau chiar ore, în funcţie de complexitatea proiectului. Totuşi, trebuie să avertizăm cititorii că, asemeni multor altor domenii, dacă din cauza excesului de zel sau a unui design nepotrivit facem overengineering, riscăm să obţinem o soluţie complexă, greu de înţeles pentru alţi utilizatori sau chiar ineficientă. Există şi aici necesitatea respectării unor bune practici, care să asigure calitatea soluţiei noastre.

Printre alte beneficii ale utilizării Talend Open Studio, trebuie să remarcăm că acesta este un produs open source, care permite utilizatorilor să extindă platforma după nevoie. De asemenea, utilizându-l creşte productivitatea, deoarece dezvoltatorii se pot concentra mai mult la definirea procesului decât la implementarea tehnică a acestuia. Ne sunt puse la dispoziţie o mulţime de componente, potrivite situaţiilor mai mult sau mai puţin obişnuite, cu care putem opera pentru a ne defini procesele. În plus, comunitatea utilizatorilor Talend este activă şi gata să ofere sfaturi tehnice.

Scenarii de utilizare

După cum am menționat în secțiunea anterioară, cele mai obișnuite scenarii de utilizare a proiectului Talend Open Studio sunt următoarele:

Transfer între baze de date: Atunci când sunt create sisteme noi sau cele existente sunt actualizate, este nevoie ca datele să fie migrate într-o nouă bază de date. Aceasta poate să aibă aceeași schemă sau una diferită, iar Talend Open Studio ne oferă conectorii și acțiunile necesare acestui proces.

Schimb de fișiere: Sarcinile de integrare pot necesita transferuri de date în cantități mari. Acest lucru se realizează adesea prin intermediul fișierelor. Un exemplu de astfel de fișier este clasicul CSV (comma separated values). De asemenea, este posibil ca sistemul care primește fișierul de transfer să aibă nevoie de date într-un alt format. Și acest caz este acoperit de către Studio, fiindcă ne dă posibilitatea să definim procese care efectuează transformări asupra datelor transferate. În plus, avem la dispoziție capabilități de management al fișierelor, prin operații cum ar fi transferul prin FTP sau arhivarea.

Sincronizare: Sistemele care colaborează nu sunt conectate întotdeauna la același data repository, ceea ce înseamnă că anumite informații pot fi duplicate într-un ecosistem. În consecință, avem nevoie să ne asigurăm că acestea sunt sincronizate periodic. Acesta este cazul datelor despre clienții unei companii, care pot fi prezente, spre exemplu, în sistemul de finanțe, cel de distribuție sau în platforma CRM. Talend Open Studio poate fi folosit pentru a realiza sincronizarea sistemelor, cu ajutorul unor job-uri care automatizează procesul.

ETL: Acesta este un acronim pentru Extract, Transform, Load, termeni care descriu un proces de bază pentru sistemele data warehouse. Un astfel de proces extrage date din sisteme operaționale, le transformă aplicând reguli sau funcții, iar apoi le încarcă în data warehouse. Din nou, Talend Open Studio ne face viaţa mai uşoară, ajutându-ne substanţial la implementarea acestui tip de proces.

Exemplu

Pentru a ilustra uşurinţa utilizării acestei platforme, creăm un proiect cu un job care transformă un fişier XML într-un fişier CSV. Modelul grafic pentru acest job simplu este ilustrat în figura de mai jos.


În partea stângă avem o componentă de tip tFileInputXML, iar în partea dreaptă o componentă de tip tFileOutputDelimited. Acestea sunt conectate printr-un conector Main. Înainte de a trage componenta de intrare în designer am definit un obiect metadata, căruia i-am asociat un fișier XML. Studio-ul a detectat automat schema documentului și ne-a dat posibilitatea să selectăm ce noduri să fie transferate către output. Prin intermediul conectorului Main, Talend a transferat către fișierul de ieșire exact structura pe care am definit-o, fără ca noi să scriem vreo linie de cod. Tot ce a trebuit să configurăm în componenta de ieșire a fost calea și numele fișierului CSV.
Bineînțeles, putem extinde acest job, conectând în continuare alte componente, cum ar fi cele care lucrează cu conexiuni FTP, pentru a transfera fișierul nostru către sistemul țintă.

Concluzii


În secțiunile anterioare am văzut pe scurt care este contextul în care sunt realizate procesele de integrare, ce este Talend Open Studio și care sunt beneficiile utilizării acestui produs. De asemenea, printr-un mic exemplu am încercat să ilustrăm simplitatea utilizării Studio-ului, rapiditatea implementării job-urilor și să ne facem o părere despre capacitatea acestei platforme.

Internet of Things în universul Java

(Publicat în revista Today Software Magazine, Numărul 31, Ianuarie 2015: http://www.todaysoftmag.ro/article/1244/internet-of-things-in-universul-java)

Experții din domeniul IT au numit 2014 "anul Internet of Things ", acesta fiind unul dintre cele mai fierbinți subiecte ale anului care tocmai s-a încheiat. Titlul atribuit nu este deloc surprinzător dacă luăm în considerare faptul că site-uri importante precum dzone.comjaxenter.com sau oracle.com au publicat câteva articole pe săptămână despre tehnologiile din sfera Internet of Things, iar blogger-ii nu au scăpat nicio ocazie să posteze despre ultimele lor proiecte IoT. Nici editurile nu au fost mai prejos, în 2014 fiind publicate zeci de titluri, multe altele așteptând să vadă lumina tiparului anul acesta.
Toate acestea s-au întâmplat în contextul lansării unei multitudini de noi gadgeturi sau dispozitive inteligente, dar și a numeroase platforme software sau implementări ale unor protocoale mai mult sau mai puțin cunoscute. Mulți împătimiți ai tehnologiei au auzit de produse populare, lansate în ultimii ani, precum Philips Hue sau Nest, însă începând cu 2014 e nevoie de un efort activ să putem ține pasul cu frecvența apariției de noi dispozitive, cum ar fi Sen.se Mother, Fitbit Charge sau SkyBell. IoT influențează din ce în ce mai mult domeniile din viața de zi cu zi, precum sănătatea cu dispozitive care monitorizează pacienții, îngrijire la domiciliu, prin gadgeturi pentru un stil de viață sănătos, transporturi, cu autovehicule conectate, automatizarea locuințelor, industrie etc. .
Înainte de a discuta despre modalitățile prin care comunitatea Java își poate face auzită vocea în sfera Internet of Things, suntem datori să descriem pe scurt ce înseamnă mai exact IoT.

Definiții

Internet of Things sau, pe scurt, IoT este un concept dezbătut din ce în ce mai mult în ultimii ani, dar semnificația sintagmei nu este întotdeauna pe deplin înțeleasă. CASAGRAS (Coordination and support action for global RFID-related activities and standardisation) ne dă o definiție destul de abstractă, care spune despre IoT următoarele: este "o infrastructură de rețea globală, care conectează obiectele fizice și virtuale prin intermediul exploatării capturii de date și a capacității de comunicare. Această infrastructură include dezvoltările existente și viitoare ale rețelelor și ale Internet-ului. Aceasta va pune la dispoziție modalități de identificare a obiectelor, senzori și capacitatea de conectare ca bază pentru dezvoltarea de servicii sau aplicații independente și cooperante. Acestea vor fi caracterizate printr-un grad înalt de autonomie pentru captura de date, transferul evenimentelor, conectivitatea în rețea și interoperabilitate" [1].
Definiția oferită de Stephen Haller de la SAP Research ne ajută să ne creăm o imagine mai concretă asupra Internet of Things, despre care spune că este "o lume unde obiectele fizice sunt integrate omogen în rețeaua informațională și unde aceste obiecte fizice pot deveni participanți activi în procesele business. Serviciile sunt gata să interacționeze cu aceste obiecte inteligente prin intermediul Internet-ului, să interogheze și să-și schimbe starea și orice informație asociată cu ele, luând în considerare securitatea și chestiunile ce țin de intimitate"[2].
O altă explicație este dată de Oracle, care afirmă că "Internet of Things se referă la colectarea și gestionarea cantităților masive de date provenite de la rețelele - aflate într-o rapidă expansiune - de dispozitive și senzori, procesarea acestor date și apoi partajarea lor cu alte obiecte conectate"[3]. Pentru a ne da seama care este ordinul de mărime al acestor cantități de date, ne putem uita la exemplul echipei de navigație Oracle Team USA, care lucrează cu ambarcațiuni echipate fiecare cu câte 300 de senzori, meniți să furnizeze informații despre o mulțime de parametri, cum ar fi eficacitatea reglajelor pânzelor, tăria și stabilitatea carenei sau tensiunea din catarg. Acești senzori măsoară 3000 de variabile de 10 ori pe secundă, producând 500 GB de date neprelucrate pe zi. Un alt aspect interesant este faptul că în prezent doar 11% din volumul total de date este generat de dispozitive, dar IDC estimează că până în 2020 procentul va crește la 40%[4].
Acest titlu descriptiv, care încearcă să surprindă esența următorului mare trend în IT, reprezintă în principiu efortul de a regândi relația noastră cu obiectele pe care le folosim în fiecare zi, dar și a obiectelor între ele. Conform experților, IT-ul se va îndrepta puternic în această direcție. Ca dovadă, mai multe nume sonore ale tehnologiei secolului al XXI-lea, precum Cisco sau Bosch, au întreprins studii pe această temă, ajungând la concluzia că proiectele din sfera IoT vor depăși valoarea economică de 15 trilioane de dolari, până în 2020[5]. De asemenea, analiștii de la Cisco afirmă că în 2010 existau peste 12.5 miliarde de obiecte conectate la Internet și estimează că vor exista aproximativ 25 miliarde de "lucruri" inteligente, conectate la Internet, până la finalul anului 2015. Pentru anul 2020, previziunea lor este de 50 de miliarde de "lucruri"[6].

Oracle și Java Embedded

În acest context intră în scenă Java, atât ca platformă ce are la bază Java Virtual Machine, cât și ca limbaj de programare, cu o comunitate de peste 9 milioane de utilizatori. Facem această distincție între platformă și limbaj[7] întrucât un dispozitiv care rulează JVM nu este limitat la execuția de aplicații Java; acestea pot fi, în anumite condiții, aplicații scrise cu ajutorul Scala, Clojure etc. . În trecut, programarea dispozitivelor embedded se făcea preponderent în limbaje de nivel scăzut, precum C sau limbaj de asamblare.
În acest articol vom încerca să ne facem o părere despre soluțiile propuse de Oracle pentru IoT, companie a cărei implementare a platformei Java se bucură de cea mai mare popularitate printre programatori. Totuși, în articolele viitoare vom privi mai îndeaproape și caracteristicile altor proiecte Java pentru IoT, cum ar fi cele din stiva dezvoltată de Eclipse Foundation.
În ultimii ani, Oracle a investit masiv într-o linie de produse denumite sugestiv Java Embedded, lucru ce oferă posibilitatea programatorilor Java să scrie aplicații pentru astfel de dispozitive, de la smart card-uri și module wireless, până la single board computer-e (SBC), cum ar fi Raspberry PI. Platformele Java Embedded sunt principalul lucru pe care Oracle îl oferă dezvoltatorilor embedded și prin intermediul căruia contribuie la influența pe care o are Java în sfera Internet of Things.
Viziunea Oracle pentru Java 8 a fost să lanseze, pe lângă Standard Edition (SE), încă două variante importante ale platformei, mai exact Oracle Java ME Embedded 8 și Oracle Java SE Embedded 8, la care se adaugă Java Embedded Suite. Henrik Ståhl, vicepreședinte peste product management pentru Java și IoT la Oracle, afirmă în ediția noiembrie/decembrie 2014 a revistei Oracle Java Magazine că, prin lansarea acestor variante ale platformei au "făcut disponibile pe platforme embedded, care au doar câteva sute de KB de memorie, feature-urile cu care programatorii sunt obișnuiți în Java SE"[8].


Fig. 1 Privire de ansamblu asupra platformei Oracle Java ME Embedded 8[9]

Prin lansarea noii versiuni a distribuțiilor amintite mai sus, Oracle a încercat să le aducă la un grad cât mai înalt de compatibilitate una cu cealaltă și, în același timp, să le alinieze la Java SE 8. Pentru aceasta, s-a introdus conceptul de Compact Profiles, dezvoltatorii putând alege între setul complet de API-uri Java SE și alte trei subseturi care au la dispoziție doar acele API-uri care sunt necesare pentru use case-urile relevante. Un astfel de use case poate fi rularea unei stive OSGi (Open Service Gateway initiative). Așa cum vom vedea într-un articol viitor, OSGi joacă un rol important în cadrul eforturilor făcute de Eclipse Foundation pentru implementarea unei stive complete IoT, numită Open IoT Stack for Java.
Începând cu Java 8, versiune lansată în prima parte a anului 2014, am văzut că Oracle face eforturi considerabile pentru a aduce la zi varianta Micro Edition (ME) a platformei, lucru ce confirmă implicarea corporației în războiul soluțiilor IoT. Printre îmbunătățirile aduse platformei se numără eficientizarea procesului dedeployment pe dispozitive de dimensiuni mici, cum ar fi senzorii inteligenți saugateway-urile embedded. De asemenea, API-urile au fost actualizate pentru a răspunde nevoilor de programare a dispozitivelor țintă. Prin această nouă versiune Java ME, platforma are mult mai multe lucruri în comun cu Java SE, însă funcționalități precum reflection sau expresiile lambda urmează să fie adăugate. Acest aspect este important, întrucât în felul acesta, orice programator Java se va putea implica în proiecte embedded într-un timp scurt, fără a face eforturi considerabile. În 2015, Henrik Ståhl anunță că unii producători de hardwareplănuiesc să integreze Java ME în dispozitivele lor, ceea ce va conduce la o mai mare rată de adopție a platformei.
Componentele construite cu soluțiile embedded despre care discutăm, livrate într-un context IoT, dau acces aplicațiilor business la resursele instalate în mediul înconjurător, atât pentru a primi input de la acestea cât și pentru a lansa comenzi. Un astfel de use case este orchestrarea sistemelor eterogene de control a temperaturii și a iluminării într-o clădire. Observăm că abilitatea Java ME de a controla echipamente cum ar fi senzori, valve sau servo-motoare, reprezintă unul dintre aspectele fundamentale ale obținerii unei infrastructuri IoT.
Privind lucrurile de la o oarecare distanță, putem observa că arhitectura Java ne permite să creăm aplicații pe verticală, după cum a arătat și Maulin Patel, liderul în soluții de procesare embedded de la Freescale[8]. Întâi colectăm datele de la obiectele inteligente cu Java ME, apoi trecem la Java SE pentru servicii de gateway, iar în final executăm gestiunea și procesarea datelor cu Java EE, în cloud.
Aproape de fiecare dată când se vorbește despre IoT, se aduce în discuție problema securității. Într-un mediu eterogen și deschis precum este o infrastructură Internet of Things, securitatea este esențială, dar greu de obținut. Este de ajuns ca un atacator să aibă acces la una dintre componentele soluției IoT pentru a fi capabil să exploateze posibilele breșe în sistemul defensiv al acesteia. Spre exemplu, în cazul contoarelor inteligente de utilități, cel mai interesat de compromiterea acestor unități poate fi chiar proprietarul locuinței în care au fost instalate. Astfel, potențialul atacator are chiar și acces fizic la echipament, lucru ce ridică întrebări cu privire la nivelele la care trebuie implementate mecanisme de securitate. Acum că am remarcat seriozitatea acestei chestiuni, putem veni cu o veste bună pentru dezvoltatorii IoT din universul Java, întrucât această platformă asigură securitatea datelor pe întreaga verticalitate a sistemului implementat. Securitatea este o caracteristică înglobată în arhitectura platformei, fiind dezvoltată și actualizată constant, cu fiecare nouă versiune. Vom reveni cu detalii referitoare la securitatea oferită de Java ME 8 într-unul dintre paragrafele următoare, când vom discuta câteva caracteristici tehnice ale platformei.

Java ME Embedded 8

Platforma dedicată dispozitivelor cu cele mai puține resurse, cum ar fi cardurile, se numește sugestiv, Java Card. Totuși, primul produs din familia Oracle care aduce cu adevărat o contribuție importantă în spațiul IoT este Java ME Embedded 8. Prin urmare, în continuare ne vom concentra atenția asupra acestuia. Înainte de a ne uita la câteva detalii, trebuie să menționăm Java ME Embedded constă din două versiuni: Java ME Embedded și Java ME Embedded Client.
Java ME Embedded 8 este o platformă ce poate fi folosită de către dispozitive care au mai puțin de 1 MB de memorie. Astfel, este potrivită pentru "obiecte inteligente" fără interfață grafică, care au timp îndelungat de funcționare și resurse limitate.
Așa cum putem vedea în Figura 1, la baza Java ME Embedded 8 stă mașina virtuală, pe care o găsim sub denumirea Connected Limited Device Configuration sau, pe scurt, CLDC 8. Această componentă reprezintă un sub-set al Java SE 8, dedicat dispozitivelor embedded. După cum am menționat mai sus, o dată cu versiunea 8, CLDC reprezintă un prim pas spre o mai bună aliniere cu Java Standard Edition și totodată un important salt de la CLDC 1.1.1. Așadar, avem la dispoziție adnotații,generics și multe alte caracteristici Java, familiare tuturor dezvoltatorilor. Deși s-a realizat o evoluție foarte importantă prin lansarea CLDC 8, s-a reușit menținerea compatibilității binarelor cu versiunea anterioară.
Deasupra fundației pe care o reprezintă CLDC 8 stau mai multe componente definitorii pentru platformă. Una dintre ele este Generic Connection Framework 8(GCF 8). Așa cum se poate intui, această componentă gestionează problemele de conectivitate. Acest framework este necesar întrucât în spațiul embeddedposibilitățile de conectare sunt multiple, iar dispozitivele pe care rulează aplicația noastră au interfețe variate de comunicare cu lumea exterioară. Unele pot avea capacitate de conectare prin Wi-Fi, altele de tip cellular, Bluetooth sau prin cablu. De asemenea, pentru un control optimizat al conectivității GCF 8 expune AccessPoint API. Totodată, GCF 8 vine cu suport pentru IPv6, scăpând dezvoltatorii Java ME Embedded 8 de emoțiile epuizării adreselor IPv4.
Revenind la subiectul securității în lumea Internet of Things, putem da câteva detalii despre modul în care GCF 8 rezolvă această problemă. Java ME Embedded 8 vine echipat cu implementări ale celor mai noi standarde în materie de securitate, printre care se numără Transport Layer Security 1.2 și Datagram Transport Layer Security 1.2. Astfel, Oracle îi asigură pe utilizatorii platformei de faptul că aceasta oferă "cele mai înalte nivele de criptare la nivel de rețea și autentificare" [9].
Un alt bloc constructiv al Java ME 8 este Micro Edition Embedded Profile 8 (MEEP 8). Această componentă este responsabilă cu definirea modelului, a containerului în care rulează aplicația, în general cu ciclul de viață al acesteia. Prin intermediul MEEP 8 putem partaja cod între aplicații, putem actualiza componente în sistem sau aplica patch-uri aplicației. Partajarea bibliotecilor - denumite sugestiv, LIBlets - se face tot prin intermediul MEEP 8, contribuind la minimizarea necesarului de memorie și la modularizarea aplicațiilor. În plus, MEEP 8 oferă aplicațiilor posibilitatea de a comunica între ele atât sincron (Inter-MIDlet Communication sau IMC), cât și asincron, printr-un sistem de mesagerie bazat pe evenimente.
Securitatea este un subiect important și pentru MEEP 8, deoarece se pot defini politici de securitate pentru autentificare și autorizare, în funcție de situația specifică. Astfel, încărcarea codului și execuția lui se realizează într-un mediu securizat, întrucât fiecare componentă este asociată unui client, având permisiuni specifice. Acestea trebuie verificate la fiecare încercare de acces.
O componentă de o importanță crucială pentru Java ME Embedded 8 este Device Access API, care oferă aplicațiilor acces la dispozitive periferice, cum ar fi senzori, comutatoare sau LED-uri. Această componentă exista și în versiunile anterioare, însă acum vine cu funcționalități noi, printre care late binding, care permite adăugarea de noi periferice, fără a fi necesară modificarea API-ului.
Alături de aceste blocuri constructive, Java ME Embedded 8 vine cu o multitudine de API-uri, precum cel pentru servicii web sau localizare.
Având toate aceste componente Java ME Embedded la dispoziție, este la îndemâna noastră, a dezvoltatorilor, să construim aplicații embedded, contribuind la spațiulInternet of Things.
În ajutorul nostru vine Java ME SDK 8, un toolkit complet creat pentru a întâmpina orice nevoie avem în procesul creării și întreținerii unei aplicații. Acest SDK oferă inclusiv un mediu de emulare, având posibilitatea să ne testăm aplicațiile chiar dacă dispozitivele pe care vor fi distribuite nu sunt disponibile în timpul dezvoltării. De asemenea, putem face debugging atât în modul de emulare, cât și atunci când aplicația rulează pe dispozitiv. Pentru a întregi acest set de unelte, Oracle oferă plugin-uri pentru Netbeans IDE și Eclipse IDE, care încorporează toate funcționalitățile SDK-ului. Vom discuta mai multe detalii și vom exemplifica modul de utilizare al Java ME SDK 8 într-unul dintre articolele viitoare.
Java ME Embedded Client este o implementare CDC (Connected Device Configuration) care, în principiu, este configurația destinată dispozitivelor mobile cu ceva mai multe resurse, cum ar fi smartphone-urile. Pentru Java ME Embedded Client, această configurație a fost restrânsă și optimizată, pentru a se potrivi sistemelor embedded de categorie joasă înspre medie. Deși amprenta acestei configurații este redusă, oferă mare parte din limbajul Java. Astfel, Java ME Embedded Client este destinată obiectelor inteligente cu mai puțin de 10 MB de memorie și fără interfață grafică.

Concluzii

Industria IT autohtonă nu este străină de spațiul Internet of Things, începând să fie lansate produse Made in Romania, precum Pocketo sau Tintag. De asemenea, există companii în România, implicate în proiecte care se integrează în paradigma IoT. De exemplu, regăsim astfel de proiecte la Brașov în domeniul automotive, cu al său concept de connected car . Un alt lucru îmbucurător este faptul că au început să se organizeze evenimente despre IoT, unul dintre acestea fiind ALT Festival, care a avut loc în noiembrie 2014, la Brașov.
Un obiectiv important pentru Oracle în ultima perioadă este afirmarea platformei Java în lupta care se dă între soluțiile IoT. Mai mult decât atât, corporația și-a exprimat dorința de a câștiga această bătălie, astfel încât Java să devină alegerea majorității specialiștilor implicați în astfel de proiecte. Totuși, răspunsul a venit rapid din partea oponenților, existând multe voci care și-au exprimat scepticismul cu privire la potrivirea platformei în sfera IoT. Există multe argumente, atât pro, cât și contra acestei idei, însă un lucru e cert: Java a străbătut un drum lung pentru a ajunge la gradul actual de maturitate, diversitate și aplicabilitate. Eforturile din ultimii ani au dat naștere unei noi familii de produse, care se dovedesc promițătoare și, mai mult, încep să-și dovedească valoarea în cadrul proiectelor reale IoT. Vom vedea clar acest lucru în articolul viitor, când vom atinge, prin exemple concrete, partea practică a platformei Java ME Embedded 8.

Resurse

[1] CASAGRAS, RFID and the Inclusive Model for the Internet of Things
[2] Stephen Haller, Internet of Things: An Integral Part of the Future Internet, SAP Research, 2009
[3] "The Internet of Things: Manage the Complexity, Seize the Opportunity", Oracle Corporation, 2014
[4] IDC Digital Universe Study, sponsored by EMC, December 2012
[5] Dzone Research, 2014 Guide to Internet of Things
[7] Benjamin Evans, Martijn Verburg, The Well-Grounded Java Developer, Manning, 2013
[8] "Java Development for the Internet of Things", Oracle Java Magazine, November/December 2014 Issue