Limbajul de Programare Java

Capitolul 1 – Prezentare tehnologii folosite

1.1 – Limbajul de programare JAVA

Java este un limbaj de programare de nivel înalt, orientat obiect, proiectat inițial in scopul realizării de aplicații pentru internet și mai cu seamă pentru web.

Începutul limbajului Java este în toamna anului 1991, când firma Sun Microsystems a finanțat un proiect cu numele Green condus de James Gosling. Scopul echipei Green era să plaseze firma Sun Microsystems pe piața produselor electronice comerciale. Inginerii și dezvoltatorii de software de la Sun au căutat microprocesoare care să ruleze pe o multitudine de masini, în particular pe sisteme distribuite care lucrează in timp real. Cheia succesului firmei Sun a fost abilitatea lucrului pe platforme multiple. Dupa patru ani de lucru, echipa Green finalizează specificațiile limbajului Java. Apoi, compania Sun Microsystems vinde licența firmelor IBM, Microsoft, Silicon Graphics, Adobe și Netscape. Acum, Java e disponibil sub licentă open source.

Programele Java pot rula pe diferite tipuri de platforme, cu condiția ca pe aceste platforme să fie instalată o mașină virtuală Java deasupra platformei respective.

Spre deosebire de alte limbaje de calculator a căror influenta s-a diminuat cu trecerea timpului, influenta limbajului Java a devenit mai puternica. Java a ajuns în prim planul programării pe Internet încă de la lansare. Si-a consolidat aceasta poziție cu fiecare versiune ulterioara. Astăzi, este prima si cea mai buna alegere pentru a dezvolta aplicații web-based. De asemenea, Java face parte din revoluția telefoanelor inteligente deoarece este folosit la programarea pe Android. Simplu spus: marea parte a lumii moderne funcționează cu coduri Java. Atât de important este limbajul Java.

Caracteristicile limbajului Java sunt:

Limbaj compilat și interpretat. Un limbaj este compilat dacă un program scris în acel limbaj este tradus într-un cod pe care calculatorul îl poate "înțelege" (executa) mult mai ușor. Un limbaj este interpretat dacă instrucțiunile unui program scris în acel limbaj sunt procesate linie cu linie. Programele interpretate sunt mai lente decât cele compilate, însa cele compilate sunt, de obicei, dependente de platforma respectivă. Programele Java sunt mai întâi compilate în niște fișiere intermediare asemănătoare codului de asamblare (numit byte code, engl.), apoi acestea sunt interpretate de mediul de execuție Java în instrucțiuni-masină asociate platformei sistem.

Limbaj independent de platformă. La instalarea limbajului Java, se va crea o mașină virtuală Java care are drept scop traducerea instrucțiunilor unui byte code Java în instrucțiuni-mașină pentru platforma curentă. Astfel fișierele intermediare byte code pot fi copiate și executate pe orice platformă (indiferent dacă este Windows, Unix etc.). Bineînțeles ca nu trebuie să utilizăm elemente specifice unei platforme, cum ar fi delimitatorul utilizat în calea directoarelor: / pentru Unix, respectiv \ pentru Windows (se vor utiliza în schimb constantele File.separatorChar sau File.separator).

Limbaj orientat obiect. Cea mai importantă proprietate a limbajului Java este orientarea obiect, aceasta fiind privită ca o trăsătură implicită. Java pune in evidentă toate aspectele legate de programarea orientată obiect: obiecte, trimitere de parametri, încapsulare, clase, biblioteci, moștenire și modificatori de acces.

Limbaj concurent. Concurența (engl. multithreading) înseamnă capacitatea unui program de a executa mai multe secvențe de cod in același timp. O secvență de cod Java se numește fir de execuție (engl. thread). Datorită posibilității creării mai multor fire de execuție, un program Java poate să execute mai multe sarcini simultan, de exemplu, animația unei imagini, transmiterea unei melodii spre placa de sunet, comunicarea cu un server, alocarea și eliberarea memoriei etc.

Limbaj simplu. Spre deosebire de C++, care este cel mai popular limbaj orientat obiect, Java elimină câteva dintre trăsăturile acestuia: posibilitatea moștenirii multiple este exclusă, șirurile sunt încpsulate într-o structură clasă. Spre deosebire de C/C++, în Java nu există pointeri, iar alocarea și dealocarea memoriei se fac automat. Există un mecannism de eliberare a memoriei (engl. garbage collection) pus în practică de un fir de execuție de prioritate mică.

Limbaj distribuit Java este distribuit, deoarece permite utilizarea obiectelor locale și la distanță. Limbajul Java ofera posibilitatea dezvoltării de aplicații pentru internet, capabile să ruleze pe platforme distribuite și eterogene. În acest sens, Java respecta standardul IEEE (engl. Institute of Electrical and Electronics Engineers) pentru structurile de date, cum ar fi folosirea întregilor, a numerelor în virgulă flotantă și a șirurilor de caractere. Java se poate utiliza în aplicații de rețea, deoarece respectă protocoalele de rețea, cum ar fi FTP, HTTP, SOAP, etc.

Limbaj performant. Interpretorul Java este capabil să execute un byte code aproape la fel de repede ca pe un cod compilat. Având posibilitatea să lucreze cu fire de execuție multiple, Java justifica faptul că este un limbaj performant. De exemplu, un program Java poate aștepta citirea unor date, în timp ce un alt fir de execuție poate aloca sau elibera memoria necesară programului.

Limbaj dinamic și robust. Java întârzie alocarea obiectelor și legarea dinamică a claselor până la momentul execuției. Astfel, se vor evita erorile de alocare chiar dacă mediul s-a schimbat de la ultima compilare a programului. Faptul că Java este robust se justifică prin elimminarea utilizării pointerilor, care erau generatori de erori în cazul programelor C/C++. În schimb, Java verifică memoria dinamic înainte de a fi alocată și are un sistem automat de alocare/dealocare a memoriei.

Limbaj sigur. Programele Java nu pot accesa memoria heap, stake sau alte secțiuni protejate de memorie, deoarece Java nu folosește pointeri și aloca memorie doar la execuție. Înainte ca interpretorul Java să execute byte code-ul, se verifică daca este un cod Java valid prin cercetarea accesului la date, a conversiilor de date nepermise, a valorilor și parametrilor incorecți, a depășirii stivei.

Componentele esențiale ale platformei sunt compilatorul limbajului Java, bibliotecile și mediul de execuție (mașina virtuală).

Java Card se referă la o tehnologie care permite aplicațiilor bazate pe Java (applet-uri), de a fi
rulate în siguranță pe carduri inteligente și dispozitive similare. Java Card este cea mai mică componentă a platformei Java vizate pentru dispozitivele integrate. Java Card oferă utilizatorului posibilitatea de a programa micro dispozitive și a le crea aplicații specifice. Acesta este utilizat pe scară largă în cartele SIM (utilizate în telefoanele mobile GSM) și carduri de ATM-uri. Principalele obiective de proiectare ale tehnologiei Java Card sunt portabilitatea și securitatea.
Java ME (Micro Edition) reprezintă este o platformă Java proiectată pentru sisteme integrate
(dispozitivele mobile). Dispozitivele țintă variază de la controalele industriale la telefoane mobile și set-top boxuri. Java ME a fost cunoscut anterior ca platforma Java 2, Micro Edition (J2ME). Java ME a fost conceput de Sun Microsystems, achiziționată de Oracle Corporation în 2010, ce a înlocuit o platforma de tehnologie similară cunoscută sub numele de PersonalJava.
Aceasta a fost inițial dezvoltată de Java Community Process ca JSR 68, de diferite platarome
Java ME care au evoluat în JSRs separate.

Există mai mult de 2,1 miliarde de activări Java ME pe telefoane mobile și PDA-uri. Deși nu este folosit pe unele dintre cele mai noi platforme mobile de azi (de exemplu, iPhone, Windows Phone, BlackBerry 10, Android), aceasta continuă să fie foarte populară pe dispozitive ieftine
(<200 dolari), cum ar fi Nokia Seria 40. De asemenea, este utilizat pe noul sistem de operare Bada și pe sistemul de operare Symbian, împreună cu software-ul nativ. Exista implementari pentru Windows CE, Windows Mobile, Maemo, MeeGo si Android disponibil pentru descărcare separată.

Java SE (Standard Edition): este o platformă utilizată pe scară largă pentru dezvoltarea și implementarea de aplicații portabile pentru mediile tip desktop si server. Java SE folosestelimbajul de programare orientat-obiect Java și definește o gamă largă de API-uri de uz general, cum ar fi API-uri pentru clasa Java. Library care include și Java Virtual Machine Specification. Una dintre cele mai cunoscute implementari de Java SE este Java Development Kit (JDK).

Java EE (Enterprise Edition) este platforma de calcul enterprise a lui Oracle. Platforma oferă
un API și mediu de rulare pentru dezvoltarea și rularea de software enterprise, inclusiv servicii
de rețea și de Internet, precum și alte aplicații de rețea la scară largă, fiabile și sigure. Java EE
extinde Java Platform, Standard Edition (Java SE) și oferă un API pentru Object-relational
mapping ORM(software ce convertește datele intre tipuri de sisteme), arhitecturi multi-tier și
servicii web. Platforma include un design bazat în mare măsură pe componente modulare care
rulează pe un server de aplicații. Software-ul pentru Java EE este dezvoltat în primul rând în
limbajul de programare Java.

1.2 – Prezentare tehnologie JavaFX

JavaFX este o tehnologie pusă la dispoziție programatorilor Java pentru a implementa sisteme informatice ce implică interacțiune cu utilizatorul, având un comportament consistent pe mai multe platforme diferite. În cadrul JavaFX a fost dezvoltat un API extins pentru aplicații multimedia avansate și motoare grafice care facilitează proiectarea și dezvoltarea unor aplicații pentru organizații bazate pe date.

Fiind implementat peste limbajul de programare Java, acesta va fi ușor de utilizat, optimizând costurile legate de investiții și complexitatea sistemelor, întrucât atât componenta server (nivelul de logică a aplicației și de acces la date) cât și componenta client (nivelul de prezentare) vor fi dezvoltate utilizând același limbaj de programare.

Câteva dintre caracteristicile JavaFX 8 sunt următoarele:

integrare cu Java. JavaFX este o interfață de programare integrată în distribuția limbajului de programare Java, instalarea sa făcându-se împreună cu acesta; prin urmare, din JavaFX pot fi accesate toate API-urile Java cu funcționalitățile lor, acesta reprezentând o alternativă la celelalte limbaje de programare care folosesc Java Virtual Machine, precum JRuby sau Scala;

limbajul de adnotare FXML și utilitarul SceneBuilder. FXML este un limbaj declarativ de adnotare bazat pe XML prin intermediul căruia pot fi dezvoltate interfețe grafice cu utilizatorul, fără a fi necesar ca aplicația să fie recompilată de fiecare dată când sunt modificate elemente din cadrul acesteia. În acest mod se realizează o separare între nivelul de prezentare și nivelul de logică a aplicației. SceneBuilder permite construirea interfeței în mod vizual, generând automat și documentul FXML asociat, acesta putând fi integrat apoi în orice mediu de dezvoltare. Astfel, nu mai este necesară decât implementarea mecanismelor de tratare a evenimentelor corespunzătoare diferitelor controale (elemente din cadrul interfeței grafice);

componente WebView. Un modul ce folosește tehnologia WebKitHTML permite integrarea de pagini Internet în cadrul unei interfețe grafice. De asemenea, codul JavaScript ce rulează în WebView poate accesa orice API-uri Java, la fel cum API-urile Java pot executa cod JavaScript care rulează în WebView. Există suport și pentru anumite funcționalități HTML5 (Web Sockets, Web Workers, Web Fonts) sau capabilități de tipărire;

interoperabilitate cu tehnologia Swing. Aplicațiile Swing existente pot fi extinse cu funcționalități JavaFX, ca redarea de conținuturi grafice sau a unor pagini Internet integrate. Clasa SwingNode permite integrarea unui conținut dezvoltat folosind tehnologia Swing în cadrul aplicației JavaFX;

biblioteci de controale și foi de stil. JavaFX pune la dispoziția programatorilor majoritatea controalelor necesare pentru dezvoltarea unei interfețe cu utilizatorul complete (inclusiv DatePicker și TreeTableView), aspectul acestora putând fi particularizat folosind tehnologii web standard ca foile de stil (eng. CSS – cascading style sheets), prin intermediul claselor Styleable*;

