1. Mediul Java pentru Internet 1.1. Descrierea succintã a mediului 1.1.1.Ce este Java? Java este un limbaj de programare orientat obiect, asemãnator cu C++, dar cu un alt conţinut important ceea ce il face un instrument foarte robust pentru dezvoltarea de aplicaţii WWW. Menirea limbajului Java este de a fi un standard pentru transferul de conţinut executabil pe Internet prin WWW. Datorită limbajului Java se schimbă natură pasivă a reţelei Internet, deoarece un program binar portabil generat de compilatorul Java, poate fi încarcat şi executat în mod interpretativ pe orice calculator legat la Internet. Proiectarea orientată pe obiecte este un instrument puternic, deoarece facilitează definirea clară a interfeţelor şi permite reutilizarea unor module de program identificate ca şi obiecte. Fiind conceput ca un limbaj obiectual, tot ce există într-un program este incapsulat în obiecte, care în Java poartă denumirea de clase, limbajul permiţâd moştenirea şi extinderea unei clase şi reutilizarea oricărui program sau modul în alte programe. O clasa Java este o colecţie de variabile şi de metode, care încapsulează o anumită funcţionalitate, într-un obiect reutilizabil şi încărcabil în mod dinamic. Mediul Java încarcã în mod dinamic clasele, ceea ce înseamnă ca un program Java care se execută poate adăuga funcţionalităţi noi în mod dinamic, prin încãrcarea claselor necesare la un moment dat. Portabilitatea programelor este un deziderat major, care nu se poate realiza numai printr-o execuţie interpretativa şi în acest sens în mediul Java pentru Internet un program sursă este compilat mai intâi în cod binar portabil (codul binar), care este apoi adaptat cerinţelor codului nativ al calculatorului pe care se execută. Aceast mecanism este o maşină Java virtuală (JVM), care la rândul ei este implementată pe orice calculator ca şi interpretorul Java. Portabilitatea este asigurată şi prin standardizarea tipurilor fundamentale.[LEMA-96] Robusteţea mediului permite scrierea unor programe suple şi puternice, care funcţionează corect astfel încât totul se decide dinamic, în timpul execuţiei, pentru a evita conflicte. Gestiunea memoriei se realizează automat, nu prin instrucţiuni scrise în programul sursă ci printr-un sistem complex implementat astfel încât să gestioneze clasele şi obiectele utilizate, interfeţele necesare şi să elibereze în mod dinamic spaţiul de memorie neutilizat. Avand în vedere ca mediul Java este un mediu de programare şi utilizare distribuit pe Internet, care este implementat pe principiile tehnologiei Corba, se impun metode de protecţie atât pentru sistemele clienţilor, cât şi pentru servere. Java permite crearea unor sisteme protejate, realizate prin:[An-97] Eliminarea pointerilor ca punctele slabe ale securităţii sistemelor împreună cu aritmetica pointerilor, recunoscută ca o cauză importantă ce determină distrugeri accidentale ale sistemelor. Gestiunea automată a memoriei prin alocarea spaţiului la crearea un obiect şi urmărirea pe parcursul execuţiei appletului până în momentul în care acesta nu mai este referit, caz în care memoria este dezalocată automat. In opoziţie, gestiunea memoriei in C şi C++ este realizată explicit de programatori cu ajutorul instrucţiunilor malloc şi free, precum şi cu alte funcţii standard de gestiune a memoriei.
1
Alocarea dinamicã a memoriei este realizată automat în timpul execuţiei pentru clasele create, eliminând alocarea statică a memoriei. Gestionarea spaţiului alocat separat pentru fiecare clasă este soluţionată de interpretorul Java care oferă spaţiu separat de variabile pentru clasele create. Verificarea codului binar înainte de execuţie de către interpretorul Java, care testeazã anumite convenţii ale limbajului şi ale mediului Java. Astfel se verifică dacă nu se va execută o acţiune daunatoare pentru sistem: violarea restrictiilor de acces, efectuarea unor conversii ilegale de date, depãşirea superioară sau inferioară a stivei, etc. Reţea, clurul cu protocoale TCP/IP (Transmission Control , UDP(User Datagram protocol), IP (Internet Protocol) Internaţionalizare prin adaptarea programelor la setări locale de limbă şi fus orar. Securitate la diverse niveluri, gestiunea cheilor publice şi private, restricţii selective de acces, control şi securitate,etc. Componente software reutilizabile -JavaBeans integrabile în arhitectura existentă. Serializare/ deserializare de obiecte, care permite persistenţa şi comunicaţia între obiecte la distanţă folosind Remote Method Invocation (RMI) Acces la baze de date relaţionale, de diverse tipuri, folosint Java Database Connectivity (JDBC) Grafică bi/tridimensională, animaţie, etc. Performanţele mediului sunt date şi de codul binar portabil rezultat în urma compilãrii, care este adaptat în timpul execuţiei la codul nativ al calculatorului real pe care se rulează aplicaţia. In anumite situaţii, compilarea este amânată pană în momentul execuţiei. Java este un sistem dinamic extensibil, care poate achizitiona fişiere din orice punct al retelei Internet. Fiind orientat pe obiecte, extensibilitatea dinamică se răsfrânge şi asupră obiectelor, caz în care un program poate achizitiona în mod dinamic, din orice punct al reţelei, clasele de care are nevoie în timpul execuţiei. In Java legarea variabilelor şi a metodelor se face tarziu (late binding), chiar în momentul execuţiei iar interpretorul este cel care rezolvă referinţele simbolice şi determină alocarea dinamică a memoriei. Regăsirea variabilelor şi a metodelor se face prin nume, nu prin adrese relative. Orice clasa poate fi modificată in orice moment, fără a fi nevoie să se recompileze toate subclasele sale. Avantajul referinţelor în momentul execuţiei este dat de posibilitatea utilizării dinamice a claselor, care se pot actualiza tot timpul. Limbajul Java a fost proiectat cu scopul de a se realiza un mijloc de transfer a conţinutului executabil, dinamic, pe Internet iar funcţiile de reţea sunt cele care trebuie implementate în mediul Java astfel încât să poată fi exploatat ca un mediu distribuit în Internet. Odată cu paradigma business object, Enterprise1 Java s-a răspândit rapid în lumea calculatoarelor desemnând acele aplicaţii Java dezvoltate pentru intranet-ul unei companii, care foloseşte tehnologii Internet ca:e-mail, ftp, telnet, news, servicii Web,etc. Facilitatea de multifir (multithreading) reprezintă posibilitatea de a incorpora mai multe fire de execuţie, performanţă ce conferă mediului atuuri suplimentare. In timpul execuţiei unui program, timpul în care acesta ocupă unitatea centrală este relativ redus faţă de restul timpului în care 1
Enterprise=întreprindere, companie, organizaţie, firmă, în IT este organizaţie care utilizează sisteme de calcul
2
programul aşteaptă intervenţia utilizatorului, sau este ocupat cu accesul la fişiere sau la reţea. In aplicaţiile cu un singur fir de aşteptare, unitatea centralã rãmâne neocupată intervale lungi de timp. In mediul Java, acest timp este ocupat imediat de alte fire de execuţie, prin care se realizează anumiţe acţiuni specifice.[Naugh-96] Deşi este un limbaj de programare destinat WWW, permite definirea de aplicaţii independente, fiind executate în mod interpretativ. Astfel se pot realiza aplicaţii pentru domenii ca: editoare de texte, foi de calcul, baze de date, proiectare asistată de calculator. Utilizarea aplicaţiilor independente în contextul unui mediu distribuit pe Internet oferă posibilitatea lansării de aplicaţii care se află pe alte calculatoare dar pentru utilizarea applet-urilor java este necesară accesarea unor site-uri Web cu browsere dotate cu interpretoare Java. Pentru programatori, limbajul Java oferă o platformă unică pentru dezvoltarea de aplicaţii - un calculator virtual, maşină virtuală Java şi aplicaţiile care se dezvoltă sau se distribuie pe reteaua Internet. Pentru utilizatori, conţinutul executabil Java asigură integrarea perfectă a datelor cu funcţiile şi interactiunile programelor, precum şi cu lucrul în retea, fără a fi sunt necesare aplicaţii ajutatoare (helper applications) sau fişiere ajutătoare pentru diferite tipuri de protocoale, deoarece Java permite încapsularea datelor şi a metodelor în clase. 1.1.2. Avantajele programãrii în Java Appleturile Java (sau programele interactive) permit abordarea de la nivelul superficial - imagini animate, text în mişcare, etc- la nivelul substanţial - educaţie interactivă continuă, aplicaţii orientate în afaceri. etc. Java este proiectat ca limbaj cross-platform, ceea ce înseamnă că poate rula pe orice maşină, folosind orice sistem de operare. Codul sursă Java este compilat în instrucţiuni pentru o maşină virtuală (un cip imaginar în exenţă simulat soft) iar aceste instrucţiuni sunt interpretate de interpreterul Java, ce translatează codul binar în instrucţiuni în limbaj maşină, care vor fi executate pe calculatorul virtual. Setul de instrucţiuni pentru maşina virtuală şi codul binars în care acestea vor fi convertite sunt întotdeauna aceleaşi, fără a ţine seama de diferenţele date de suportul hardware pe care rulează interpreterul. Interpreterul în sine, pentru a-şi realiza obiectivele, trebuie să cunoască limbajul maşină al dispozitivului hardware specific pe care rulează. De acceea softul scris în Java este independent de platformă, fără a necesita portare sau recompilare, interpreterul Java portând platforma înainte de a rula programul pe calculator. Animaţia este un beneficiu simplu pe care îl aduce Java permiţând paginilor Web să conţină imagini în mişcare. Appleturile Java oferă abilitatea animaţiei astfel încât paginile sunt continuu interactive, pentru a răspunde direct, în timp real, intrărilor utilizatorului. Interactivitatea pe partea clientului este realizată diferit faţă de paginile Web tradiţionale, unde procesul este preluat pe partea serverului. Utilizând un browser disponibil java, pagina Web conţine URL-ul appletului Java. Accesând această pagină, appletul este trimis pe calculatorul propriu, care îl execută. Marea majoritate a prelucrărilor este transferată pe partea clientului, de la serverul la distanţă. Aceasta permite interactivitate, fără întârzierile datorate timpului de răspuns ce apar când informaţia este trimisă înapoi pe Internet. Intrările utilizatorului sunt trimise direct programului responsabil pentru procesarea lor, ceea ce aduce interactivitatea paginilor Web. Dezvoltarea API (Application Programming Interface) oferă programatorului acces la clase, furnizând structuri comune de date, rutine I/O, tabele, fişiere, dispozitive reţea, grafică şi audoi, funcţii matematice, etc. Java API furnizează elemente predefinite (butoane, bare de defilare, casete de dialog, etc.) necesare construcţiei GUI (Graphic User Interface) şi referite în AWT (Abstract Window Toolkit).[java_4] 3
Aplicaţiile de sine stătătoare (standalone) sunt foarte uşor de realizat deoarece Java este un limbaj de programare complet, configurat OO. Când appleturile rulează fără browser disponibil java, aplicaţiile standalone sunt complet autorizate, putând rula pe un calculator, sau preluâd avantajele suportului Internet oferit de Java API. Spre exemplu Sun HotJava este scris complet în limbajul Java. Un alt exemplu este cel în care există o bază de date (BD) centrală pe un calculator şi toţi utilizatorii din firmă au acces la ea, chiar dacă birourile sunt plasate în diverse locuri din oraş sau chiar în oraşe diferite. Practic întregul program front-end care accesează BD este conceput ca aplicaţie client ce nu trebuie portată şi recompilată pentru diverse platforme, avantaj resimţit mai ales la construcţia interfeţei utilizator. Acelaşi program client este compilat o singură dată şi poate rula pe toate platformele, iar funcţiile interfeţei utilizator sunt aceleaşi. Chiar dacă HTML este independent de platformă, apar probleme când se introduce o cerere incompletă sau impropriu formulată în cadrul unui formular. Java oferă posibilitatea de a crea “forme inteligente” (smart form) care verifică legitimitatea cererilor de intrare ale clientului, eliminând consumurile inadecvate de lăţime de bandă din scenariul anterior. Din punct de vedere teoretic nu sunt restricţii cu privire la aplicaţiile de sine stătătoare, respectiv tot ce realizează acestea poate realiza un applet rezident pe pagina Web. Se preferă appleturile deoarece oferă securitate a structurilor construite pe un browser.Java poate utiliza structuri de date gestionate de Security Manager şi indiferent de localizarea calculatorului poate activa sau inhiba programe Java pentru a prelucra operaţii certe: încărcarea automată a unui program sau formă dintr-o locaţie Internet, închiderea/deschiderea unui fişier,etc.Acest lucru este utilizat pentru a preveni încărcarea unui applet infectat (ca şi virulsul Troian Horse), care poate crea prejudicii acestui applet (sau sistemului local de fişiere) ori să faciliteze curiozităţi neautorizate din exterior. Unele caracteristici de securitate sunt accesibile din caseta de dialog a meniului Security Preferences dar nu pot fi modificate de utilizator şi nici nu pot fi alterate de codul încărcat de un host la distanţă. Netscape ca şi alte browsere impune doar limitări extinse la appleturile ce beneficiază de înteaga gama de facilităţi Java, dar este necesară dezvoltarea browserelor pentru a limita extensiile de către acei utilizatori care pot relaxa restricţiile de securitate locală ale appleturilor. Interacţiunea utilizator-utilizator prin reţea poate fi necesară pentru a avea aplicaţii Java de sine stătătoare, care sunt implementate cu politici diferite de securitate pe Netscape, luând măsuri specifice pentru drepturi, pentru a se asigura că nu pot apare breşe de securitate.[An_96] Protocol handler este un progam care aparţine JDK şi permite unui browser disponibil Java interpretarea unui nou tip de protocol. Acest lucru elimină inconvenientul browserelelor tradiţionale, unde apariţia unui nou protocol implica dezvoltarea browserului, astfel încât să conţină tot codul ce permite manipularea solicitărilor făcute de protocol, ceea ce implică realizarea unui program monilitic, care consumă multă memorie RAM. Dezvoltarea browserelor disponibile Java este modulară şi extensibilă iar browserul în sine este un program cu flux liniar, care utilizează un set de protocoale ce reprezintă repertoriul curent ce poate fi interpretat. Manipulatorul poate fi încărcat "transparent" astfel încât utilizatorul nu trebuie să fie preocupat de detalii, singura sarcină fiind accea de a naviga în URL-ul propice. Protocul handler încarcă în background tot ce trimite browserul iar browserul îşi încarcă doar handler-ele necesare realizând o optimizare a memoriei RAM ocupate. Content handlers are rolul de a furniza o alternativă a ideii de aplicaţii standallone, permiţând programatorului Java să scrie codul ce extinde browserul, dându-I abiliatea de a interpreta conţinutul inline fără a solicita apelul unor aplicaţii externe. In dezvoltarea browserelor programatorii şi-au dat seama că nu se poate determina tipul conţinutului trimis prin MIME şi apoi să se lege browserul de "helper-e" prezente pe calculatorul local al utilizatorului. Content 4
handler este încărcat automat la fel ca şi protocul handler, atunci când se accesează pagina Web, ce conţine un nou tip (video, audio, conţinut special de pe Web, etc) deşi Netscape nu suportă modelul Java pentru content handler. 1.2. Primii paşi în programarea Java Pentru a realiza o aplicaţie Java sunt necesare un editor de texte, JDK (Java Development Kit) şi un browser disponibil Java.Indiferent de platforma utilizată, la despachetarea JDK se crează directorul JAVA şi o serie de subdirectoare (lib - ce conţine fişierul classes.zip, bin - ce conţine codul binar executabil pentru unelte Java memorate, javac - interpretor java de sine stătător şi appletviewer). Acestea nu se despachetează pentru a nu consuma spaţiu de memorie pe disc. In final se setează variabilele de mediu CLASSPATH care identifică locaţia unde se caută uneltele Java pentru orice clasă care nu este găsită în partea standard, inclusă în JDK. In momentul de fată sunt întâlnite mai multe tipuri de aplicaţii scise în limbajul Java: ♦ appleturi - aplicaţiile ce rulează într-un browser ce suportă Java şi respectă convenţii clar definite; ♦ aplicaţiide sine stătătoare (standalone)- foarte uşor de realizat deoarece Java este un limbaj de programare complet, configurat OO. Când appleturile rulează fără browser disponibil java, aplicaţiile standalone sunt complet autorizate, putând rula pe un calculator, sau preluâd avantajele suportului Internet oferit de Java API. Spre exemplu Sun HotJava este scris complet în limbajul Java. ♦ appletcation sau applet-aplicaţiile care sunt tratate în context, fie ca aplicaţii grafice standalone de către interpretorul Java, fie appleturi de către browser disponibil java, sau appletviewer. Aplicaţii specifice J2EE ♦ servlet - aplicaţii similare cu appleturile dar care rulează într-o aplicaţie ce rezidă pe un Web server care suportă Java şi respectă conveţiile impuse. Practic servle-urile rezidă în aplicaţii Web interactive şi înlocuiesc CGI-urile, mărind performanţele aplicaţiilor. Pentru a extinde funcţionalitatea serverelor Web se folosesc Java Servlets care sunt programe Java independente de platformă, care fac parte din componentele server-side şi care interacţionează cu motorul servlet-ului, suportat de serverul Web, bazându-se pe protocolul de comunicaţie tip cerere-răspuns, axat la rândul lui pe protocolul HTTP. Spre deosebire de acestea, appleturile fac parte din componentele client-side care rulează într-un browser Web, în interiorul unei pagini HTML sau a interfeţei grafice. Java Server Pages (JSP) extind funcţionalitatea paginlior Web asigurând manipulare şi generare dinamică de conţinut. ♦ Obiectele de business sunt implementate ca şi enterprise beans sau componente EJB (Enterprise Java Bean):entity beans şi session beans, driven messanger. Abordate din prisma clientului, session beans sunt fie resurse private fie destinate clienţilor care le-au creat, fiind privite ca şi anonime. Entity beans au în schimb o identitate unică prezentată sub forma unei chei primare. Inafara acestor obiecte, enterprise bean defineşte în plus trei entităţi: servere, conteinere şi clienţi. EJB există în interiorul unor conteinere care gestionează ciclul lor de viaţă şi furnizează o serie de alte servicii. Crearea şi editarea codului Java presupune încapsularea în clase Java. In general fiecare clasă trebuie să meargă cu propriul fişier sursă, numit prealabil înaintea clasei (spre exemplu: Primul.java). De fapt se pot edita mai multe clase într-un fişier sursă, depinzând de declaraţiile public realizate şi se poate utiliza un editor standard, pentru Windows sau Unix. 5
Dacă se utilizează IDE (Java Integrated Development Environment) ca şi Symatecs Café pentru Windows NT sau Natural Intelligence Roaster pentru Macintosh, se apelează la editorul încorporat. IDE are avantajul creării documentului sursă, compilării, rulării şi depanării într-un mediu încorporat. Dacă appletul este integrat într-un fişier HTML, apelul se face din secţiunea BODY astfel: