J2EE

**Java 2 Platform, Enterprise Edition** (**J2EE**) – standartinė daugialyčių programų kūrimo Java kalbos platforma, paremta moduliniais komponentais, vykdomais programų serveryje.

J2EE naudojama keletas technologijų, tokių kaip JDBC ar CORBA, praplėstų pritaikant tikslinėms sistemoms.

## Istorija
1999 metais Sun Microsystems kompanija paskelbė, kad Java 2 platforma bus padalinta į tris dalis:
* Tradicinė Java virtuali mašina (JVM) buvo pavadinta Java 2 Standard Edition (J2SE), kuri orientuota tradicinėms asmeninių kompiuterių sistemoms kurti.
* Java 2 Micro Edition (J2ME) pritaikyta mažesnę galią nei kompiuteriai turintiems prietaisams.
* **J2EE** skirta informacinėms verslo sistemoms.

## J2EE lygiai

J2EE sistema yra kelių lygių (). Vartotojui artimiausias lygis yra interneto naršyklė, veikianti vartotojo kompiuteryje. Visi kiti lygiai veikia viename arba keliuose serveriuose.

### Interneto komponentų lygis
Pagrindiniai J2EE modelio elementai yra internetas ir naršyklė – būtent jie suteikia vartotojui sąsają dirbti su informacinėmis įmonių sistemomis. Šis metodas pranašus tuo, kad naršyklė yra paprasta programinė įranga, veikianti visose operacinėse sistemose, nereikalaujanti daug resursų ir turinti kitus privalumus. Bendrauti su naršyklėmis J2EE apibrėžia servletus ir JSP specifikaciją. Būtent šie komponentai, naudojami kartu, leidžia atskirti verslo logiką nuo vaizdinės dalies, taip supaprastinant interneto sistemos kūrimą ir palaikymą. Servletai – tai Java klasės, paveldinčios tam tikrą abstrakčią klasę ir realizuojančios metodus, sukuriančius interneto puslapį.


```java
public class Servletas extends HttpServlet {
   ...
   public void doGet(HttpServletRequest request,
                     HttpServletResponse response)
     throws ServletException, IOException
   {
     PrintWriter out = response.getWriter();
     out.println(„<html><head><title>Labas</title></head></html>“);
   }
   ...
 }
```


Kliento naršyklei paprašius puslapio ir specialiam interneto serveriui, palaikančiam servletus (pvz., Mortbay Jetty , Apache Tomcat) nusprendus pagal adresą, kad reikia vykdyti būtent šios klasės metodus, klientui bus įrašytas atsakymas.

JSP atveju kiekvienas interneto puslapis yra panašesnis į įprastą HTML puslapį.


```html4strict
<html>
   <body>Dabar yra
         <%= new java.util.Date() %>
   </body>
 </html>
```


Kiekvienas JSP puslapis paverčiamas servletu, o galiausiai ir sukompiliuojamas. Pirmą kartą paprašius puslapio, jo gali tekti palaukti (nes puslapis verčiamas servletu ir kompiliuojamas), tačiau antrą ir paskesnius kartus puslapis klientui bus pateikiamas greičiau.

Servletai ir JSP puslapiai gali būti naudojami kartu. Šiuo atveju servletas atlieka loginius veiksmus ir galiausiai nurodo JSP serveriui klientui pateikti JSP puslapį. Taip atskiriama verslo ir vaizdavimo logika. Nepriklausomos grupės dideliuose projektuose gali dirbti prie atskirų projekto dalių ir specializuotis savo srityje.

Servletų ir JSP puslapių didžiausias pranašumas prieš CGI (Common Gateway Interface) – kiekvieną kartą gavus užklausą nereikia kurti naujo proceso. JSP serveriai kiekvienai užklausai apdoroti naudoja tik atskirą giją, kurios kūrimas ir inicializavimas reikalauja mažiau resursų nei naujo proceso kūrimas.

