Localizare In Interior Utilizand Tehnici Avansate de Masurare
REZUMATUL PROIECTULUI
Această aplicație de tip client – server, a fost dezvoltată cu scopul de a scoate în evidență o modalitate specială prin care se poate determina un perimetru de dimensiuni relativ mici/medii (o singură încăpere), sau al unui perimetru de dimensiuni relativ mari (o hală industrială).
Pe scurt, printr-un server ce implementează protocolul de transmitere a datelor HTTP se primesc coordonatele calculate în prealabil de către un dispozitiv mobil (cu sistem de operare Android, iOS, Windows Phone, etc. ce are instalat o aplicație software ce are rolul de client) și se stochează într-o bază de date de unde pot fi procesate în timp real cu scopul de a se afișa în mod corespunzător un perimetru oarecare printr-o aplicație Java.
Avantajele acestei abordări sunt următoarele:
Coordonatele și cotele perimetrului respectiv sunt mai precise datorită modalității de detectare, anume prin intermediul unor senzori care comunică cu clientul mobil prin tehnologia Bluetooth
Datorită stocării coordonatelor într-o bază de date se poate determina și afișa perimetrul pe un server, având astfel fiecare perimetru la o apăsare de mouse
Ușurința cu care poate fi utilizată de către un utilizator nu foarte experimentat
Termenii cheie: aplicație client – server, determinare perimetru, server, client mobil, senzori, Bluetooth, protocol de transmitere a datelor, bază de date, procesare în timp real, Java
MULȚUMIRI
În această secțiune opțională (în eng., Acknowledgements), autorul are ocazia de a face o declarație de recunoștință față de oricine (conducătorul științific/alte persoane apropiate autorului/instituții/organizații/et caetera) a susținut sau a contribuit la realizarea lucrării sale.
PROLOG
CUPRINSUL
LISTA FIGURILOR
Figura 1. Mașina virtuală Java (JVM) 2
Figura 2. Distribuții UNIX/Linux 8
Figura 3. Virtualizarea serverelor 10
Figura 4. Arhitectura client – server 11
Figura 5. Driver JDBC 16
Figura 6. Resurse mașină virtuală 21
Figura 7. Interfața Ethernet 22
Figura 8. Configurare firewall 24
Figura 9. Port forwarding 25
Figura 10. Descărcare JDK 7 26
Figura 11. Instalare JDK 7 27
Figura 12. Descărcare Apache Tomcat 7 28
Figura 13. Dezarhivare Apache Tomcat 7 29
Figura 14. Site server Apache 32
LISTA TABELELOR
Tabelul 1. Nume de utilizatori și valorile rezumat ale parolelor acestora Error! Bookmark not defined.
Introducere
Scopul
Scopul principal al acestui proiect este acela de a dezvolta o aplicație care să poată fi de un folos real în domeniul arhitecturii, făcând cartografierea unei clădiri să fie mult mai la îndemână chiar și pentru cei mai puțini experimentați în domeniu.
Motivația
Realizarea unei aplicații software în orice limbaj de programare este foarte solicitantă dar și foarte satisfăcătoare, oferind posibilitatea oricărui individ de a-și exprima creativitatea într-un mod pozitiv, ajutându-l să-și dezvolte gândirea și cunoștințele în domeniul IT, al ingineriei și nu numai.
INFORMAțII GENERALE
Limbajul de programare Java
Datorită mai multor factori, printre care dificultatea cu care se porta o aplicație software scrisă într-un limbaj de programare oarecare (Python, C/C++, etc.) de pe un sistem de operare pe altul, specialiștii în domeniu au venit cu ideea dezvoltării unui limbaj de programare care să fie folosit cu ușurință, moștenind o bună parte din limbajul deja consacrat la acea vreme: C++, dar renunțând la unele caracteristici care erau mai greu de digerat de către publicul larg, cum ar fi moștenirea multiplă, noțiunea de pointer fiind de asemenea eliminată. Acest limbaj a fost cunoscut ulterior de publicul larg sub denumirea de „Java”, deși inițial îi se stabilise denumirea „Oak”.
Java este un limbaj de programare orientat obiect care oferă pe lângă ușurința de utilizare a sa și posibilitatea portării aplicațiilor software dezvoltate de pe un sistem de operare pe un alt sistem de operare. Exemplu: o aplicație software care a fost dezvoltată cu limbajul de programare Java în sistemul de operare Windows, poate să ruleze fără nicio constrângere într-un sistem de operare UNIX. Această facilitate este oferită de către mașina virtuală Java (JVM – Java Virtual Machine), care ea execută programele scrise în Java fiind un intermediar între sistemul de operare și codul scris în Java, putând astfel rula orice aplicație scrisă în Java pe orice sistem de operare care are o mașină virtuală Java instalată.
Figura 1. Mașina virtuală Java (JVM)
Concepte specifice programării orientate pe obiect implementate de limbajul de programare Java:
Încapsulare
Moștenire
Polimorfism
Abstractizare
Încapsularea presupune împachetarea datelor și metodelor/funcțiilor într-o singură componentă, în cazul limbajului de programare Java, într-o clasă.
Avantajele încapsulării:
Selectarea proprietățiilor și metodelor care dorim să nu fie vizibile în afara clasei sau în afara pachetului din care face parte clasa respectivă
Structurarea și optimizarea codului
Exemplu de clasă scrisă în Java:
public class ClassExample {
private String string = "Sir de caractere privat"; // obiect de tip String vizibil doar in interiorul clasei
public int a = 9; // variabila de tip int (numar intreg) vizibila tuturor claselor
protected double b = 9.99; // variabila de tip double (numar real) vizibila doar in interiorul pachetului
private String metodaA () {
/*
* ––––––––––––––––––
* Aceasta metoda este vizibila doar in interiorul clasei
* ––––––––––––––––––
*/
return string;
}
public int metodaB () {
/*
* ––––––––––––––––––
* Aceasta metoda este vizibila in toate clasele
* ––––––––––––––––––
*/
return a;
}
protected double metodaC () {
/*
* ––––––––––––––––––
* Aceasta metoda este vizibila doar in interiorul pachetului
* ––––––––––––––––––
*/
return b;
}
} // sfarsitul clasei
Din câte se poate observa o clasă definește defapt un tip de date al unui obiect, încapsulând toate proprietățiile sale (date plus metode).
În cazul exemplului de mai sus vom putea crea un obiect de tip ClassExample în care sunt încapsulate următoarele proprietăți:
Obiectul „string” de tip String care reprezintă un șir de caractere și care este vizibil doar în interiorul clasei ClassExample
Variabila „a” de tip int care reprezintă un număr întreg și care este vizibil pentru toate clasele din proiect
Variabila „b” de tip double care reprezintă un număr real cu precizie dublă și care este vizibil doar în interiorul pachetului (package) din care face parte
Metoda „metodaA” care întotdeauna va întoarce un obiect de tip String și care poate fi apelată doar din interiorul clasei ClassExample
Metoda „metodaB” care întotdeauna va întoarce o variabilă de tip int și care poate fi apelată de către toate clasele din proiect
Metoda „metodaC” care întotdeauna va întoarce o variabilă de tip double și care poate fi apelată doar de către clasele care se află în același pachet din care face parte
Conceptul de moștenire a fost introdus în Java deoarece, nu s-a dorit duplicarea codului din motive ce țin de optimizarea codului, a performanțelor și nu în ultimul rând al structurării lui.
Moștenirea a oferit posibilitatea refolosirii codului scris într-o clasă, fără a-l duplica și pur și simplu moștenind acea clasă.
Exemplu de moștenire: Delfinul are anumite caracteristici pe care îl încadrează în categoria de mamifer. Asta înseamnă că clasa Delfin, pe lângă caracteristicile sale specifice (date plus metode), moștenește clasa Mamifer folosindu-se astfel de datele și metodele sale evitându-se astfel nevoia de a duplica toate proprietățile din clasa Mamifer în clasa Delfin.
Cu alte cuvinte clasa Delfin este copilul (cel care moștenește), iar clasa Mamifer este părintele (cel moștenit).
O clasă poate moștenii o singură clasă, în timp ce numărul de interfețe moștenite nu este limitat la o valoare.
Polimorfismul este un concept care a fost introdus în Java datorită posibilității de a procesa informațiile în funcție de mai multe criterii.
Un obiect poate avea ca proprietate o metodă cu o anumită semnătură (tip de dată întors și număr de parametrii acceptați ca și argumente și tipul lor), iar la un moment dat să dorim să creăm o metodă care să poarte același nume dar să aibă implementată o altă logică. Dacă nu ar fi fost pentru conceptul de polimorfism, ar fi trebuit să modificăm metoda inițială și să o adaptăm noilor cerințe sau pur și simplu denumind altfel metoda nouă. Astfel, folosindu-ne de polimorfism putem duplica metoda existentă, lăsând-o exact așa cum era pe cea inițială, și schimbând logica celei duplicate cu condiția să difere semnătura (cel puțin un parametru să fie diferit) de cea inițială.
Exemplu de implementare al conceptului de polimorfism în Java:
public class Math {
public int adunare (int a) {
return a + 10; // se adauga 10 la valoarea ce se afla in parametrul a
}
public int adunare (int a, int b) {
return a + b; // se aduna cei doi parametrii
}
public double adunare (double c) {
return c + 9.99; // se adauga 9.99 la valoarea ce se afla in parametrul a
}
} // sfarsitul clasei
Pentru prima metodă cu numele „adunare” din clasa Math s-a dorit adunarea valorii din parametrul „a” de tip int cu 10 și întoarcerea rezultatului.
Pentru a doua metodă cu același nume din clasa Math s-a dorit adunarea celor doi parametrii de tip int „a”, respectiv „b” și întoarcerea rezultatului. Acest lucru a fost posibil datorită faptului că semnătura a diferit prin numărul de parametrii prezenți între prima și a doua metodă.
Pentru a treia metodă cu același nume ca și precedentele două metode din clasa Math s-a dorit adunarea valorii din parametrul „c” de tip double cu 9.99 și întoarcerea rezultatului. Acest lucru a fost posibil datorită faptului că semnătura a diferit prin tipul parametrului din prima (tip int) și ultima (tip double) metodă, chiar dacă aveau același număr de parametrii, în timp ce diferența dintre a doua și ultima metodă a constat atât prin numărul de parametrii acceptați cât și prin tipul lor.
Tipul de polimorfism dat exemplu mai sus poartă numele de supraîncărcare metodelor (overloading), în timp ce mai există un tip de polimorfism și anume suprascrierea metodelor (overriding). În timp ce supraîncărcarea metodelor presupune definirea mai multor metode cu același nume dar cu semnătură diferită, suprascrierea metodelor presupune implementarea de funcționalitate nouă unei metode deja existente în clasa moștenită, păstrându-i numele, dar și semnătura.
Trebuie specificat faptul că vizibilitatea metodei suprascrise în clasa moștenitoare trebuie să fie de același grad cu cel al metodei care este suprascrisă din clasa moștenită sau mai mare, unde modificatorul de acces „public” reprezintă gradul cel mai mare, iar modificatorul de acces „privat” reprezintă gradul cel mai mic. Deci, spre exemplu, o metodă nu poate fi suprascrisă dacă are modificatorul de acces „public” decât dacă metoda de o suprascrie are același modificator de acces, anume „public”, modificatorul de acces „private”, „protected” sau modificatorul de acces implicit (fără a fi prezent vreun modificator) nefiind acceptate deoarece referința către metoda suprascrisă nu poate fi garantată în anumite circumstanțe, mai ales dacă fac parte din pachete diferite.
Abstractizarea este conceptul opus încapsulării, care permite declararea de metode dar nu și implementarea lor în aceași clasă. Clasa care conține una sau mai multe metode abstracte poartă numele de clasă abstractă sau generică, iar metodele abstracte din interiorul lor au rolul de a fi moștenite și implicit implementate cu logica dorită în clasa care le moștenește.
O clasă abstractă, deși conține una sau mai multe metode abstracte, poate avea metode ce sunt și implementate. O clasă ce conține numai metode abstracte este defapt o interfață, care spre deosebire de o clasă normală poate moștenii mai multe interfețe, iar o clasă normală (abstractă nu), poate de asemenea moștenii mai multe interfețe dar poate moștenii o singură clasă, lucru explicat și la conceptul de moștenire. De reținut că interfețele nu pot moștenii alte clase (fiind total abstracte, nu își are rostul).
Exemplu de interfeță și clasă abstractă:
public interface InterfaceExample {
void metodaA (int a);
public void metodaB (int a, int b);
} // sfarsitul interfetei
public abstract class AbstractClassExample {
public abstract void metodaA (int a);
public void metodaB (int a, int b) {
/*
* Implementare
*/
}
} // sfarsitul clasei abstracte
Se poate observa în cazul interfeței InterfaceExample că cele două metode diferă prin modificatorii de acces, în cazul primei metode modificatorul de acces fiind cel implicit, iar în cazul metodei a doua modificatorul de acces este explicit, „public”. În cazul în care se schimba modificatorul de acces la una dintre metode în „private” sau „protected” întâlneam niște erori pe motiv că s-ar fi încălcat principiul pentru care a fost creată o interfață, anume pentru a fi moștenită de alte clase, iar modificatorii de acces „private” și „protected” împiedică să se întâmple acest lucru.
În cazul clasei abstracte AbstractClassExample de sub interfață, trebuie evidențiată metoda ce conține și implementarea, nu doar declararea sa. Fiind prezentă o metodă abstractă, clasa devine și ea abstractă, având în dreptul ei cuvântul cheie „abstract”. O interfață nu trebuie să conțină cuvântul cheie „abstract” în dreptul ei deoarece, implicit ea este o clasă total abstractizată.
Sistemul de operare Linux
Mai mult ca sigur toată lumea a auzit de Windows, cel mai celebru sistem de operare cu cele mai bune cifre la nivel mondial produs de către Microsoft, companie deținută de Bill Gates, dar să fie oare într-adevăr și cel mai bun ca și performanță? Mulți programatori și administratori de sisteme din domeniul IT ar zice că nu, dar care ar fi varianta propusă de ei? Probabil Mac OS, CentOS, Ubuntu, Solaris, etc. Ei bine, toate sistemele de operare enumerate mai sus au un lucru în comun și anume că toate sunt bazate pe platforma UNIX.
Practic, sistemul de operare Mac OS dezvoltat de către firma Apple, care are un succes pe piață aproape lafel de mare (sau chiar mai mare) ca și Windows, este înrudit cu mai puțin cunoscutul sistem de operare CentOS din distribuția GNU/Linux. Sau pur și simplu Linux.
În lumea IT-ului distribuțiile Linux sunt foarte răspândite, ele aducând un plus de securitate (niciun virus nu le poate afecta, în timp ce Windows poate fi afectat cu ușurință de către un virus „Trojan”), permițând ajustarea securității după bunul plac și deci fiind un tovarăș de nădejde pentru orice administrator de sistem și de rețea care are sub supraveghere mai multe servere.
Alte avantaje majore ale sistemelor de operare din distribuția Linux sunt următoarele:
Sunt open-source (gratis), toate lumea putând contribuii la îmbunătățirea lor
Fiabilitate foarte bună
Performanțe foarte bune
Figura 2. Distribuții UNIX/Linux
Sufeltul sistemelor de operare GNU/Linux este nucleul său monolitic, numit și kernel, care gestionează toată activitatea desfășurată în el. Nucleul monolitic se deosebește de alte nuclee, cum ar fi micronucleul, prin faptul că este capabil să compileze toate driverele necesare rulării într-un singur program care se încarcă în memorie în momentul utilizării lui și poate fi șters din memorie în orice moment, eliberând astfel resursele care le consuma. Evitându-se astfel nevoia de a restarta sistemul de operare.
Printre alte avantaje oferite de către nucleu monolitic (kernel) pot fi enumerate:
Optimizarea codului
Multitasking
Management mai bun al resurselor
Management en-detail a rețelei
Un sistem Linux cuprinde pe lângă nucleu și următoarele:
Librării (de dezvoltare și de sistem)
Software pentru configurare
Server grafic (interfața grafică)
Aplicații și programe utilitare
Navigatoare
Software pentru prelucrarea grafică etc.
Instalarea diverselor programe noi se poate face în Linux în două modalități: compilarea directă a lor, sau prin intermediul unor pachete.
A doua metodă este mai eficientă datorită managerelor de pachete care caută pe Internet toate pachetele de lipsesc și de care este nevoie pentru a se face instalarea corespunzătoare al software-ului dorit. Astfel, suntem scutiți de efortul și de timpul pierdut care ni le-ar fi cauzat căutarea și găsirea manuală a tuturor pachetelor necesare. Acest lucru este cu atât mai îmbucurător cu cât software-ul de dorim să îl instalăm este mai diversificat și singurul „efort” pe care trebuie să îl depunem în cazul acesta este executarea unei comenzi în terminal care să facă toată munca pentru noi. Bineînțeles, comanda introdusă de noi fiind obligatoriu corectă și conținând programul software de dorim să îl instalăm, împreună cu versiunea dorită.
Virtualizarea serverelor
Virtualizarea serverelor, așa cum sugerează și numele, reprezintă crearea unui server virtual pe un calculator (server) fizic ce poartă numele de „host”.
Întrebările „Când se impune virtualizarea unui server? De ce nu aș cumpăra un server fizic care îmi garantează performanța necesară?”, sunt întrebări foarte des puse de către cei care nu știu foarte bine cum funcționează un server sau nu înțeleg pe deplin rolul său.
Un server are rolul de a asigura unul sau mai multe servicii unui client sau mai multor clienți. Motorul de căutare „Google”, dezvoltat și deținut de către compania Google este un serviciu web ce este asigurat de către un server (defapt mai multe servere) fizic pentru noi, clienții (navigatorul web pe care îl utilizăm este clientul). Ce impact credeți că ar avea asupra performanței sale dacă motorul de căutare s-ar afla pe un server virtual?
Deși virtualizarea de servere a avut un impact fără îndoială pozitiv din punct de vedere economic și administrativ, din perspectiva performanței părerile sunt împărțite, chiar dacă au fost înregistrate cifre favorabile virtualizării în foarte multe cazuri.
Performanțele software-ului de rulează pe server diferă în primul rând în funcție de componentele hardware ale sale, iar în cazul exemplului dat mai sus, unde baza de date este foarte mare, automat memoria fizică ROM și memoria RAM trebuie să fiu la rândul lor foarte mari, procesorul (CPU) performant, etc. În cazul acesta nu se mai pune problema de server virtualizat sau server fizic, fiind foarte clară necesitatea a mai multor servere fizice legate în rețea pentru a ne putea oferi serviciul de căutare pe Internet „Google” nouă, utilizatorilor. Un server virtual se impune a nu fii foarte costisitor din punct de vedere hardware, deoarece pe serverul fizic se pot afla mai multe servere virtuale, care la rândul lor consumă resurse.
Figura 3. Virtualizarea serverelor
Folosirea mașinilor virtualizate, așa cum am spus și mai sus, nu prezintă niciun dezavantaj față de folosirea unor mașini fizice, ele fiind chiar recomandate în cazul unei situații financiare mai precare care nu permite achiziționarea a mai multor servere fizice.
Arhitectura client – server
Arhitectura client – server impune minimal un client și un server (foarte logic nu?) sau mai mulți clienți și un server. Clientul poate fi un dispozitiv mobil, o tabletă, un calculator, un alt server, etc. și are rolul de a comunica cu un server pentru a-i transmite diverse informații sau de a obține informații. Serverul este cel care primește și procesează toate informațiile venite din partea clientului și care îi oferă un răspuns pe baza lor, sau pur și simplu stochează acele informații într-o bază de date sau fișier (numit log) pentru a putea fi analizate mai târziu.
Pentru o înțelegere mai profundă a celor relatate mai sus, gândiți-vă la următoarea întrebare: ce se întâmplă defapt atunci când folosim motorul de căutare „Google”?
Răspuns: informația pe care dorim s-o aflăm este transmisă către un server fizic ce se află la zeci, sute, mii de kilometrii distanță, care caută în baza sa de date informația cerută și ne-o trimite în momentul în care a găsit-o. În situația aceasta, calculatorul nostru (adică noi) care cere o informație este clientul, iar unul din serverele companiei Google este cel care ne-a oferit respectiva informație. Noi clienți (calculatorul nostru), Google server (unul din servere). Simplu, nu?
Figura 4. Arhitectura client – server
Informațiile de mai sus prezintă arhitectura client – server realizată fizic, unde comunicarea și transmiterea de informații se face între două dispozitive hardware diferite cum ar fi între două calculatoare, între mobil și calculator, etc. dar mai există și conceptul de arhitectură client – server la nivel de software. În cazul acesta clientul și serverul sunt două programe software, care lafel ca și în cazul arhitecturii fizice, au rolul de a comunica și de a face schimb de informații.
Exemplu: legătura dintre o aplicație Java care vrea să introducă sau să obțină informații într-o/dintr-o bază de date care la rândul ei este gestionată de către un server MySQL, MariaDB, Oracle, etc. În cazul acesta aplicația Java, care poate fi un Servelt, o aplicație desktop, etc. este clientul, oferind informația pe care dorește să o introducă în baza de date sau să o obțină din baza de date, în timp ce pe post de server este MySQL, sau oricare alt server de gestionare a bazei de date.
Tehnologii folosite
Apache Tomcat 7
Apache Tomcat este un server web HTTP care oferă posibilitatea dezvoltării de aplicații web complexe.
Datorită faptului că este scris în limbajul de programare Java are avantajul că poate să ruleze fără niciun fel de probleme pe orice sistem de operare (cross-platform). A fost dezvoltat de către compania care a creat și Java, anume Sun Microsystem, care apoi l-a donat Fundației Software Apache, fiind astfel open-source (gratuit), ceea ce l-a făcut foarte popular în rândul amatorilor de programare web. Bineînțeles, performanțele sale nu sunt deloc de neglijat.
Apache Tomcat e pe post de container pentru aplicațiile web dezvoltate în Java, numite și servleturi. Este foarte rapid, nu ocupă spațiu mare, fiind foarte bine optimizat din punct de vedere al performanței și al resurselor pe care le consumă.
Un alt avantaj bine știut de către cei care dezvoltă aplicații web cu ajutorul acestui server Apache este securitatea oferită, fiind un punct foarte important în aplicațiile web și nu numai, putând cauza multe probleme, inclusiv aducerea de prejudicii financiare în cazul companiilor de îl au integrat în produsele lor software.
Componente integrate în Apache Tomcat:
Catalina – container de servleturi
Coyote – conector HTTP
Jasper – JavaServer Pages (JSP) Engine
Cluster
High availability (HA)
Web Application
Componenta „Cluster” a fost adăugată pentru gestiunea aplicațiilor de dimensiuni mari, oferind posibilitatea utilizării conceptului de load balancing. În mare, load balancing înseamnă distribuirea traficului în mod egal între două sau mai multe servere pentru a nu fi solicitat un singur server, evitând astfel riscul de a se bloca.
High Availability oferă posibilitatea de a muta traficul în timp real de pe un server master pe un server slave care este o replică a serverului master. Această facilitate oferită de Apache Tomcat este aproape indispensabilă în ziua de astăzi, reușind să ne ofere serviciile dorite chiar dacă un server s-a blocat sau nu a mai funcționat corespunzător.
Componenta Web Application este în mare responsabilă pentru gestionarea sesiunilor generate de aplicație.
Componentele enumerate mai sus nu sunt singurele componente valabile pentru Apache Tomcat, dar sunt cele mai importante, altele putând fi descărcate și integrate.
Apache Tomcat versiunea 7 implementează următoarele librării Java: Servlet 3.0, JavaServer Pages 2.2, Java Expression Language și WebSocket.
Java Enterprise Edition 7
Platforma Java Enterprise Edition (Java EE) sau platforma Java 2 Enterprise Edition (J2EE), cum era cunoscută până la lansarea versiunii 5 din în anul 2006, este așa cum îi sugerează și numele o platformă de dezvoltare Java, punând la dispoziție o multitudine de librării (API-uri), împreună cu toate componentele necesare pentru dezvoltarea de aplicații web, aplicații mobile, aplicații desktop, etc. prin intermediul limbajului de programare, bineînțeles, Java.
Versiunea Java Enterprise Edition, pe lângă librăriile sale specifice, moștenește și librăriile din platforma Java Standard Edition (Java SE), reușind astfel să-și păstreze toate caracteristicile dezvoltării Java. Cea mai importantă caracteristică este programarea orientat obiect, caracteristică ce o are și limbajul de programare C++.
Platforma Java a fost dezvoltată de compania Sun Microsystem, care ulterior a fost preluată de către o altă companie bine cunoscută în domeniul IT și al ingineriei, anume Oracle.
Ediția Enterprise aduce îmbunătățiri semnificative față de ediția Standard, librăriile sale pe care ediția Standard nu le conține fiind special concepute cu scopul de a dezvolta aplicații într-un mediu profesional, cum ar fi în cadrul unei companii în care se impune un anumit nivel de securitate pentru proiectele dezvoltate în cadrul lor, securitate ce este consistent îmbunătățită în ediția Enterprise.
Pentru a se face deosebire dintre librăriile de pe platforma Java Standard Edition și cele de pe platforma Java Enterprise Edition, pachetele încep cu nume diferite. Pentru ediția Standard un pachet începe cu numele „java”, în timp ce un pachet din ediția Enterprise începe cu numele „javax”.
Alte beneficii oferite de această platformă sunt:
Scalabilitatea
Portabilitatea
Performanța
Standardizarea
Interoperabilitatea
Tehnologii specifice acestei platforme:
JavaServer Pages (JSP)
JavaServer Faces (JSF)
Enterprise Java Beans (EJB)
Java Naming and Directory Interface (JNDI)
Servlet
Un exemplu de aplicație dezvoltată cu ajutorul platformei Java Enterprise Edition care poate fi de folos în cadrul unei companii de dezvoltare software este o aplicație de tip Servlet, care să gestioneze conexiunile ce vin prin intermediul protocolului HTTP, sustrăgând informația necesară urmând a o analiza și procesa pentru a întoarce un răspuns tot prin intermediul unei conexiuni HTTP. În acest exemplu se putea utiliza de asemenea și o bază de date care să cuprindă mai multe informații cerute de către client, platforma Java fiind compatibilă cu cele mai importante servere de bază de date, printre care MySQL, MariaDB, Oracle, etc. Acesta este un exemplu de aplicație de tip client – server.
Tipuri de aplicații ce se pot dezvolta cu ajutorul platformei Java Enterprise Edition:
Independente (stand-alone)
Client – server (2 tier)
Client – middleware – server (3 tier)
Multi client – multi server (multi tier)
Pentru a dezvolta o aplicație care să se poată conecta la una sau mai multe baze de date, cu ajutorul platformei Java, este nevoie de utilizarea unui conector special, denumit JDBC (Java Database Connector).
MySQL
MySQL este un server/sistem de gestiune a bazelor de date, prescurtat SGBD. Este unul dintre cele mai folosite sisteme de gestiune a bazelor de date din lume, fiind la ora actuală open-source (gratis).
MySQL oferă posibilitatea comunicării diverselor limbaje de programare cu o bază de date printr-un conector specific fiecărui limbaj. Pentru a se stabilii, de exemplu, o conexiune prin care să se transmită informații între baza de date, care este gestionată de serverul MySQL, și o platformă de dezvoltare a aplicațiilor Java este nevoie de conectorul JDBC (Java Database Connector), specific limbajului de programare Java.
Exemplu de imbaje compatibile cu SGBD MySQL:
Java
C/C++
C#
PHP
Perl
Pentru ca un utilizator să aibă acces direct la baza sau bazele de date gestionat de către MySQL, cu scopul de a analiza informația/baza de date sau de a o modifica (administrarea bazei de date), trebuie să se autentifice prin linia de comandă sau se poate folosi de o interfață grafică care oferă posibilitatea de administra respectiva bază de date într-un mod interactiv și sugestiv utilizatorului. Cea mai populară interfață grafică este phpMyAdmin, fiind dezvoltată cu ajutorul limbajului de programare PHP, după cum sugerează și numele.
MySQL oferă foarte multe avantaje administrării bazelor de date gestionate de el, un avantaj foarte important din punct de vedere al securității datelor fiind stabilirea de drepturi per utilizator. Asta înseamnă ca putem restricționa accesul la bazele noastre de date, ceea ce este foarte util în situația în care baza de date se află pe un server public, sau să limităm dreptul unui singur sau mai multor utilizatori de a accesa una sau mai multe baze de date. Pe lângă drepturile de acces putem modifica și drepturile de scriere. Să zicem că vrem ca anumiți utilizatori să doar analizeze informația fără a le permite să o altereze în vreun fel. Acest lucru se face restricționând dreptul de scriere a utilizatorilor repectivi pentru bazele de date dorite, lăsându-i posibilitatea doar de a vedea informația.
El este disponibil pentru mai multe sisteme de operare, printre care și Windows, GNU/Linux, Mac OS, etc. fiind o parte foarte importantă în platformele LAMP (Linux, Apache, MySQL, PHP) și WAMP (Windows, Apache, MySQL, PHP).
Deși este open-source, licența GNU GPL, care este aplicată în cazul MySQL, interzice integrarea sa în softuri ce au scopul de a fi comercializate dacă nu a fost achiziționată în prealabil și o licență comercială.
În momentul de față compania responsabilă cu dezvoltarea SGBD MySQL este Oracle, dar autorii inițiali al proiectului au fost cei de la MySQL AB, celor din urmă revenind și veniturile din achiziționarea de licențe comerciale.
JDBC
Pentru a fi posibilă conectivitatea la o bază de date dintr-un program scris într-un limbaj de programare oarecare este nevoie de utilizarea unui driver. Un exemplu de un asemenea driver este JDBC (Java Database Connector), care prin intermediul lui se poate obține o conexiune o la bază de date, ce este gestionată să zicem de SGBD MySQL, din limbajul de programare Java. Pentru a putea fi folosit driver-ul JDBC, acesta trebuie descărcat după Internet și integrat în proiectul Java.
Driver-ul JDBC poate fi privit ca și un intermediar între aplicația dezvoltată în Java și baza de date. Fiind special conceput pentru limbajul de programare Java, driver-ul JDBC poate stabilii conexiuni la diverse baze de date, printre care le amintim pe cele mai importante, și anume: MySQL, Oracle, MariaDB.
Figura 5. Driver JDBC
Bineînțeles, de ce să ai nevoie de o conexiune la o bază de date dintr-o aplicație Java dacă nu poți să faci absolut nimic cu ea nu? Adică motivul pentru care dorim să stabilim o conexiune cu baza de date este acela de a comunica cu ea, de a manipula datele după bunul plac. Ei bine, acest lucru poate de asemenea fi asigurat de către acest driver prin intermediul Limbajului Structurat de Interogare SQL (Structured Query Language), limbaj special creat pentru manipularea datelor dintr-o bază de date. Limbajul SQL asigură manipularea datelor prin mai multe tipuri de interogări (Queries sau Statements), printre care interogarea cea mai des întâlnită este de forma următoare: SELECT * FROM `nume_bază_de_date`.`nume_tabel`; această interogare ne întoarce toate datele din tabela „nume_tabel” ce face parte din baza de date „nume_bază_de_date”.
Exemplu de metode scrise în Java care utilizează driver-ul JDBC pentru a stabilii și a închide o conexiune cu o bază de date oarecare de pe SGBD MySQL:
// Metoda ce stabileste conexiunea cu baza de date
public void establishConnection(){
try {
String url = "jdbc:mysql://localhost/BD";
Class.forName("com.mysql.jdbc.Driver");
myConnection = DriverManager.getConnection(url, "root", "default2013");
System.out.println("Stabilire conexiune cu succes!");
System.out.println("–––––––––––––––––-");
} catch (SQLException e) {
System.err.println("Probleme la stabilirea conexiunii cu baza de date!");
} catch (ClassNotFoundException e) {
System.err.println("Driver-ul JDBC nu a putut fi gasita!");
}
}
// Metoda ce inchide conexiunea cu baza de date
public void closeConnection(){
try{
if (!myConnection.isClosed())
myConnection.close();
System.out.println("–––––––––––––––––-");
System.out.println("Conexiunea a fost inchisa cu succes!");
} catch (SQLException e) {
System.err.println("Probleme la inchiderea conexiunii cu baza de date!");
}
}
CentOS 6
CentOS (Community Enterprise Operating System) este un sistem de operare dezvoltat de către firma RedHat, ce face parte din distribuția GNU/Linux care are la bază platforma UNIX. Versiunea 6 a adus unele schimbări majore față de ultima versiune, printre care cele mai importante sunt: tehnologii de virtualizare îmbunătățite, suport pentru sistemul de fișiere ext4, folosirea discurilor SSD, interfață grafică nouă.
Un dezavantaj pentru această versiune este acela că nu se poate face update de la versiunea 5 sau altă versiune mai veche a sistemului de operare la versiunea 6. Acest lucru nu este însă un impediment major pentru cei care știu „cu ce se mănâncă” acest sistem de operare și știindu-se avantajele pe care le oferă. Printre avantaje pot fi enumerate următoarele:
Stabilitate mare
Performanțe mari
Securitate foarte bună
Open-source
CentOS este unul dintre cele mai utilizate sisteme de operare pentru servere, indiferent că compania este relativ mică sau că este o multi națională.
Singurele platforme compatibile cu sistemul de operare CentOS sunt cele IBM-PC (Intel/AMD) pe 32 de biți și 64 de biți.
Programe software folosite
VMware Workstation
VMware Workstation este un program software dezvoltat de către firma americană VMware și este folosit pentru creare de mașini virtuale (servere virtualizate) fiind ideal pentru un calculator personal (PC).
A fost dezvoltat pentru următoarele platforme: Windows, Linux și Mac OS.
Pentru serverele speciale cu capacități hardware mult mai mari decât cele găsite la un calculator personal există de asemenea o variantă special concepută pentru ele printre care și VMware ESXi, unul dintre cel mai popular program de virtualizare.
Concurentul principal al acestui program software de virtualizare este VirtualBox, dezvoltat de către firma Oracle, dar din perspectiva ușurinței cu care se poate crea și gestiona o mașină virtuală și din perspectiva interfeței grafice cu utilizatorul (GUI) este recomandată folosirea programului dezvoltat de către cei de la VMware.
Eclipse IDE
Pentru a putea scrie cod în limbajul de programare Java într-un mod grafic este nevoie de un mediu de dezvoltare integrat (IDE), iar cel mai bun, din perspectiva mea personală, este Eclipse care este dezvoltat de către fundația Eclipse (Eclipse Foundation).
Faptul că este open-source și că asigură dezvoltarea de aplicații software în mai multe limbaje de programare l-a făcut unul dintre cele mai populare medii de dezvoltare integrate.
În principiu, Eclipse oferă posibilitatea dezvoltării în limbajul Java, dar prin adăugarea de programe auxiliare (plugins) se poate extinde funcționalitatea programului, făcând posibilă dezvoltarea în limbaje precum PHP, C/C++ și multe altele.
phpMyAdmin
phpMyAdmin este un program software dezvoltat print intermediul limbajului de programare PHP, fiind utilizat împreună cu sistemul de gestiune a bazelor de date MySQL. În timp ce MySQL se ocupă de gestionarea bazelor de date și oferă posibilitatea accesării lor prin linia de comandă, phpMyAdmin oferă posibilitatea de a interacționa cu MySQL la nivel de baze de date printr-o interfață grafică foarte prietenoasă și în același timp foarte sugestivă.
phpMyAdmin poate fi instalat atât pe platforme GNU/Linux, cât și pe platforme Windows, fiind foarte popular în rândul administratorilor de sistem și programatorilor.
Flexibilitatea programului phpMyAdmin este indiscutabilă, oferind posibilitatea utilizatorului de a interacționa cu bazele de date și tabelele din ele la nivel grafic prin simpla apăsare a unui buton, sau prin intermediul limbajului SQL.
PREGĂTIREA MEDIULUI DE LUCRU
Crearea și configurarea mașinii virtuale
Pentru acest proiect este nevoie de un mediu de lucru optim care să poată asigura atât dezvoltarea aplicației Java, cât și rularea ei. Motivul pentru care s-a optat pentru un server virtualizat pentru acest proiect este că nu avem neapărată nevoie de un server fizic, fiind și foarte scump de altfel, resursele unui calculator personal fiind îndeajuns pentru dezvoltarea și testarea aplicației. Bineînțeles că apoi creată mașina virtuală se poate face migrarea sa pe un server fizic care se ocupă de gestionarea mai multor mașini virtuale.
Pentru mașina virtuală s-a luat decizia din mai multe considerente să fie creată prin intermediul programului software VMware Workstation 11, iar configurația și resursele sale vor fi după cum urmează:
Sistem de operare: CentOS 6.2
Memorie RAM: 2 GB (2048 MB)
Memorie HDD: 30 GB
Număr de procesoare: 1
Număr nuclee per procesor: 2
Tip conexiune rețea: Bridge
Resursele pot fi schimbate în orice moment și pot fi adaptate în funcție de calculatorul/serverul pe care se află.
Motivul pentru care s-a optat pentru sistemul de operare CentOS 6.2 din distribuția GNU/Linux este acela că oferă foarte multe avantaje pentru aplicații tip server, multe dintre ele fiind enunțate în capitolele anterioare.
Împărțirea memoriei ROM:
Partiția primară /root (/sda2): 28 GB
Partiția primară /boot (/sda1): 262 MB
Partiția primară /swap (/sda3): 2 GB
Figura 6. Resurse mașină virtuală
Partiția /root este cea unde vor fi stocate toate fișierele noastre și cele de sistem, echivalentă a partiției C: din Windows.
Partiția /boot are rolul de a gestiona toate procesele ce vor fi pornite odată cu pornirea mașinii virtuale.
Partiția /swap reprezintă defapt memoria Swap, fiind o memorie virtuală care are rolul de a scrie pe sau de pe disc în momentul în care memoria RAM este prea încărcată, sau a fost încărcată și s-a mai eliberat. Fără memoria virtuală Swap, în momentul în care memoria fizică RAM ar fi prea încărcată întregul sistem s-ar bloca, fiind nevoie de resetarea serverului pentru a se elibera de toate procesele consumatoare de memorie.
Conexiunea între mașina virtuală și calculatorul/serverul pe care este găzduită este foarte importantă, în funcție de ce se vrea de la mașina virtuală putând diferii tipul de conexiune în rețea. În proiectul acesta s-a dorit ca conexiunea să fie de tip Bridge (punte), făcând astfel mașina virtuală să fie văzută în rețea și în afara rețelei, pe Internet, ca o mașină fizică care are atribuită o placă de rețea cu propria ei adresă MAC (Media Access Control).
Configurarea rețelei
Un pas important al acestui proiect constă în primirea de date de la un client mobil, date care apoi vor urma să fie scrise într-o bază de date. Pentru a primii acele date este necesar să avem rețeaua configurată în așa fel încât să permită comunicarea cu alte dispozitive din afară.
Primul pas care trebuie făcut pentru a configura rețeaua este crearea unei interfețe Ethernet. Prin această interfață Ethernet putem să atribuim un IP mașinii virtuale, pe adresa MAC generată de VMware Workstation, identificând-o unic în rețeaua locală.
Figura 7. Interfața Ethernet
IP-ul este setat manual (static) ci nu automat prin DHCP, vrând ca IP-ul să nu se schimbe în timp. Masca este pe 24 de biți, limitând astfel plaja de valori al IP-ului atribuit la o valoare ce se află în intervalul 192.168.2.0 – 192.168.2.255, ceea ce este perfect ținând cont că IP-ul este setat în cazul figurii de mai sus ca 192.168.2.100. Gateway-ul reprezintă IP-ul routerului, care este poarta de comunicare cu lumea din afara rețelei locale, iar DNS server IP este de asemenea tot al routerului.
După ce s-a creat interfața Ethernet, fișierul ifcfg-eth0 a fost creat în directoriul /etc/sysconfig/network-scripts cu următorii parametrii:
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=eth0
UUID=76697cf6-d01c-4d82-a747-fb5d56efc6c1
ONBOOT=yes
IPADDR=192.168.2.100
PREFIX=24
GATEWAY=192.168.2.92
DNS1=192.168.2.92
HWADDR=00:0C:29:59:1C:91
HWADDR reprezintă adresa MAC atribuită interfeței. Pentru fiecare interfață adăugată în plus o altă adresă MAC îi va fi atribuită și un alt fișier cu numele specific al interfeței va fi creat în directoriul mai sus menționat.
Având o conexiune de tip Bridge (punte), mașina virtuală este văzută fără niciun fel de probleme ca un server independent, dar acest lucru nu este însă suficient pentru a primii datele necesare, fiind nevoie de intervenție asupra firewall-ului. Firewall-ul este disponibil pe toate sistemele de operare, având rolul de a limita comunicarea între server și lumea externă.
Comunicarea între lumea externă, adică clientul mobil, și server se face prin intermediul portului 8080, port folosit de către serverul Apache pentru a asigura serviciile oferite de aplicația Java. Asta înseamnă că pentru a putea comunica cu clientul mobil trebuie să dăm acces pe portul 8080 tuturor plajelor de IP-uri din toate categoriile, IP-ul de pe un dispozitiv pe altul putând să difere.
Pentru a da acces pe portul 8080 folosit de serverul Apache tuturor IP-urilor trebuie să ne ducem în directoriul /etc/sysconfig/ și să modificăm fișierul iptables. Acest lucru se poate face fie din interfața grafică fie prin linia de comandă (terminal) folosind una dintre comenzile „mc” sau „vi”.
Figura 8. Configurare firewall
După cum puteți vedea în figura 8, am dat acces portului 8080, dar mașina virtuală aflându-se într-o rețea locală (LAN) înseamnă că are IP de clasa C, ceea ce înseamnă că nu poate fi accesată direct din exteriorul rețelei, fiind necesară o rutare de IP-uri pe portul 8080 (port forwarding) din router.
Figura 9. Port forwarding
Odată făcut și acest pas, mașina virtuală este în acest moment accesibilă și din exterior, comunicarea cu clientul făcându-se de altfel fără niciun fel de problemă, putând avea loc schimb de informații între cele două entități. Totuși, după cum puteți vedea tot în figura 8, am mai dat acces din firewall și portului 22. Portul 22 este folosit de procesul care asigură accesarea serverului din exterior cu scopul de a îl monitoriza, sau de a îl modifica, în cazul în care nu putem să îl accesăm în mod direct de pe mașina care îl găzduiește. Ca și în cazul portului 8080, nu este de ajuns să dăm acces doar din firewall, accesul direct către el putând fi realizat doar din interiorul rețelei locale. Acest lucru înseamnă că trebuie să mai facem o modificare în router în care să rutăm traficul care ar veni pe IP-ul mașinii virtuale pe portul 22, pe alt port.
Instalarea și configurarea pachetului de servicii Java (JDK)
Instalarea și configurarea pachetului de servicii Java se poate face în două feluri: fie prin descărcarea și dezarhivarea arhivei ce conține pachetul de servicii Java, fie prin descărcarea unui pachet de tip RPM, cu terminația .rpm, care permite instalarea și configurarea automată. Pașii ce vor fi descriși mai jos sunt specifici metodei a doua.
Pași ce trebuie urmați pentru instalarea și configurarea automată al pachetului de servicii Java:
Descărcarea pachetului de servicii Java
Instalarea pachetului
Actualizarea la zi a pachetului
Pasul 1:
Descărcarea pachetului de servicii Java 7 (JDK 7), care este cea mai stabilă versiune în momentul de față, chiar dacă nu este și cea mai nouă (JDK 8 este cea mai nouă), se poate face de pe site-ul oficial Oracle: http://docs.oracle.com/javase/7/docs/webnotes/install/linux/linux-jdk.html
Pentru a fi compatibil cu sistemul de operare trebuie descărcată versiunea pe 64 de biți în format .rpm
Figura 10. Descărcare JDK 7
Pasul 2:
Instalarea se face în mod automat rulând în terminalul mașinii virtuale comanda următoare:
rpm -ivh jdk-7u<version>-linux-x64.rpm
Rezultatul va fi următorul:
Figura 11. Instalare JDK 7
Pasul 3:
Pasul 3 constă în actualizarea pachetului de servicii Java cu ultima versiune disponibilă.
Actualizarea de-asemenea se face automat prin rularea comenzii următoare:
rpm -Uvh jdk-7u<version>-linux.x64.rpm
După urmarea tuturor pașilor de mai sus, pachetul de servicii Java este instalat și actualizat.
Instalarea și configurarea serverului Apache Tomcat 7
Pași ce trebuie îndepliniți pentru instalarea și configurarea serverului Apache Tomcat 7:
Descărcarea pachetului Apache Tomcat 7
Dezarhivarea pachetului
Mutarea pachetului
Setarea variabilelor specifice
Pornirea serverului
Testarea serverului
Pasul 1:
Pentru acest proiect avem nevoie să descărcăm ultima versiune de Apache Tomcat 7. Acesta poate fi descărcat de pe site-ul oficial Apache Tomcat: http://tomcat.apache.org/
Pentru a fi compatibil cu sistemul de operare CentOS trebuie descărcată arhiva distribuției binare cu terminația .tar.gz. Arhivele de tip .tar sunt echivalente cu cele de tip .rar, .zip, .7z de pe platforma Windows.
Figura 12. Descărcare Apache Tomcat 7
Pasul 2:
După ce descărcarea s-a terminat trebuie să dezarhivăm conținutul arhivei .tar.gz. Acest lucru se poate face cu ajutorul comenzii tar în felul următor:
tar -zxvf $PATH_TO_ARCHIVE/apache-tomcat-7.0.x
Rezultatul va fi următorul:
Figura 13. Dezarhivare Apache Tomcat 7
Pasul 3:
Odată ce s-a terminat de dezarhivat pachetul, acesta trebuie mutat într-un directoriu dedicat.
În cazul acesta, vom muta conținutul Apache din folderul /home/admin în folderul /home.
Comanda cu care poate fi îndeplinită această acțiune, cu condiția să ne aflăm deja în directoriul /home/admin, este următoarea:
mv apache-tomcat-7.0.x /home
În momentul acesta serverul Apache Tomcat ar trebui să fie instalat în directoriul /home.
Pasul 4:
După ce am terminat de instalat serverul Apache Tomcat pe mașina virtuală, acesta trebuie configurat. Pentru configurarea corespunzătoare trebuie setate următoarele variabile specifice: $JAVA_HOME, $CATALINA_HOME și $CATALINA_LOGS
Variabila $JAVA_HOME trebuie să indice către locația unde este instalat Java, și anume: /usr/java/jdk1.7.0_x
Pentru a seta variabila $JAVA_HOME trebuie rulate următoarele comenzi:
JAVA_HOME = /usr/java/jdk1.7.0_x
export JAVA_HOME
Variabila $CATALINA_HOME trebuie să indice către locația unde este instalat serverul Apache, și anume: /home/apache-tomcat-7.0.x
Pentru a seta variabila $CATALINA_HOME trebuie rulate următoarele comenzi:
CATALINA_HOME = /home/apache-tomcat-7.0.x
export CATALINA_HOME
Variabila $CATALINA_LOGS trebuie să indice către locația unde se află logurile serverului Apache, și anume: /home/apache-tomcat-7.0.x/logs
Pentru a seta variabila $CATALINA_LOGS trebuie rulate următoarele comenzi:
CATALINA_LOGS = /home/apache-tomcat-7.0.x/logs
export CATALINA_LOGS
Pasul 5:
Odată respectați pași de mai sus, serverul Apache Tomcat 7 ar trebui să fie instalat și configurat corespunzător, și ar trebui să pornească.
Pentru a îl porni trebuie să rulăm următoare comandă:
$CATALINA_HOME/bin/startup.sh
Pentru a îl opri trebuie să rulăm următoarea comandă:
$CATALINA_HOME/bin/shutdown.sh
O cale mai simplă pentru pornirea, oprirea și repornirea serverului Apache ar fi prin definirea serverului ca un serviciu ce poate fi controlat prin intermediul comenzii „service”.
Comenzi care definesc serverul ca un serviciu:
chkconfig –add tomcat
chkconfig mobicents on
Prima comandă a creat un script ce va fi rulat atunci când se apelează comanda „service tomcat argument”, unde „argument” poate să aibă valoarea de „stop”, „start”, „restart”, care exact cum și le sugerează numele opresc, pornesc sau restartează serverul Apache.
A doua comandă va porni serverul Apache în momentul când s-a pornit și mașina virtuală.
Pasul 6:
După terminarea tuturor pașilor de mai sus serverul Apache ar trebui să funcționeze corespunzător. Pentru a testa acest lucru accesați pagina serverului dintr-un navigator. Pagina este următoarea: http://localhost:8080/
Dacă accesarea paginii s-a făcut cu succes, înseamnă că serverul Apache a fost instalat și configurat corect.
Site-ul poate fi folosit pe post de ghid pentru începători, având mai multe exemple de cum poate fi utilizat, conținând de asemenea și o documentație care să vină în ajutorul înțelegerii mai profunde, tot din el putându-se și configura serverul Apache.
Figura 14. Site server Apache
Instalarea și configurarea sistemului de gestiune a bazelor de date MySQL
Concluzii
Autorul prezintă concluziile sale…
Bibliografie
Prof. Univ. dr. Ing. Nicu Bîzdoacă – „Programare în Java” notițe de curs
Prof. Univ. dr. Ing. Dorian Cojocaru – „Arhitectura calculatoarelor” notițe de curs
Prof. Univ. dr. Ing. Cosmin Ionete – „Programarea calculatoarelor și limbaje de programare” notițe de curs
Prof. Univ. dr. Ing. Emil Petre – „Programare orientată pe obiecte” notițe de curs
Prof. Univ. dr. Ing. Viorel Stoian – „Baze de date” notițe de curs
Referințe web
http://thenuzan.blogspot.ro/2014/09/jdk-jre-and-jvm.html
http://ro.wikipedia.org/wiki/Linux
http://ro.wikipedia.org/wiki/UNIX
http://www.virtualizare.ro/-Page-/virtualizarea/Default.aspx
http://www.scrigroup.com/calculatoare/SISTEME-INFORMATICE-CLIENT-SER94364.php
http://en.wikipedia.org/wiki/Apache_Tomcat
https://www.mulesoft.com/tcat/understanding-apache-tomcat
http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition
http://ro.wikipedia.org/wiki/Programare_orientat%C4%83_pe_obiecte
http://ro.wikipedia.org/wiki/MySQL
http://ro.wikipedia.org/wiki/Baz%C4%83_de_date_distribuit%C4%83
https://en.wikipedia.org/wiki/Java_Database_Connectivity
http://ro.wikipedia.org/wiki/SQL
http://ittrends.ro/2011/07/centos-al-6-lea-linux-pentru-servere-grele-2/
http://tomcat.apache.org/tomcat-7.0-doc/
http://docs.oracle.com/javase/7/docs/webnotes/install/linux/linux-jdk.html
Codul sursă
În această anexă se adaugă codul sursă al aplicației…
Site-ul web al proiectului
Autorul prezintă în această anexă (opțională) site-ul web asociat proiectului său.
CD / DVD
Autorul atașează în această anexă obligatorie, versiunea electronică a aplicației, a acestei lucrări, precum și prezentarea finală a tezei.
Index
B
Bibliografie 9
C
CUPRINSUL xi
D
Dimensiuni 3
F
Figuri 4
Formulele matematice 4
I
Ilustrațiile 4
L
Legenda 6
LISTA FIGURILOR xii
LISTA TABELELOR xiii
R
Referințe web 10
S
Structura documentului 2
T
Tabele 5
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Localizare In Interior Utilizand Tehnici Avansate de Masurare (ID: 162697)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