tema Modena este folosită ca implicită pentru toate aplicațiile JavaFX (înlocuind tema Caspian, care poate fi utilizată prin apelul metodei setUserAgentStylesheet(STYLESHEET_CASPIAN) în metoda start() a clasei derivate din Application;

funcționalități de grafică 3D. Biblioteca de grafică 3D a fost îmbogățită prin:

-implementarea claselor:

javafx.scene.shape.Shape3D (cu subclasele Box, Cylinder, MeshView, Sphere)
javafx.scene.SubScene
javafx.scene.paint.Material
iavafx.scene.input.PickResult
javafx.scene.LightBase (cu subclasele AmbientLight și PointLight)
javafx.scene.SceneAntiAliasing

– îmbunătățirea API-ului Camera;

API-ul Canvas permite desenarea pe o suprafață dintr-o scenă JavaFX conținând un element grafic (de tip nod);

API-ul pentru tipărire este conținut în pachetul javafx.print, oferind posibilitatea configurării modului în care vor fi tipărite scenele dintr-o interfață grafică sau diferite documente;

suport pentru text stilizat. Controalele JavaFX pot reda informații de tip text în mai multe moduri: bidirecțional, multilinie, folosind mai multe stiluri grafice, incluzând seturi de caractere complexe;

suport pentru operații multi-touch. JavaFX poate procesa mai multe operații de tip atingere a ecranului concomitente în cazul dispozitivelor care suportă astfel de comenzi;

suport pentru dispozitive de afișare cu rezoluție mare (HiDPI – eng. High Dots per Inch);

grafică accelerată hardware la nivel de bandă de asamblare. JavaFX dispune de un motor pentru redarea conținutului grafic denumit Prism care oferă performanțe deosebite atunci când este utilizat împreună cu anumite plăci grafice sau unități de procesare grafică (eng. GPU – Graphic Processing Unit). În cazul în care un sistem nu dispune de una dintre dispozitivele recomandate pentru a rula împreună cu JavaFX, Prism va folosi în mod implicit stiva de aplicații Java2D;

motor multimedia performant, pentru redarea de conținut multimedia folosind tehnologia GStreamer, caracterizată prin latență scăzută și stabilitate;

model de dezvoltare al aplicațiilor autonome. Există pachete de aplicații independente care dispun de toate resursele necesare precum și de copii ale mediilor de rulare Java și JavaFX distribuite ca pachete native ce pot fi instalate oferind utilizatorilor aceeași experiență ca și celelalte aplicații native sistemului de operare respectiv.

JavaFX este folosit pentru aplicații care folosesc rețeaua de calculatoare, fiind capabile să ruleze pe mai multe tipuri de platforme, în care informațiile pot fi vizualizate folosind o interfață cu utilizatorul performantă care folosește capabilități audio și video (inclusiv tehnici de grafică avansată și animații).

Aplicațiile JavaFX pot fi rulate:

direct pe o anumită mașină, unde se află “instalată” (accesând fișierul .jar care conține programul în sine) – o astfel de opțiune este preferată în cazul în care aplicația nu are nevoie de acces Internet sau mașina pe care rulează nu dispune de o astfel de conexiune;

prin intermediul unui navigator (eng. browser), fiind integrată în cadrul unei pagini Internet, interacțiunea cu elementele paginii Internet putând fi realizată prin intermediul limbajului JavaScript;

prin descărcare de la o anumită locație (dacă aplicația JavaFX este găzduită pe un server web), rulând apoi pe mașina respectivă (modul WebStart);

ca program autonom, folosind copii private ale mediilor de rulare Java și JavaFX.

Arhitectura JavaFX

Platforma JavaFX dispune de o arhitectură bazată pe o stivă de componente (transparentă pentru programator), constituind motorul ce rulează codul propriu-zis (Quantum Toolkit). Acesta cuprinde un motor grafic performant (Prism), un eficient sistem de ferestre, de dimensiuni mici (Glass), un motor pentru redarea conținutului multimedia și un motor pentru integrarea conținutului Internet.

Setul de API-uri Java pentru funcționalități JavaFX

Platforma JavaFX permite accesul la setul de API-uri Java pentru a dezvolta aplicații ce implică interacțiunea cu utilizatorul într-un mod flexibil, exploatând capabilități ale acestui limbaj de programare de nivel înalt, precum:

utilizarea unor funcționalități Java, cum ar fi: clase generice, adnotări, lucrul cu mai multe fire de execuție, expresii Lambda;

accesul la JavaFX pentru dezvoltatorii de aplicații Internet din cadrul altor limbaje dinamice bazate pe mașina virtuală Java (Groovy, JavaScript);

accesul la alte limbaje dinamice bazate pe mașina virtuală Java pentru implementarea de aplicații JavaFX complexe;

folosirea unei biblioteci de asocieri ce include suport pentru rezolvarea leneșă a referințelor, legarea expresiilor și secvențelor de expresii, reevaluarea parțială a asocierilor (aceasta putând fi utilizată și din alte limbaje dinamice bazate pe mașina virtuală Java, printr-o sintaxă similară);

extinderea bibliotecilor de colecții Java cu liste sau asocieri observabile, care permit aplicațiilor să realizeze conexiuni între interfețe și modelele de date, permițând actualizarea interfeței grafice conform cu modificările detectate în cadrul modelelor de date.

API-urile JavaFX au fost portate direct în Java, bazându-se mai mult pe standarde Internet, cum ar fi CSS pentru stilizarea controalelor sau ARIA pentru specificări referitoare la accesibilitate.

Graful de Scene

Implementarea unei aplicații JavaFX implică proiectarea și dezvoltarea unui graf de scene (eng. Scene Graph), structură ierarhică de noduri ce conține elementele vizuale ale interfeței grafice cu utilizatorul, care poate trata diferite evenimente legate de acestea și care poate fi redată.

Un element din graful de scene (= un nod) este identificat în mod unic, fiind caracterizat printr-o clasă de stil și un volum care îl delimitează. Fiecare nod are un părinte (cu excepția nodului rădăcină), putând avea nici unul, unul sau mai mulți copii. De asemenea, pentru un astfel de element pot fi definite efecte (estompări sau umbre), opacitate, transformări, mecanisme de tratare a diferitelor evenimente (care vizează interacțiunea cu utilizatorul) precum și starea aplicației.

Spre diferență de Swing sau AWT (Abstract Window Toolkit), JavaFX conține pe lângă mecanisme de dispunere a conținutului, controale, imagini sau obiecte multimedia și primitive pentru elemente grafice (ca fi texte sau figuri geometice cu care se pot crea animații, folosind metodele puse la dispoziție de API-urile javafx.animation).

API-ul javafx.scene permite construirea următoarelor conținuturi:

noduri: forme 2D și 3D, imagini, conținut multimedia și conținut Internet, text, controale pentru interacțiunea cu utilizatorul, grafice, containere;

stări: transformări (poziționări și orientări ale nodurilor), efecte vizuale;

efecte: obiecte care modifică aspectul nodurilor (mecanisme de estompare, umbre, reglarea culorilor).

Mecanisme de Dispunere a Conținutului

Controalele din graful de scene pot fi grupate în containere sau panouri în mod flexibil, folosind mai multe mecanisme de dispunere a conținutului (eng. layout).

API-ul JavaFX definește mai multe clase de tip container pentru dispunerea elementelor, în pachetul javafx.scene.layout:

BorderPane dispune nodurile conținute în regiunile de sus, jos, dreapta, stânga sau centru;

HBox își aranjează conținutul orizontal pe un singur rând;

VBox își aranjează conținutul vertical pe o singură coloană;

StackPane utilizează o stivă de noduri afișând elementele unele peste altele, din spate către față;

GridPane permite utilizatorului să își definească un tabel (format din rânduri și coloane) în care să poată fi încadrate elementele conținute;

FlowPane dispune elementele fie orizontal, fie vertical, în funcție de limitele specificate de programator (lungime pentru dispunere orizontală, respectiv înălțime pentru dispunere verticală);

TilePane plasează nodurile conținute în celule de dimensiuni uniforme;

AnchorPane oferă programatorilor posibilitatea de a defini noduri ancoră (referință) în funcție de colțurile de jos / sus, din stânga / dreapta sau raportat la centrul containerului sau panoului.

Diferitele moduri de dispunere pot fi imbricate în cadrul unei aplicații JavaFX pentru a se obține funcționalitatea dorită.

Tipuri de Controale Grafice

Controalele pentru interfața cu utilizatorul disponibile prin API-ul JavaFX sunt implementate ca noduri din graful de scene. Ele pot fi particularizate folosind foile de stil.

Biblioteca javafx.scene.control definește cele mai frecvent utilizate controale din cadrul aplicațiilor ce conțin interfețe grafice cu utiliatorul.

Utilizarea Foilor de Stil

JavaFX permite stilizarea interfeței cu utilizatorul folosind foi de stil (eng. CSS – Cascading Style Sheets), deci fără a modifica codul sursă al aplicației. Acestea pot fi aplicate asupra oricărui obiect de tip Node din graful de scene, fiind aplicate asincron în momentul rulării (astfel încât pot fi modificate și dinamic).

Specificația JavaFX CSS se bazează pe versiunea 2.1 a W3C CSS, cu unele actualizări din versiunea 3. Astfel, fișierele conținând foi de stil pot fi parsate de orice utilitar specializat, chiar dacă acesta nu este integrat cu JavaFX. În acest fel, stilurile CSS pentru JavaFX și pentru alte scopuri (pagini HTML) pot fi incluse într-o unică foaie de stil.

Toate proprietățile JavaFX sunt prefixate cu șirul -fx- chiar și pentru cele compatibile CSS HTML, datorită faptului că semantica acestora poate fi diferită pentru valorile corespunzătoare unor atribute.

Operații asupra Elementelor Grafice

Transformări 2D/3D

Fiecare nod din graful de scene JavaFX poate suferi transformări (2D/3D) în sistemul de coordonate Oxyz folosind metodele puse la dispoziție de pachetul javafx.scene.transform:

translate – mută un nod dintr-un loc în altul de-a lungul planurilor x, y, z relativ la poziția sa inițială;

scale – redimensionează un nod pentru a apărea fie mai mare, fie mai mic în planurile x, y, z (în funcție de factorul de scalare);

shear – rotește o axă astfel încât axele x sau y să nu mai fie perpendiculare coordonatele nodului fiind modificate conform specificațiilor;

rotate – rotește un nod în jurul unui punct, denumit pivot al scenei;

affine – realizează o mapare (liniară) dintr-un sistem de coordonate 2D/3D în alt sistem de coordonate 2D/3D păstrând caracteristici ale dreptelor precum paralelismul sau ortogonalitatea – această clasă ar trebui să fie utilizată împreună cu clasele Translate, Scale, Rotate sau Shear în loc de a fi utilizată direct.

Efecte Vizuale

Îmbogățirea aplicațiilor JavaFX (în special a celor de timp real) se face prin efecte vizuale care operează la nivel de pixel al imaginii, toate nodurile din graful de scene fiind randate ca atare.

Efectele implementate în cadrul pachetului javafx.scene.effect sunt:

Bloom (face ca zona cea mai luminoasă a unei imagini să pară strălucitoare);

Blur (adaugă un efect de neclaritate asupra obiectului, putând fi de tipul BoxBlur, MotionBlur sau GaussianBlur);

DropShadow / InnerShadow (adaugă o umbră în spatele / în interiorul conținutului respectiv);

Reflection (creează o versiune reflectată a conținutului respectiv, dispunând-o sub acesta);

Lighting (simulează o sursă de lumină care operează asupra unui continut, dând un aspect mai realistic, 3D, asupra unui obiect plat)

Perspective (mapează un dreptunghi peste un alt dreptunghi, menținând netezimea liniilor dar nu neapărat și paralelismul acestora).

Sistemul Grafic

În sistemul grafic din JavaFX pot fi implementate grafuri de scene 2D și 3D care sunt randate software atunci când hardware-ul nu dispune de accelerare grafică sau aceasta este insuficientă.

Platforma JavaFX implementează două benzi de asamblare pentru accelerare grafică:

Prism este folosit pentru operații de redare / rasterizare hardware / software a conținutului (scene JavaFX, 2D sau 3D) folosind DirectX 9 (Windows XP / Vista), DirectX 11 (Windows 7), OpenGL (Mac, Linux, sisteme încorporate);

Quantum Toolkit reprezintă un element de interfață între Prism și sistemul de ferestre Glass pe care le face disponibile nivelului JavaFX, ocupându-se și de prioritatea firelor de execuție ce tratează redarea față de tratarea evenimentelor ce țin de interacțiunea cu utilizatorul.

La baza stivei de componente a sistemului grafic JavaFX se află Glass – un sistem de ferestre, o interfață între API și sistemul de operare responsabil cu gestiunea ferestrelor, mecanismelor de cronometrare, suprafețelor, cozii ce conține evenimentele de intrare / ieșire.

Platforma JavaFX rulează pe mai multe fire de execuție la un moment dat (minim 2):

firul de execuție JavaFX utilizat pentru a gestiona scenele care fac parte din ferestrele care sunt afișate; un graf de scene poate fi creat într-un fir de execuție separat, însă atunci când nodul său rădăcină este legat de un obiect care este afișat în mod curent, acesta va fi tratat de firul de execuție JavaFX; astfel, se permite ca utilizatorii să creeze în fundal scene complexe, menținându-se constantă viteza de redare a scenei curente; totodată, firul de execuție al aplicației JavaFX este direrit de firul de execuție asociat evenimentelor Swing sau AWT (eng. EDT – Event Dispatch Thread), astfel încât atunci când se integrează astfel de cod în aplicațiile JavaFX, gestiunea obiectelor create în fire de execuție diferite trebuie să se realizeze cu grijă;

firul de execuție Prism folosit pentru redare, separat de gestiunea evenimentelor de interacțiune cu utilizatorul – permițându-se ca un cadru să fie afișat în timp ce alt cadru este procesat în fundal; de asemenea, poate asocia alte fire de execuție folosite pentru rasterizare, eliminând încărcarea diun procesul de randare propriu-zis; procesarea concurentă poate fi exploatată în special în contextul mașinilor care dispun de mai multe procesoare, în care fiecare fir de execuție este asociat unui alt procesor;

un fir de execuție pentru conținut multimedia, ce rulează în fundal, utilizat pentru sincronizarea celor mai recente cadre din graful de scene utilizând firul de execuție JavaFX.

Sincronizarea se face prin intermediul mecanismului Pulse. Un puls este un eveniment care indică grafului de scene JavaFX faptul că trebuie sincronizată starea elementelor pe care le conține conform valorilor din firul de execuție Prism. El se declanșează la cel mult 60 de cadre pe secundă sau oricând sunt redate diferite animații / starea unui control din graful de scene trebuie modificată. Se permite astfel ca evenimentele să fie tratate asincron, în funcție de puls.

Evenimentele din cadrul unui puls sunt executate de sistemul de ferestre Glass prin intermediul unui sistem de cronometrare (de rezoluție înaltă) nativ.

Sistemul Multimedia

JavaFX oferă suport pentru multimedia prin API-urile javafx.scene.media care implementează atât conținut auditiv (formatele .mp3, .aiff, .wav) cât și vizual (formatul .flv).

Sunt implementate trei componente:

obiectul Media reprezintă fișierul multimedia, auditiv sau vizual;

obiectul MediaPlayer redă conținutul;

obiectul MediaView reprezintă nodul din graful de scene ce afișează utilizatorilor informații despre conținutul redat, oferindu-le posibilitatea de a interacționa cu acesta prin diferite operații.

Motorul multimedia a fost proiectat pentru a oferi stabilitate, performanță și comportament consistent pentru toate platformele.

Sistemul pentru Redarea de Pagini Internet

JavaFX include și un navigator care permite redarea conținutului Internet prin intermediul API-ului său.

Componenta Web Engine se bazează pe WebKit, un navigator open-source care suportă HTML5, CSS, JavaScript, DOM și SVG, oferind o funcționalitate asemănătoare cu cele mai multe produse de același tip (redare conținut HTML local și aflat într-o locație la distanță, implementare istoric cu navigare înainte și înapoi în cadrul acestuia, reîncărcarea conținutului, aplicarea unor efecte, editarea conținutului HTML, execuția de comenzi JavaScript și tratarea evenimentelor).

La nivelul componentei care integrează navigatorul sunt definite două clase:

WebEngine care oferă funcționalități de bază caracteristice unui navigator

WebView (derivat din Node) care conține un obiect WebEngine, încorporând conținut HTML în scena aplicației, oferind atribute și metode pentru aplicarea de efecte și transformări.

De asemenea, apelurile Java pot fi controlate prin intermediul JavaScript și invers, astfel încât utilizatorii pot beneficia de avantajele ambelor medii de programare.

Structura Generală a unei Aplicații JavaFX

O aplicație JavaFX trebuie să aibă o clasă principală, derivată din javafx.application.Application.

Metoda start() a acesteia trebuie să fie suprascrisă, primind ca unic parametru un obiect de tip javafx.stage.Stage, fereastra principală a aplicației, pentru care se indică titlul, scena și vizibilitatea. Acestă metodă este apelată în mod automat la execuția clasei principale.

Containerul interfeței cu utilizatorul se exprimă prin clase de tip:

javafx.stage.Stage – fereastra principală;

javafx.scene.Scene – are asociat graful de noduri menținând un model intern al elementelor grafice din cadrul aplicației; la fiecare moment de timp, acesta știe ce obiecte să afișeze, care zone ale ecranului trebuie actualizate și cum să realizeze acest proces într-un mod eficient; metodele de desenare nu sunt apelate manual de utilizator, ci automat de sistemul de randare, conform informațiilor reținute în graful de noduri.

Fiecare element din cadrul unei scene este exprimat sub forma unui nod dintr-un graf (arbore) în care elementul rădăcină este reprezentat de containerul din care acestea fac parte.

Pachetul javafx.scene definește clase aferente celor trei tipuri de noduri care pot apărea în graful (arborele) de scene:

Scene: containerul de bază pentru întregul conținut (nod rădăcină);

Parent: clasă abstractă pentru nodurile ce pot avea copii (nod ramură); implementări ale acestei clase sunt Control,Group, Region și WebView;

Node: clasă abstractă pentru toate elementele grafice, folosită în special pentru nodurile care nu pot avea copii (nod frunză); clasele ce pot fi folosite în acest scop sunt definite mai cu seamă în pachetele javafx.scene.shape și javafx.scene.text.

Aceste clase de bază definesc funcționalități importante care vor fi moștenite de subclasele lor, inclusiv ordinea de desenare, vizibilitatea, compunerea transformărilor sau suportul pentru stiluri CSS.

Componente ale Interfeței cu Utilizatorul

Controale Grafice

Controalele care gestionează interfața cu utilizatorul în JavaFX sunt noduri în graful de scene, putând fi particularizate fie folosind foi de stil CSS, fie utilizând clasa Skin. Totodată, ele pot fi integrate cu ușurință cu alte aplicații grafice Java (integrarea cu o aplicație Swing se face creând un obiect Scene la care se adaugă toate nodurile – având un mod de dispunere asociat -, acesta fiind ulterior adăugat la containerul corespunzător din aplicația Swing respectivă; chiar și în acest caz, elementele JavaFX sunt randate cu Prism).

Clasele care implementează controale din JavaFX se găsesc în pachetul javafx.scene.control. Fiecare control dispune de atribute și metode (suplimentare față de cele din clasa Control) pentru a oferi suport complet în interacțiunea cu utilizatorul. Clasa Control poate fi extinsă definindu-se un obiect care corespunde nevoilor utilizatorilor.

Pe lângă controalele clasice (existente în AWT și Swing) au fost dezvoltate și alte componente, precum Accordion,ColorPicker, Chart, DatePicker, Pagination, TitledPane, TreeTableView.

Fiind derivate din clasa Node, controalele pentru interfața cu utilizatorul pot fi integrate în diferite animații, efecte, transformări sau tranziții în cadrul procesului de randare a scenei.

Diagrame

În JavaFX pot fi utilizate și grafice, definite de pachetul javafx.scene.chart, fiind suportate următoarele tipuri:

PieChart – diagramă în care datele sunt reprezentate sub forma unui cerc împărțit în secțiuni triunghiulare (arce de cerc) denumite felii;

LineChart – diagramă definită pe baza a două axe de coordonate în care datele sunt prezentate sub forma unei serii de puncte conectate prin linii drepte;

AreaChart – diagramă în care datele sunt reprezentate sub forma unor suprafețe între o serie de puncte conectate cu axele de coordonate prin linii drepte;

BubbleChart – diagramă definită pe baza a două axe de coordonate în care datele sunt prezentate sub formă de baloane;

ScatterChart – diagramă în care datele sunt prezentate sub forma unei mulțimi de puncte;

BarChart (cu varianta StackedBarChart) – diagramă definită pe baza a două axe de coordonate în care datele sunt prezentate sub forma unor dreptunghiuri.

În momentul în care se definește un model pentru un anumit tip de diagramă, trebuie să se distingă între acele tipuri de tabele care folosesc axele de coordonate și cele care nu le utilizează.

Proprietățile comune tuturor tipurilor de grafice sunt titlul (setTitle()), poziția sa (sus, jos, stânga, dreapta), vizibilitatea etichetelor (setLabelsVisible()), vizibilitatea (setLegendVisible()) și poziția (setLegendSide() /setLabelLineLength()) legendei.

Conținut pentru Pagini Internet

JavaFX dispune și de un navigator încorporat, bazat pe WebKit, un motor open-source care implementează foi se stil CSS(eng. Cascading Stype Sheets), JavaScript, interfața de programare Document Object Model (DOM) și HTML5.

Caracteristicile HTML5 suportate sunt:

etichetele Canvas și SVG pentru:

redarea de conținut grafic;

construirea de forme folosind sintaxa Scalable Vector Graphics, aplicarea de configurări referitoare la culoare, efecte vizuale, animații;

redarea de conținut media, codec-urile implementate fiind:

audio: AIFF, WAV(PCM), MP3, AAC;

video: VP6, H264;

containere media: FLV, FXM, MP4, MpegTS (HLS);

controale pentru redarea de formulare și procesarea datelor;

gesiunea istoricului de navigare din cadrul unei sesiuni, prin intermediul obiectului WebEngine;

etichete interactive: details, summary, command, menu;

acces la modelul obiectual al unei pagini Internet (DOM), obținut prin intermediul obiectului WebEngine (metoda getDocument());

rularea de scripturi Web (eng. Web workers) concomitent cu realizarea altor activități din cadrul paginii Internet, astfel încât interacțiunea cu utilizatorul să nu fie afectată;

sockeți Web (clasa WebSocket) pentru realizarea de comunicații bidirenționale cu diverse servere;

seturi de caractere declarate cu regula @font-face (eng. Web fonts) descărcate de pe alte servere, la nevoie (alegerea unui set de caractere care este adecvat scopurilor de proiectare pentru o pagină dată).

Funcționalitățile implementate de navigatorul încorporat de JavaFX sunt:

redarea de conținut HTML5 stocat local sau de la o adresă la distanță;

obținerea istoricului de vizitare;

executarea de comenzi JavaScript;

acces la metodele JavaFX din acest JavaScript;

gestiunea ferestrelor proeminente (eng. pop-up window);

aplicarea de efecte asupra sa.

Acesta moștenește toate atributele și metodele de la clasa Node, având toate funcționalitățile acesteia.

Clasele pe care le folosește navigatorul se găsesc în pachetul javafx.scene.web.

Redarea Conținutului Audio/Video

Pachetul javafx.scene.media oferă funcționalități pentru redarea de conținut multimedia în cadrul aplicației JavaFX.

Formatele suportate în mod curent sunt:

audio: MP3; AIFF și WAV conținând PCM (Pulse Code Modulation) necomprimat; MPEG-4 folosind AAC (Advanced Audio Coding);

video: FLV în care formatul video este VP6, iar cel audio este MP3; MPEG-4 cu compresie video H.264/AVC (Advanced Video Coding).

Decodificarea unor tipuri de compresii audio sau video se bazează pe motoarele multimedia ale sistemelor de operare.

Dezvoltarea unei Interfețe Grafice în mod vizual

FXML reprezintă un limbaj bazat pe XML care oferă structura necesară pentru dezvoltarea unei interfețe cu utilizatorul, separând-o de logica aplicației. Astfel, se poate modifica aspectul grafic al unei aplicații fără a fi necesară compilarea codului sursă, putându-se obține interfețe cu utilizatorul complexe fără a avea cunoștințe referitoare la limbajul de programare Java.

Deși nu respectă în mod necesar o anumită schemă, FXML are o structură de bază predefinită. Astfel, cele mai multe clase JavaFX pot fi utilizate ca elemente și cele mai multe proprietăți (ale unor componente de tip JavaBeans) pot fi folosite ca atribute.

Dintr-o perspectivă a arhitecturii MVC (Model View Controller), fișierul FXML care conține descrierea interfeței cu utilizatorul reprezintă partea de vizualizare. Controlul este realizat prin clasele Java (implementând opțional interfața Initializable, responsabilă cu gestiunea unui fișier .fxml), iar modelul va fi reprezentat prin obiecte domeniu (definite în context Java) ce se asociază vizualizării prin control.

FXML este extrem de util în special pentru interfețele cu utilizatorul ce conțin grafuri de scene complexe, de dimensiuni mari, formulare, animații complicate, precum și pentru interfețe statice (formulare, controale, tabele). Pot fi definite și interfețe dinamice prin utilizarea de scripturi.

Utilizarea FXML implică numeroase beneficii:

are o sintaxă similară cu XML, punând la dispoziția diferiților dezvoltatori un mecanism familiar pentru a construi interfețe grafice;

FXML nu este un limbaj compilat, astfel încât proiectul nu trebuie reconstruit atunci când se produc modificări ca acestea să fie vizibile;

graful de scene este mai transparent în FXML, facilitând atât construirea cât și menținerea interfeței cu utilizatorul;

conținutul unui fișier FXML poate fi localizat pe măsură ce este parcurs; acest lucru nu se întâmplă în cazul codului sursă dezvoltat în limbajul de programare Java unde conținutul fiecărui element trebuie modificat în mod manual (se obține o referință către el după care se apelează metoda de stabilire a proprietății corespunzătoare);

FXML este compatibil cu orice limbaj JVM (Java Virtual Machine) ca: Java, Scala, Clojure;

FXML nu este limitat doar la partea de vizualizare a arhitecturii MVC, ci se pot construi servicii, sarcini sau obiecte domeniu, existând și o integrare cu limbaje pentru scripturi (ca JavaScript).

În versiunea 2.2 a JavaFX au fost introduse câteva facilități:

utilizarea \ pentru a prefixa caracterele speciale;

definirea unei variabile implicite pentru controller spre a documenta spațiul de nume, realizând astfel o legătură cu interfața grafică;

constructor pentru clasa FXMLLoader, ca alternativă a metodei statice load();

instanțierea clasei controller poate fi particularizată, prin specificarea unei fabrici în obiectul FXMLLoader, astfel încât construirea unei astfel de clase este delegată către acesta;

foi de stil mai ușor de utilizat;

posibilitatea de definire a metodelor de tratare a evenimentelor în cadrul clasei controller, fără parametri;

eticheta <fx:constant> înlesnește procesul de căutare a constantelor, astfel încât constanta java.lang.Double.NEGATIVE_INFINITY definită în Java poate fi referită ca <Double fx:constant=“NEGATIVE_INFINITY”/>;

accesul la sub-clasele care asigură controlul unor noduri definite ca elemente ale scenei din fișierul FXML a fost îmbunătățit – pentru fiecare nod se pot defini clase în cadrul cărora sunt tratate evenimente; în cazul în care acesta conține la rândul său alte noduri, atunci când acestea sunt create se vor construi și sub-clasele care asigură controlul (în cadrul metodei initialize());

inițializarea claselor care asigură controlul se face prin mecanismul de reflectare, instanța clasei FXMLLoader identificând automat metoda initialize() pe care o și apelează; în cazul în care nu este publică, pentru această metodă trebuie folosită adnotarea @FXML;

ușurința în realizarea de noi controale FXML – prin intermediul metodelor setRoot() și setController(), codul sursă care le apelează poate stabili valori pentru nodul rădăcină, respectiv pentru obiectul care se ocupă de control astfel încât aceste operații nu mai trebuie realizate de către FXMLLoader; se pot dezvolta astfel controale care pot fi reutilizate.

JavaFX Scene Builder

Documentele FXML pot fi dezvoltate în mod vizual folosind utilitarul SceneBuilder, disponibil pe platformele Windows (32/64 de biți), Mac OS X și Linux (32/64 biți) – sub formă de pachete .deb și arhive tar.gz.

Acesta permite construirea interfeței grafice interactiv, simultan cu generarea automată a documentului FXML, fiecare control putând fi configurat, grupate în proprietăți, moduri de dispunere și cod.

Caracteristicile utilitarului SceneBuilder sunt:

interfață WYSIWYG de tip drag and drop care permite crearea rapidă a unei interfețe cu utilizatorul fără a fi nevoie de a scrie cod sursă; controalele pot fi preluate dintr-o bibliotecă și dispuse în modul în care se dorește afișarea lor;

integrare facilă cu orice IDE pentru Java de vreme ce este un utilitar de sine stătător;

generare automată a codului FXML se produce la construirea interfeței cu utilizatorul, acesta fiind menținut separat de logica aplicației și foile de stil;

editare în timp real și funcționalități de previzualizare ce permit ca modificările la interfața cu utilizatorul să fie vizibile pe măsură ce sunt implementate, fără a fi necesar ca aplicația să fie compilată, reducând timpul de dezvoltare al proiectului;

acces la întreaga bibliotecă de controale JavaFX 8;

posibilitatea de specificare a unor elemente de interfață grafică definite de utilizator, importate din arhive JAR, fișiere FXML sau importate în panourile de ierarhie / conținut;

suport 3D, pentru obiectele de acest tip putând fi specificate proprietățile din panoul de inspectare (cu excepția proprietăților Material și Mesh); încă nu pot fi create obiecte 3D;

suport pentru text particularizat, prin implementarea containerului TextFlow ce poate conține mai multe noduri de tip Text, acestea putând fi gestionate autonom;

JavaFX Scene Builder Kit este un API ce permite integrarea funcționalităților direct în interfața grafică a unui mediu de dezvoltare integrat precum NetBeans, IntelliJ, Eclipse;

suport pentru CSS permite gestiunea flexibilă a modului în care arată aplicația;

suport pentru mai multe sisteme de operare, având pe toate un comportament consistent;

gratuitate pentru toate tipurile de utilizatori.

1.3 – Prezentare sistem SGBD utilizat

Un SGBD = sistem de gestiune pentru baze de date (eng. DBMS = Database Management Systems) este o colecție de programe care are drept scop indicarea structurii bazei de date, popularea și exploatarea sa, asigurând totodată și protecția datelor. Aceasta reprezintă o aplicație informatică complexă ce însoțește baza de date, având ca funcții definirea (specificarea structurii și a tipurilor de date stocate), construcția (popularea) și manipularea ei (diferite operații de la implementarea interogărilor pentru regăsirea informațiilor până la generarea de rapoarte).

Rolul său este de a facilita accesul la date, fapt ce este realizat prin asigurarea transparenței reprezentării acestora față de utilizatori în cadrul procesului de interacțiune cu ele. Din acest punct de vedere, sistemul de gestiune pentru baze de date este interfața între nivelul fizic, cel mai scăzut, și programele prin care sunt transmise aplicației interogările de regăsire a datelor.

Împreună cu datele propriu-zise (prin date înțelegându-se nu doar la colecțiile de informații stocate de către utilizator ci și dicționarul de date care conține meta-date: structura bazei de date, definițiile tipurilor de date / restricțiile de integritate, viziunile, indecșii precum și fișierele anexe care conțin un context curent de lucru (parametrii de configurare), acesta formează

SBD = sistemul de baze de date (eng. DBS = Database System).

Arhitectura asociată unei baze de date este reprezentată pe trei niveluri, având ca scop separarea aplicațiilor utilizatorului de informațiile stocate:

nivelul (schema) intern(ă) specifică structura de stocare fizică a datelor, folosind un model al datelor fizice; acesta descrie atât modul de stocare cât și modul de acces;

nivelul (schema) conceptual(ă) descrie structura bazei de date prin entități și tipul de date asociat precum și relațiile dintre acestea, precizând și restricțiile de integritate;

nivelul (schema) extern(ă) prezintă moduri de vizualizare ale bazei de date din perspectiva diferiților utilizatori care o accesează

Obiectivele unui sistem de gestiune pentru baze de date sunt:

asigurarea independenței datelor, încât modificarea structurii de memorare a datelor sau schimbarea modului de acces la ele (independență fizică) precum și a schemei conceptuale (independență logică) să nu presupună rescrierea programelor de aplicație;

asigurarea unei redundanțe minime și controlate a datelor;

asigurarea unor facilități de utilizare a datelor (concurența utilizatorilor, ușurința regăsirii datelor prin limbaje apropiate de cel natural, optimizarea timpilor de acces);

oferirea unui nivel de securitate ridicat împotriva accesului neautorizat;

asigurarea integrității datelor prin proceduri de validare și printr-un protocol de refacere a bazei de date.

Toate sistemele de gestiune a bazelor de date oferă un set de funcții:

funcția de definire a datelor, implementată prin intermediul unui limbaj de definire a datelor (DDL – Data Definition Language) ce permite crearea bazelor de date, specificarea structurii tabelelor unei baze de date prin precizarea atributelor, a tipurilor de date, a legăturilor dintre ele, a restricțiilor sau modalitățile de acces; schema bazei de date descrisă la acest nivel va fi memorată în dicționarul de date;

funcția de manipulare a datelor, realizată printr-un limbaj de manipulare a datelor (DML – Data Manipulation Language) care permite adăugarea, modificarea sau ștergerea unor înregistrări, regăsirea de informații potrivit unor criterii și ordonarea lor;

funcția de utilizare ce oferă interfețe de regăsire a informațiilor, printr-un limbaj de definire a vizualizărilor (VDL – View Definition Language); există mai multe tipuri de utilizatori:

beneficiari (utilizatori conversaționali) care vizualizează informațiile fără a folosi vreun limbaj de interogare a bazei de date;

programatori care utilizează limbajele de manipulare, exploatând baza de date prin mecanisme complexe;

administratorul bazei de date care ia decizii în privința funționării corespunzătoare a întregului sistem.

funcția de administrare a bazei de date care permite configurarea diferiților parametri (performanță, securitate) în funcție de scopul în care se dorește să se utilizeze baza de date.

Clasificarea sistemelor de gestiune a bazelor de date se poate face după mai multe criterii:

în funcție de modelul de date utilizat: relațional, rețea, ierarhizat, obiectual;

numărul de utilizatori ce pot accesa baza de date simultan: monouser, multiuser;

modul de stocare al datelor: centralizat, distribuit;

costurile pentru licențiere: produse gratuite și cu cost de licențiere scăzut / ridicat;

limbajul pentru scrierea de aplicații: medii cu limbaj nativ și cu limbaj gazdă.

De asemenea, pe lângă sistemele de bază de date convenționale, au fost dezvoltate sisteme de baze de date evoluate cum ar fi cele paralele, mobile, spațiale, multimedia, distribuite, dezvoltate pentru aplicații specializate, caracterizate prin funcționalități sau tipuri de date care dau specificul sistemului de baze de date respectiv.

Proiectarea bazelor de date

În proiectarea bazelor de date trebuie să se țină cont de următoarele principii:

structura bazei de date trebuie să fie normalizată (să respecte o formă normală), astfel încât să se evite anomaliile la operațiile de actualizare în baza de date;

pentru fiecare tabelă trebuie să se definească o cheie primară (formată din unul sau mai multe atribute) care să identifice în mod unic o înregistrare;

tipul de date trebuie ales astfel încât să corespundă necesităților, evitând irosirea de memorie pe discul fizic, dar evitând situația în care anumite informații nu pot fi reținute datorită unei alocări insuficiente;

toate tabelele unei baze de date trebuie să fie legate prin legături de tip cheie străină: o tabelă care nu are legătură cu celelalte tabele nu face parte din baza de date respectivă.

MySQL

MySQL este un sistem de gestiune a bazelor de date relaționale, produs de compania suedeza MySQL AB și distribuit sub Licența Publică Generală GNU. Este cel mai popular SGBD open-source la ora actuală[6], fiind o componentă cheie a stivei LAMP (Linux, Apache, MySQL, PHP).

Deși este folosit foarte des împreună cu limbajul de programare PHP, cu MySQL se pot construi aplicații în orice limbaj major. Există multe scheme API disponibile pentru MySQL ce permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum ar fi: C, C++, C#, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip specific API. O interfață de tip ODBC denumită MyODBC permite altor limbaje de programare ce folosesc această interfață, să interacționeze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. În sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul cărora respectivele limbaje să poată folosi acest SGBD mult mai ușor decât prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale.

Licența GNU GPL nu permite încorporarea MySQL în softuri comerciale; cei care doresc să facă acest lucru pot achiziționa, contra cost, o licență comercială de la compania producătoare, MySQL AB.

MySQL este componentă integrată a platformelor LAMP sau WAMP (Linux/Windows-Apache-MySQL-PHP/Perl/Python). Popularitatea sa ca aplicație web este strâns legată de cea a PHP-ului care este adesea combinat cu MySQL și denumit Duo-ul Dinamic. În multe cărți de specialitate este precizat faptul ca MySQL este mult mai ușor de invățat și folosit decât multe din aplicațiile de gestiune a bazelor de date, ca exemplu comanda de ieșire fiind una simplă și evidentă: „exit” sau „quit”.

Pentru a administra bazele de date MySQL se poate folosi modul linie de comandă sau, prin descărcare de pe internet, o interfață grafică: MySQL Administrator și MySQL Query Browser. Un alt instrument de management al acestor baze de date este aplicația gratuită, scrisă în PHP, phpMyAdmin.

MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD, GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows 9x/NT/2000/XP/Vista.

1.4 – Gestiunea informațiilor dintr-o bază de date folosind JDBC (Java Database Connectivity)

JDBC (Java Database Connectivity) este o interfață de programare Java prin intermediul căreia pot fi manipulate informațiile dintr-o sursă de date. Operațiile pe care le pune la dispoziție acest API sunt:

conectarea (respectiv, deconectarea) la o sursă de date, cel mai frecvent o bază de date;

transmiterea de interogări către sursa de date respectivă (de tip SELECT, INSERT, UPDATE, DELETE dar și referitoare la informațiile din dicționarul de date), obținerea rezultatelor aferente comenzilor realizate și procesarea lor, inclusiv propagarea modificărilor realizate.

Componentele pe care le include JDBC sunt:

interfața de programare propriu-zisă (JDBC API 4.1) care oferă acces la informațiile din baza de date folosind limbajul Java. Este conținută de pachetelejava.sql și javax.sql, incluse atât în platforma standard (Java SE) cât și în platforma pentru implementarea aplicațiilor de întreprinderi (Java EE); în mediile distribuite, există posibilitatea de interacțiune cu mai multe surse de date simultan;

modulul pentru gestiunea driver-elor (JDBC Driver Manager), reprezentat de clasa DriverManager în care sunt definite obiectele ce pot conecta aplicațiile Java la un “driver” JDBC; pachetele javax.naming și javax.sql oferă posibilitatea realizării unei conexiuni către o sursă de date (obiect de tipDataSource) înregistrată de către serviciul de nume Java Naming and Directory Interface (JNDI).

suita de teste JDBC oferă o serie de utilitare care verifică dacă “driverele” JDBC sunt compatibile cu o aplicație Java;

puntea ODBC-JDBC pentru realizarea de conexiuni JDBC prin “drivere” ODBC care vor trebui încărcate pe fiecare mașină ce le utilizează; acesrea sunt utilizate atunci când nu există alte soluții de conectare (native). Puntea este ea însăși un tip de driver bazat pe tehnologia JDBC, fiind conținut de clasasun.jdbc.odbc.JdbcOdbcDriver, definind subprotocolul odbc; o astfel de soluție este adecvată în rețelele de calculatoare ale corporațiilor în care instalarea de aplicații pe diferite mașini din cadrul acestora nu reprezintă o problemă sau pentru arhitecturile care utilizează un server de aplicații.

Arhitectura JDBC definește două modele de procesare pentru accesul la informațiile din baza de date:

în modelul pe două niveluri aplicația Java comunică în mod direct cu sursa de date, necesitând un “driver” JDBC specific acesteia care să poată accesa informațiile. Instrucțiunile utilizatorului sunt transmise sursei de date care întoarce la rândul sau rezultatele. Cele două componente rulează de obicei pe mașini diferite conectate prin intermediul unei rețele de calculatoare (intranet/Internet), modelul fiind cunoscut și sub numele de client-server;

în modelul pe trei niveluri comenzile sunt transmise prin intermediul unor servicii puse la dispoziție într-un nivel intermediar, care au acces la sursa de date. Ca atare, informațiile vor trece – în ambele direcții – prin acest nivel. Conexiunea la nivelul intermediar se poate face prin HTTP sau alte metode pentru acces la distanță (RMI, CORBA, servicii web). Câteva avantaje pe care le oferă acest model sunt controlul centralizat al accesului la date, simplificarea procesului de dezvoltare al aplicațiilor, performanța.

JDBC începe să fie adoptat pe scară largă datorită suportului pentru gestiunea paralelă a conexiunilor, tranzacții distribuite precum și posibilităților de procesare a informațiilor deconectate de la sursa de date corespunzătoare.

Drivere de Conectare la Surse de Date

Un “driver” de conectare la un sistem de gestiune al bazei de date reprezintă o bibliotecă prin care sunt transformate apelurile JDBC (din limbajul de programare Java) într-un format suportat de protocolul de rețea folosit de sistemul de gestiune al bazei de date, permițând programatorilor să acceseze datele din medii eterogene.

Astfel, “driver-ul” pentru sistemul de gestiune al bazei de date realizează legătura între nivelul de logică a aplicației și nivelul de date (reprezentat prin baza de date propriu-zisă).

Există patru implementări pentru “drivere” JDBC:

tipul 1: drivere ce implementează API-ul JDBC ca punte peste ODBC (eng. Open DataBase Connectivity), acesta fiind cel care accesează datele propriu-zise; portabilitatea lor este relativ redusă, fiind dependente de o bibliotecă scrisă în cod nativ (și nu implementate complet în Java); de asemenea, viteza de execuție este destul de redusă datorită transformărilor ce trebuie realizate atât la transmiterea interogărilor cât și a rezultatelor; implică instalarea de utilitare suplimentare pe client ceea ce le poate face incompatibile cu anumite tipuri de aplicații; această soluție este tranzițională și ar trebui folosită în cazul în care sistemul de gestiune pentru baze de date respectiv nu oferă un driver JDBC scris doar Java; Oracle nu implementează acest tip de drivere; totuși, întrucât există “drivere” ODBC pentru toate bazele de date existente, o astfel de soluție oferă acces către orice tip de date;

tipul 2: drivere care sunt scrise parțial în Java și parțial în cod nativ, folosind o bibliotecă specifică pentru sursele de date la care se conectează, ceea ce le reduce portabilitatea și posibilitatea utilizării în contextul rețelelor de calculatoare; de asemenea, nu toți producătorii oferă astfel de biblioteci care trebuie instalate pe client; exemplu: Oracle Call Interface;

tipul 3: drivere dezvoltate exclusiv în Java care comunică cu middleware-ul printr-un protocol independent de baza de date, comenzile fiind transformate la acest nivel în instrucțiuni specifice bazei de date care pot fi utilizate apoi pentru accesarea sursei de date; avantajele acestei soluții constau în facilitățile oferite de middleware cum ar fi controlul încărcării, memorarea conexiunilor, stocarea rezultatelor interogărilor într-o zonă tampon de memorie, opțiuni de administrare sistemului (autentificare, analiza performanțelor); pe lângă portabilitate acest tip de “driver” este performant (cel mai eficient între toate) și scalabil (se pot accesa mai multe tipuri de baze de date); nu trebuie încărcate pe client produse specifice producătorilor, ceea ce îl face adecvat utilizării în Internet; protocolul independent de baza de date poate determina ca încărcarea driverului să se facă rapid; dezavantajul consta în faptul că operațiile specifice bazei de date trebuie realizate în cadrul nivelului intermediar;

tipul 4: drivere scrise în Java care implementează un protocol de rețea specific sistemului de gestiune pentru baze de date, spre a se conecta la sursa de date în mod direct; se asigură astfel independența de platformă cât și eficiența întrucât nu sunt necesare niveluri suplimentare pentru translatarea codului dintr-un format într-altul; totodată, nu este necesară instalarea de utilitare suplimentare pe client și pe server, ceea ce face ca abordarea să fie compatibilă cu utilizarea peste o rețea de calculatoare; nu pot fi procesate mai multe baze de date în paralel, fiind necesar un driver pentru fiecare astfel de conexiune; exemplu: MySQL Connector/J

Pentru driverele de tip 1 și 2 este necesară existența unor biblioteci specifice pentru fiecare tip de bază de date, fiind necesar ca acestea să fie puse la dispoziție de producătorii acestora.

Pentru driverul de tip 3 trebuie instalat un server de aplicații care comunică cu sistemul de gestiune pentru baze de date. De regulă acesta este configurat pentru a fi compatibil cu mai multe tipuri de baze de date, iar performanțele sale trebuie să compenseze timpul pentru transferul de informații de la și către el.

Driverul de tip 4 este cel mai flexibil dintre toate întrucât nu necesită utilitare suplimentare, fiind și independent de platformă.

Capitolul 2 – Pregătirea mediului de dezvoltare al aplicației

2.1 – Instalarea sistemului de operare linux – Ubuntu Desktop 16.04

Ubuntu este un sistem de operare bazat pe Linux pentru computerele personale, servere și netbook-uri. Rudă apropiată a sistemului de operare Debian GNU/Linux, Ubuntu este ușor de instalat și folosit, des actualizat și neîngrădit de restricții legale. Ubuntu este sponsorizat de Canonical Ltd., o companie privată fondată de antreprenorul sud-african Mark Shuttleworth.

Instalarea sistemului de operare Linux Ubuntu se poate face prin mai multe metode, acestea sunt centralizate pe site-ul oficial la urmatorul link https://help.ubuntu.com/community/Installation.

In linii mari etapele sunt urmatoarele:

Obținem imaginea iso cu versiunea dorită si arhitectura procesorului 32/64 bit

Scriem această imagine pe un DVD sau memorie usb; cu ajutorul anumitor programe in funcție de sistemul de operare existent pe calculatorul unde desfășurăm aceste proceduri

Pe calculatorul pe care dorim să instalăm configurăm in BIOS să pornească (caute) sistemul de operare pe unitatea de DVD sau memoria usb

Urmăm pașii de instalare selectând în ferestrele afișate obțiunile dorite

Conectăm DVD-ul sau memoria usb cu imaginea de linux Ubuntu

Selectăm corespunzător în BIOS

Dacă instalăm pe un laptop este recomandat să îl conectăm la priză, pentru a nu risca să rămânem fără baterie în timpul instalări. Ne asigurăm că avem destul spațiu liber pe engl. Hdd; conectăm calculatorul/laptop-ul la internet și bifăm obțiunea de a-și lua (engl. Update-urile) in timpul instalări.

Alegem modul de partajare a hdd-ului.

Avem nevoie de minim 4.5 GB spațiu liber pe hdd pentru a instala Ubuntu Desktop

Dacă suntem conectați la internet, locația in care ne aflăm va fi detectată automat, în cazul în care observăm că nu este corectă, putem selecta locația corectă.

Alegem preferința pentru tastatură.

Setăm un nume de utilizator, nume de calculator și o parolă.

Așteptăm instalarea, descărcarea (în cazul în care avem conexiune la internet) pachetelor mai noi dacă există și configurarea. Acest proces este complet automat.

Fereastra cu mesajul că instalarea s-a terminat si putem reporni calculatorul cu noul sistem de operare instalat.

2.2 – Instalare Java Oracle JDK 8 în Ubuntu 16.04

Ubuntu oferă ca și posibilitate de a instala din arhivele de softuri pe care le administreaza(întreține) openjdk prin comanda:

sudo apt-get install default-jre

și

sudo apt-get install default-jdk

Dacă se dorește alta versiune decât cea default se folosește comanda în care se specifică versiunea

sudo apt-get install openjdk-7-jre

și

sudo apt-get install openjdk-7-jdk

Dacă dorim versiunea Oracle JDK 8, avem posibilitatea de a descărca de pe site-ul Oracle versiunea compilată sub forma arhivă tar.gz sau rpm, link-ul pentru descărcare este

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Pentru Ubuntu comenzile de instalare sub forma de tar.gz sunt:

Creăm un director

sudo mkdir –p /usr/local/java

Ne mutăm in director unde trebuie să avem și arhiva descărcată de pe site-ul Oracle, dezarhivăm și ștergem ulterior arhiva

cd /usr/local/java

sudo tar xzf jdk-8u92-linux-<platform>.tar.gz

Rm –f jdk-8u92-linux-<platform>.tar.gz

se definește variabila de sistem JAVA_HOME prin editarea fișierului /etc/profile (se poate folosi orice editor de text, precum vi sau nano)

sudo nano /etc/profile

JAVA_HOME=/usr/local/java/jdk1.8.0_92

PATH=$PATH:$JAVA_HOME/bin

export JAVA_HOME

export PATH

se indică sistemului de operare locația la care se găsește instalată Java

sudo update-alternatives –install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_92/bin/java" 1

sudo update-alternatives –install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_92/bin/javac" 1

sudo update-alternatives –install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_92/bin/javaws" 1

update-alternatives –install "/usr/bin/rmiregistry" "rmiregistry" "/usr/local/java/jdk1.8.0_92/bin/rmiregistry" 1

update-alternatives –install "/usr/bin/wsimport" "wsimport" "/usr/local/java/jdk1.8.0_92/bin/wsimport" 1

se indică sistemului de operare faptul că versiunea instalată de Java este cea implicită

sudo update-alternatives –set java /usr/local/java/jdk1.8.0_92/bin/java

sudo update-alternatives –set javac /usr/local/java/jdk1.8.0_92/bin/javac

sudo update-alternatives –set javaws /usr/local/java/jdk1.8.0_92/bin/javaws

sudo update-alternatives –set rmiregistry /usr/local/java/jdk1.8.0_92/bin/rmiregistry

sudo update-alternatives –set wsimport /usr/local/java/jdk1.8.0_92/bin/wsimport

se încarcă fișierul /etc/profile ce conține variabilele de sistem globale

. /etc/profile

O altă variantă mai simplă și care iți oferă și (engl. update) automat este să apelezi la un (engl. repository) menținut de cineva care pregătește pachete de tip deb cu Oracle JDK.

Adăugăm locația arhivei (repository):

sudo add-apt-repository ppa:webupd8team/java

Instruim sistemul de operare sa descarce din nou listele cu programe existente în arhive:

sudo apt-get update

Comanda de instalare pentru Oracle Java 8 (care include JDK, JRE și ‘browser plugin’)

sudo apt-get install oracle-java8-installer

Pentru a vedea versiunile de java instalate în sistem și a alege versiunea pe care vrem să o folosim implicit:

sudo update-alternatives –config java

2.3 – Instalare mediu de dezvoltare Netbeans IDE 8.1

Ce este NetBeans?

NetBeans este un proiect open-source, cu o bază de utilizatori foarte mare, o comunitate în creștere și peste 100 de parteneri (în creștere!) din toată lumea. Sun Microsystems a fondat proiectul open source NetBeans în iunie 2000 și continuă să fie principalul sponsor al proiectului.

Astăzi există două produse: NetBeans IDE și platforma NetBeans.

NetBeans IDE este un mediu de dezvoltare – un instrument pentru programatori, pentru scrierea, compilarea, testarea, depanarea, proiectarea și instalarea programelor. Este scris în Java – dar poate accepta orice limbaj de programare. De asemenea, există un număr imens de module pentru extinderea NetBeans IDE. NetBeans IDE este un produs gratuit, fără restricții legate de modul de utilizare.

De asemenea, este disponibilă Platforma NetBeans; o bază modulară și extensibilă, utilizată drept conector software pentru crearea aplicațiilor desktop puternice. Partenerii ISV oferă Plugin-uri cu valoare adăugată, care se integrează ușor în platformă și care pot fi utilizate, de asemenea, la dezvoltarea propriilor instrumente și soluții.

Ambele produse sunt open-source și gratuite pentru uz comercial și necomercial. Codul sursă este disponibil pentru reutilizare, conform Common Development and Distribution License (CDDL – Licența de distribuție și dezvoltare comună).

Descărcăm NetBeans IDE 8.1 Java SE Installer for Linux/English (en) din https://netbeans.org/downloads/index.html schimbăm drepturile asupra fișierului (binarul .sh) descarcat cu comanda

chmod +x netbeans-8.1-javase-linux.sh

Instalarea incepe prin executarea comenzi:

./netbeans-8.1-javase-linux.sh

Lansarea în execuție a mediului de dezvoltare integrat se face prin ~/netbeans-8.1/bin/netbeans (presupunând că s-au folosit directoarele implicite de instalare).

2.4 – Instalare JavaFX Scene Builder 8.2.0

Oracle nu mai oferă Scene Builder in format binar (compilat) , dar fiind un proiect open source alte companii au preluat ștafeta oferind Scene Builder sub formă compilată. Codul sursă se poate descarcă de aici:

https://bitbucket.org/gluon-oss/scenebuilder/downloads

sau

http://hg.openjdk.java.net/openjfx/8u40/rt/file/eb264cdc5828/apps/scenebuilder

Gluon oferă Scene Builder sub forma de jar, exe, dmg, deb și rpm, comilat din surse la zi, care au toate funcționalitățile noi și bug-uri reparate, link-ul către site-ul lor cu pagina de descărcare

http://gluonhq.com/open-source/scene-builder/

2.5 – Instalare MySQL 5.7

Pe Linux, sunt disponibile pachete pentru instalarea MySQL (atât server, cât și client), implicit fiind instalată versiunea 5.7.12

Se poate instala și descărcând arhiva tar de pe http://dev.mysql.com/downloads/mysql/ care conține toate pachetele necesare (mysql-common, mysql-community-server, mysql-community-client, libmysqlclient).

Se dezarhivează fișierul mysql-server_5.7.12-1ubuntu<versiune>_<arhitectura>.deb-bundle.tar, extrăgându-se pachetele pe care le conține:

tar -xvf mysql-server_5.7.12-1ubuntu<versiune>_<arhitectura>.deb-bundle.tar

Se instalează, în ordine:

sudo dpkg -i mysql-common_5.7.12-1ubuntu<versiune>_<arhitectura>.deb
sudo dpkg -i mysql-community-server_5.7.12-1ubuntu<versiune>_<arhitectura>.deb
sudo dpkg -i mysql-community-client_5.7.12-1ubuntu<versiune>_<arhitectura>.deb
sudo dpkg -i libmysqlclient18_5.7.12-1ubuntu<versiune>_<arhitectura>.deb

Conectarea la sistemul de gestiune pentru baze de date MySQL se face prin comanda:

mysql -u root -p

Starea sistemului de gestiune pentru baze de date MySQL poate fi interogată folosind comanda:

sudo service mysql status

Pornirea/Repornirea și oprirea serviciului se face prin comenzi similare:

sudo service mysql start
sudo service mysql restart
sudo service mysql stop

sau

sudo systemctl restart mysql.service

sudo systemctl status mysql.service

sudo systemctl stop mysql.service

sudo systemctl start mysql.service

Instalare din repository; în cadrul procesului de instalare, utilizatorul va fi solicitat să introducă o parolă pentru utilizatorul root pe care ulterior să o confirme:

2.6 – Instalare MySQL Workbench 6.3.6

Pentru instalarea MySQL Workbench există mai multe variante:

Metoda 1 – folosirea pachetului implicit

Programul pornit după instalare

Metoda 2 – utilizarea binarelor disponibile la http://dev.mysql.com/downloads/workbench/

Metoda 3 – recompilarea surselor disponibile la http://dev.mysql.com/downloads/workbench/

Similar Posts