Enterprise JavaBeans
Ce este EJB (Enterprise JavaBeans) și ceea ce este pentru? Pot face fără EJB în dezvoltarea de WEB-aplicații? Ce face programatori EJB?
În Java WEB-aplicație, puteți utiliza JSP (JavaServer Pages), JavaServer Faces (JSF), Struts, GWT. Pentru a lucra cu o bază de date, puteți utiliza JDBC (Java Database Connectivity) sau APP (JBoss Hibernate). Aplicarea în servlet'a interceptări WEB-app face apel la server și pentru a efectua anumite acțiuni, de exemplu, pentru a filtra mesajele. Unde și cum puteți utiliza EJB WEB-app?
Experiența a arătat că sarcinile comune sunt soluțiile tipice. Acesta prevede, de asemenea, EJB. care este un set de soluții „fixe“ model pentru problemele în dezvoltarea aplicațiilor bazate pe server, precum și schema de testat timp a componentelor de server. Aceste soluții fixe sau servicii furnizate de containere «EJB.“ Pentru a avea acces la aceste servicii, trebuie să creați componente personalizate folosind declarativă și programatic API EJB, și să le implementeze la serverul de aplicații.
server de aplicații Java EE (Enterprise Edition) include două componente principale. WEB-container (pentru JSP, JSF. Struts, etc.) și EJB-container. Prima componentă este utilizată pentru a crea interfața cu utilizatorul și slab potrivit pentru a descrie aplicatii web logica de afaceri. Pentru a face acest lucru, utilizați EJB-container.
Enterprise JavaBeans scris caietul de sarcini și are suportul componentelor de server care conțin logica de afaceri. Această tehnologie este utilizată, de regulă, în cazul în care logica de afaceri necesită una sau mai multe dintre următoarele servicii.
- operațiunile de sprijin distribuite;
- servicii de securitate a datelor (persistența);
- Servicii de gestionare a datelor;
- Serviciul de evenimente;
- denumire și serviciu de director (JNDI);
- Serviciul de securitate și de a restricționa accesul la date.
Tehnologia EJB pot fi luate în considerare în două aspecte: un cadru și o componentă. Din punctul de vedere al cadrului EJB - este o tehnologie care prevede aplicatii server-side de soluții gata făcute (tranzacție de gestionare, securitate, stocare de date, etc.), set-WEB. Din perspectiva EJB - este un add-on o clasă de POJO. descrisă folosind adnotări.
Principalele tipuri de componente EJB
În EJB componentă se referă la limba în conformitate cu cereale (Bean), și înseamnă „corporative“ sub Enterprise. Componente EJB (imparte boabe) în mai multe tipuri, în funcție de scopul lor:
- sesiune (fasole sesiune), care poate fi
- statefull - menținând în același timp starea curentă;
- apatrid - apatrid;
- Singleton - un singur obiect pentru toate aplicațiile (din EJB 3.1).
- gestionate de mesaje (Message Fasolea comadă) - logica lor este o reacție la evenimentele din sistem;
- obiect (Entitate Bean) - definit în caietul de sarcini JPA (Java Persistence API) entități și sunt utilizate pentru stocarea datelor.
Fasole sesiune sesiune de fasole. de asemenea, cunoscut ca o sesiune, numit de către client (browser) pentru a efectua operațiuni de bine definite, cum ar fi, de exemplu, verificarea istoricul de credit al clientului. Cuvântul „sesiune“ implică faptul că instanța a componentei este disponibilă numai pe durata unui server de anumite sarcini, și irevocabil distrus în cazul unui accident sau a opri serverul. Pentru a accesa aplicația de server-side, clientul invocă metodele de fasole sesiunii, efectuează o anumită sarcini de afaceri din interiorul serverului.
Sesiunea de fasole păstrarea EJB stare stateful salvează automat starea între apelurile către acesta din același client, și completează existența sau la timeout sau la cerere explicită. Un exemplu tipic al unei componente este stateful cu coșul de cumpărături de la magazinul online.
fasole sesiune Apatrid EJB apatridă nu păstrează nicio informație legată de starea lui și sunt servicii de aplicații, care realizează toate acțiunile necesare în cadrul cererii. EJB apatrid poate fi utilizat pentru operațiuni, cum ar fi transferul de fonduri către un card de credit sau verificarea istoricul de credit al clientului. Pe baza apatride-fasole proiectat servicii web.
Componente unice Singleton EJB împărtășite de toți clienții care au acces la ele, și continuă să existe în momentul cererii. Informații despre starea lui EJB Singleton păstrează. Componenta singur poate fi utilizat, de exemplu, magazinul on-line pentru punerea în aplicare a reducerilor, deoarece regulile de acordare de reduceri sunt fixe și se aplică tuturor clienților.
Componentele sesiune poate fi invocată la nivel local sau de la distanță, prin intermediul Java RMI. Componentele de componente individuale și apatrizii pot fi, de asemenea, exportate ca un serviciu SOAP Web (Simple Object Access Protocol) și REST (Representational State Transfer).
message-driven boabe MDB (Message-Driven Bean) cum ar fi boabe de sesiune pune în aplicare logica de aplicare, iar unele au o singură diferență importantă: clienții nu cauzează în mod direct metodele MDB. In schimb, componentele MDB chemat să se ocupe de mesaje trimise la server, care vă permite să organizați mesaje asincrone între părți ale sistemului. Exemple tipice de astfel de servere de mesagerie pot servi ca IBM WebSphere MQ, Oracle avansat Queueing și TIBCO. Componente MDB. de regulă, sunt utilizate pentru a îmbunătăți fiabilitatea sistemelor de integrare a datelor și asincrone. Un exemplu de mesaj MDB poate fi o cerere pentru livrarea de inventar din sistemul de vânzare cu amănuntul automatizat pentru a furniza sistemul de control.
Entitate Bean și Java Persistence API
EJB este strâns legată cu două specificații. cu JPA. care este un standard de stocare a datelor pentru Java EE și CDI (Contexte și Dependency Injection), care permite injectarea de dependență și oferă servicii de management de context pentru toate componentele Java EE, inclusiv EJB.
Abilitatea de a salva automat obiectele din baza de date relațională folosind un tehnologii obiect-relaționale Mapping (ORM) - așa-numitul mecanism de persistență pentru a lucra cu obiecte este unul dintre avantajele principale EJB. În contextul EJB persistența - este ORM-cadru care sprijină APP, definește standarde pentru:
- Entitate Bean cartografiere configurare și afișa în baza de date;
- EntityManager API - API standard pentru CRUD (Create, Read, Update, Delete) pe entități;
- Java Persistența Query Language (JPQL) - pentru a căuta și de a prelua datele aplicației.
EntityManager API - o interfață care conectează natura de clasă a aplicației (Entitate Bean) și reprezentarea acesteia în baza de date. EntityManager știe cum să adăugați esență la baza de date, actualizați și ștergeți-le, și, de asemenea, prevede mecanisme de optimizare a performanțelor, cache, tranzacții etc. Acesta utilizează cereri JPQL de limbă. foarte asemănătoare în SQL.
Containere EJB-container
alimentat Java aplicații de lucru are nevoie de o mașină virtuală JVM (Java Virtual Machine). fasole sesiune și componente MDB pentru a lucra exact ca EJB container necesar. Se poate presupune dezvoltarea JVM EJB-recipient al ideii de bază. La fel cum JVM gestionează transparent de memorie, EJB container, componente EJB furnizează servicii, cum ar fi procesarea de tranzacții, securitate, suport, acces de la distanță și servicii Web.
Conform containerului caietul de sarcini EJB3 furnizează servicii care sunt aplicabile numai pentru boabe de sesiune și MDB. EJB3 operație adăugarea componentelor într-un recipient numit o desfășurare (implementare). După EJB componente desfășurate în condiții de siguranță în container, este aplicații gata de utilizare.
Java Containerele de tehnologie nu sunt limitate la EJB3. Java EE container - un server de aplicații cu suport EJB3, containerele web (servlet, JSP, JSF, Struts, GWT) și alte Java EE API și servicii. Exemple de implementări ale containerelor Java EE sunt următoarele servere de aplicații. Oracle WebLogic, GlassFish, IBM WebSphere, JBoss, și Caucho Resin.
Determinarea numele componentelor EJB
Formatul de denumire componente EJB este după cum urmează:
- spațiu de lucru - spațiu de nume;
- app-name - numele aplicației;
- Modul-name - numele modulului;
- EJB-name - numele componentei;
- obiect-name - numele complet al obiectului.
În prezent formatul componentelor EJB denumesc un număr de elemente (spații de lucru, modulul de nume, EJB-name) este mereu prezent în numele și este obligatoriu. Și elementele [app-name] și [! Object-name] pot să nu fie disponibile și sunt considerate opționale.
server de Java EE poate include patru nume de spațiu pentru spațiile de lucru, fiecare dintre acestea reprezentând domeniul său de aplicare.
DOMENIUL Vizibilitatea componentelor. Toate componentele EJB ale WAR-fișier se încadrează într-un singur spațiu comun numele java: comp. Sansele sunt rareori trebuie să folosească acest spațiu de nume, pentru că scopul său principal - pentru a păstra compatibilitatea cu versiuni de Java EE 6 și mai jos, în cazul în care java: comp a fost singurul standard de spațiul de nume.
Regiunea vizibilitatea modulului. Toate componentele module se încadrează într-un singur spațiu numele java: modul. Pentru compatibilitate inversă, java: comp și Java: modul interpretat în module web ca un singur spațiu de nume. Atunci când este posibil, în loc de java: comp pentru a utiliza java: modul.
Domeniul de aplicare. Componentele o aplicare a tuturor modulelor sunt aranjate într-un spațiu de nume comun java: app. Un exemplu de aplicare poate servi drept EAR arhivă. Toate garanii și EJB-componente care sunt dislocate din EAR-arhivele se încadrează în acel spațiu de nume.
Spațiul pentru nume global. Java: la nivel mondial plasat toate componentele tuturor modulelor și toate aplicațiile.
Semnificația aplicație aici [app-name] este opțională și este prezentă doar în numele componentelor EJB. pentru a implementa la serverul de aplicație a EAR-arhive. Dacă fișierul EAR nu este utilizat, atunci [app-name] lipsește în componente EJB nume JNDI portabile. În mod implicit, valoarea [app-name] este selectat numele EAR-fișier fără extensia .ear. Implicit poate schimba această fi în fișierul application.xml.
Modul nume-
Valoare Modul nume este întotdeauna prezentă și în numele resursei este obligatorie. Depinde de modul în care implementați modulele care conțin componente EJB. În cazul în care componentele sunt instalate dintr-un singur fișier EJB-JAR (JAR-fișierele sunt utilizate în mod direct), ca valoarea modulului nume-nume de fișier selectat EJB-JAR fără extensia .jar. Acest lucru implicit poate fi înlocuită de un element modul nume în fișierul de configurare META-INF / EJB-jar.xml.
În cazul în care componentele dislocate care fac parte din modulul web (WAR-fișier) ca valoarea implicită a modulului nume este selectat, numele fișierului WAR fără .war extensia. Acest lucru implicit poate fi înlocuită de un element modul nume în fișierul de configurare WEB-INF / web.xml. În cazul în care componentele dislocate care fac parte a cererii (AER-fișier), implicit modulul nume-se stabilește în funcție de componentele EJB fac parte din EJB-JAR sau WAR în EAR. Când implementați componente din WAR-fișier de selecție valoarea modulului nume se efectuează în conformitate cu regula pentru WEB-module, care pot fi înlocuite în descriptorul WEB-INF / web.xml. Când implementați componente din fișierele EJB-JAR, valoarea modulului de nume devine calea completă la directorul în care fișierul EJB-JAR în cadrul AER, plus numele de fișier EJB-JAR fără .jar extensie, care poate fi înlocuită în META-INF / fișierul ejb- jar.xml.
Valoarea aici componenta EJB-nume este opțională și este întotdeauna prezentă în numele resursei. Pentru componentele EJB, etichetate adnotări @Stateless, @Stateful sau @Singleton, ca implicit EJB-name numele clasei componenta selectată. Această valoare poate fi înlocuită de nume de atribut () adnotări. Pentru componentele EJB declarate în fișierul EJB-jar.xml, valoarea EJB-nume este determinat prin utilizarea elementului de fasole-name.
obiect nume-
Valoarea numele complet al obiectului [! Object-name] este necesar, și numele componentelor EJB transportate cu elementul va fi mereu prezent în JNDI. Dar serverul EE, de asemenea, este necesar ca, în prezent, numele JNDI fără această valoare. O astfel de „trunchiat“ nume poate fi util atunci când accesarea componentei printr-o singură interfață (sau în cazul în care componenta nu are nici o interfață).