### EJB lygis
Teisingai parašytoje sistemoje anksčiau minėti komponentai atsakingi išimtinai už Interneto puslapių kūrimą (jų vaizdą). Už visą darbo logiką (kainų ir nuolaidų apskaičiavimas, duomenų bazės užklausos bei papildymai, įvairių verslo taisyklių taikymas ir pan) yra atsakingi Interneto komponentų kviečiami EJB ( – įmonės Java pupos) moduliai. Šių modulių metodai Interneto komponentų pasiekiami arba lokaliai, arba per kompiuterinį tinklą (naudojant CORBA ar RMI). Jie nebūtinai veikia tame pačiame kompiuteryje, kaip ir Interneto komponentai.

Skiriami trumpaamžiai ir ilgalaikiai EJB komponentai. Trumpaamžiai komponentai sukuriami išpildyti vieną vartotojo užklausą arba aptarnauti vieną vartotojo sesiją. Ilgalaikiai komponentai sukuriami kuomet saugomą informaciją (tarkim, vartotojo vardą ir jo slaptažodį) reikia įsiminti ilgam ir šie duomenys neturi dingti serverį išjungus. Ilgalaikių komponentų duomenys automatiškai išsaugomi sekančiame lygyje, duomenų bazėse.

### Duomenų bazės lygis
Savo darbui atlikti EJB komponentai susisiekia su viena ar keliomis duomenų bazėmis, kurios irgi nebūtinai turi būti tame pačiame serveryje. Duomenų bazė saugo įvairią ilgalaikę informaciją, kurios gali būti sukaupta daugelis gigabaitų. Atsakingiems duomenims saugoti naudojami duomenų bazių klasteriai, kur ta pati informacija įrašome keliuose serveriuose.

Nesudėtingais atvejais EJB komponentų turinys duomenų bazėse išsaugomas automatiškai, ir jokio papildomo kodo tam rašyti nereikia. Tačiau jei duomenų struktūros labai sudėtingos, automatinio išsaugojimo sistema jų automatiškai išsaugoti nepajėgia. Tuomete EJB programuotojai rašo kodą, kuris tiesiogiai bendrauja su duomenų baze SQL kalba, naudodamas tam JDBC protokolą.

### Realmas
Beveik visada su J2EE sistema ne kiekvienas gali daryti ką nori: yra vienas ar keli administratorių bei operatorių lygiai ir yra naudotojai, kurių teisės irgi gali būti nevienodos. Duomenų bazė, kurioje aprašytos visos vartotojų grupės bei jų vaidmenys, J2EE sistemoje vadinama realmu (). Realmas taip pat tvarko visus vartotojų slaptažodžius, šifravimo liudijimus ir vartotojo prisijungimo procesą.

### J2EE programa
Paruošta naudojimui J2EE programa yra platinama kaip archyvo tipo failas. Jo standartinis plėtinys yra *.ear*. Šiame faile yra du vidiniai archyvai. Viename jų saugomi Interneto lygio komponentai (plėtinys *.war*), kitame – EJB lygio komponentai (plėtinys *.jar*). Jei programos servletai ir JSP puslapiai visą darbą atlieka patys vieni ir EJB komponentų nėra, kartais atskirai platinamas tik *.war* archyvas. Kaip ir kitas programas, tokius modulius galima ne tik kurti pačiam, bet ir nusipirkti iš kito gamintojo.

### J2EE išpildymai
J2EE sukūrė Sun Microsystems, tačiau esama ir alternatyvių šios sistemos išpildymų. Dalis jų (taip pat ir kai kurie atviro kodo išpildymai) turi oficialų Sun patvirtinimą (liudijimą), jog sistema parašyta teisingai ir suteikia visas reikalingas galimybes. Teisingai parašyti J2EE moduliai veikia nepriklausomai nuo to, kokio gamintojo J2EE supanti sistema naudojama.