Programmēšana

Kas ir EJB? Enterprise JavaBeans attīstība

Enterprise JavaBeans (EJB) ir specifikācija liela mēroga izplatītu biznesa lietojumprogrammu izstrādei Java platformā. EJB 1.0 tika izlaists 1998. gadā. Jaunākais izlaidums EJB 3.2.3 ir pieņemts iekļaušanai Jakarta EE, kur to pārdēvēs par Jakarta Enterprise Beans.

EJB arhitektūra

EJB arhitektūra sastāv no trim galvenajām sastāvdaļām: uzņēmuma pupiņas (EJB), EJB konteiners un Java lietojumprogrammu serveris. EJB darbojas EJB konteinerā, un EJB konteiners darbojas Java lietojumprogrammu serverī.

Ir divu veidu EJB - sesijas pupiņas un ar ziņām saistītas pupiņas:

  • Sesijas pupiņas uz kuriem atsaucas klients, un padara uzņēmuma funkcionalitāti, piemēram, darījumus un resursu pārvaldību, programmatiski pieejamus klientam.
  • Pupiņas ar ziņām arī ietver un nodrošina uzņēmuma funkcionalitāti, taču tās ir asinhronas un virzītas uz notikumiem. Ar ziņojumu vadītas pupiņas klausās notikumus un reaģē uz tiem, un klients tos nevar izsaukt.

Kad tās tika izmantotas, lai nodrošinātu noturību EJB sistēmā, Java Persistence API ir aizstājusi entītijas pupas. Turpiniet lasīt, lai uzzinātu vairāk par sesijas pupiņām un uz ziņām balstītām pupiņām.

EJB vs JavaBeans

Enterprise JavaBeans bija pirmais Java EE komponentu bāzes izstrādes modelis. EJB ir līdzīgs JavaBeans, jo tas ir balstīts uz komponentiem, taču līdzība tam beidzas:

  • A JavaBean ir Java klase, kas iekapsulē vairākus objektus un atbilst noteiktām konvencijām. JavaBeans tiek izmantoti galvenokārt klienta puses attīstībai.
  • An uzņēmuma pupas (EJB) ir Java klase, kas piesūcināta ar īpašām servera puses iespējām. Uzņēmuma pupiņas tiek izmantotas liela mēroga biznesa lietojumprogrammās un sistēmās.

Sesijas pupiņas

A sesijas pupiņa ir visizplatītākais uzņēmuma pupiņu veids, kas pārstāv biznesa funkcionalitāti, kuru klients var izsaukt. Šajā gadījumā klients varētu būt cita vietējā JVM klase vai attālināts zvans.

EJB konteiners pārvalda sesijas pupiņu dzīves ciklu, ko nosaka pupiņu stāvoklis:

  • Bezvalstnieku sesijas pupiņas ir līdzīgi Java Servlet API pieprasījuma tvērumam. Bezvalstnieku sesijas pupiņās ir daļa no izsaucamajām funkcijām, bet citādi tās ir bezvalstnieki.
  • Statiskas sesijas pupiņas ir saistīti tikai ar vienu klientu un tiek pievienoti šī klienta notiekošajai sesijai. Statusu sesijas pupiņas darbojas līdzīgi sesijas darbības jomai Serversīklietotnes API.
  • Vienkrāsainas pupiņas ir līdzīgi Servlet API API lietojumprogrammai. Katram klientam atsevišķa sesijas pupiņa pastāv tikai vienu reizi.

Vītņu drošība ar sesijas pupiņām

Statusa sesijas pupai vienlaikus var piekļūt tikai viens klients, tāpēc, strādājot ar šāda veida pupiņām, tiek garantēta pavedienu drošība. Bezvalstnieku sesijas pupiņas un vienreizējās pupiņas ir elastīgākas, ļaujot veikt vienlaicīgus savienojumus, kas jāpārvalda izstrādātājam. Strādājot ar šāda veida pupiņām, jūs esat atbildīgs par diegu drošību.

Pupiņas ar ziņām

Ar ziņojumu pamatotas pupiņas (MDB) tiek izsauktas, izmantojot JMS (Java Message Service) ziņojumus. JMS darbojas kā izplatīts komandu modelis, kur ar ziņojumu saistītā pupiņa darbojas kā komandas klausītājs. Kad ziņa pienāk par tēmu vai rindu, tiek izsaukta ziņu vadīta pupiņu klausīšanās par šo tēmu.

Pupiņas, kuru pamatā ir ziņojums, netiek izmantotas tik bieži kā sesijas pupiņas, taču tās ir spēcīgas. Būdami asinhroni un notikumu vadīti, tie ir īpaši noderīgi ilgstošiem darbiem, kur ir svarīgi saglabāt resursus.

Vienkāršākā arhitektūra sastāvētu no EJB lietojumprogrammas un tās konteinera un servera, kas koordinē ar MDB apstrādājošo ziņojumu pakalpojumu. Ražošanā jūsu arhitektūra, visticamāk, ietvers trešo komponentu, kas paredzēts pupiņu patēriņam. Izstrādes laikā visas šīs sastāvdaļas varētu darboties vienā un tajā pašā vietējā mašīnā.

1. attēlā parādīta tipiska notikumu virzīta arhitektūra ar pupiņām ar ziņām.

Metjū Taisons

Darbs ar pupiņām, kuru pamatā ir ziņojums, ir vairāk iesaistīta nekā sesiju pupiņu izmantošana. Notikumu virzītā vidē parasti ir nepieciešams ziņojumu starpnieks, piemēram, ActiveMQ.

Kaut arī sesijas pupiņas ir vienkāršākas un tādējādi biežāk izmantotas EJB, notikumu virzītas arhitektūras ir kļuvušas populāras, īpaši ar mikropakalpojumu eksploziju.

EJB anotācijas

Uzņēmuma pupiņu noteikšana un lietošana daudziem izstrādātājiem bija svarīgs punkts līdz EJB 3.0, kas ieviesa anotācijas EJB specifikācijā. Anotāciju dēļ ir ļoti viegli konfigurēt uzņēmuma pupiņas visdažādākajām funkcijām, kas atrodamas Java EE. Turpiniet lasīt, lai sāktu darbu ar EJB anotācijām.

@ Bezvalstnieks: definējiet sesijas pupiņu bezvalstnieku

Lai klasi nosauktu par sesijas pupiņu bezvalstnieku, izmantojiet javax.ejb. Bezvalstnieks anotācija, kā parādīts 1. sarakstā.

Uzskaitījums 1. @statistiskas anotācijas piemērs

 importēt javax.ejb.Valsts bez statusa; @Stateless public class MyStatelessBean {public String getGreeting () {return "Sveiki JavaWorld."; }} 

Šajā bezvalstnieka pupiņā ir vienkāršs paraksts, kurā nav argumentu un tiek atgriezta virkne. Tomēr neļaujiet vienkāršībai sevi mānīt: šī pupiņa var darīt visu, kas jums nepieciešams, tostarp mijiedarboties ar citām pupiņām, pakalpojumiem vai jūsu lietojumprogrammas datu slāni.

@EJB: patērē bezvalstnieku sesijas pupiņu

Kad esat definējis sesijas pupiņu, tās lietošana ir tik vienkārša:

Saraksta 2. @EJB anotācijas piemērs

 publiskā klase MyServlet paplašina HttpServlet {@EJB MyStatelessBean myEjb; public void doGet (HttpServletRequest pieprasījums, HttpServletResponse atbilde) {response.getWriter (). write ("EJB saka" + testStatelessEjb.getGreeting ()); }} 

Šeit mēs injicējam bezvalstnieku pupiņu servletā, un pēc tam tas ir pieejams lietošanai. Ievērojiet, kā pupiņa tiek identificēta zem @EJB anotācija. Apzīmējums "bezvalstnieks" norāda, ka šī pupiņa neizsekos klientu. Tā kā tas ir bezvalstnieks, mēs arī zinām, ka šī pupiņa ir pakļauta pavedieniem, ja tā veic kādu darbu ārpus izmantotās metodes.

@Remote: definējiet attālo EJB saskarni

Iepriekš minētajos piemēros es pieņēmu, ka EJB un EJB klients darbojas vienā un tajā pašā JVM. Ja uzņēmuma pupa un tās klients darbojas atsevišķos JVM, tad EJB ir jādefinē a @Remote interfeiss. Šajā gadījumā jums ir jādefinē un jāievieš saskarne, kā parādīts 3. sarakstā.

3. saraksts. Attālās anotācijas piemērs

 @Remote publiskā saskarne MyStatelessEjbRemote {String sayHello (String name); } 

Attālā saskarne tiek nosūtīta klientam, lai to izsauktu. Zvanus uz to tad izpildīs EJB servera puses ieviešana. The MyStatelessBean 4. saraksta piemērs ievieš attālo saskarni.

Uzskaitīšana 4. Attālās saskarnes ieviešana

 publiskā klase MyStatelessBean ievieš MyStatelessEjbRemote {...} 

Attālā saskarne tiek ieviesta tāpat kā parasta klase, kas ievieš saskarni. Kā klientam no attālināta EJB klienta lietojumprogrammai jāspēj piekļūt attālās saskarnes klases definīcijai. Jūs varat iesaiņot attālās saskarnes klases definīciju kā atkarības JAR.

Vietējais vai attālais interfeiss

Lai gan ir svarīgi zināt, kā ieviest attālo saskarni, praksē biežāk tiek izmantota vietējā saskarne. Vietējais interfeiss tiek izmantots pēc noklusējuma un darbojas ikreiz, kad EJB tiek izsaukts tajā pašā JVM kontekstā. Attālās saskarnes izmantošana tiek parādīta, kad lietojumprogramma tiek izplatīta vairākos JVM.

Stāvīgas sesijas pupiņas un vienkrāsainas pupiņas

Statusa noteikšanas un patērēšanas process @ Sesija pupiņas un @Singleton pupiņas ir tas pats, ko esat redzējis @Valsts pupiņas. Atcerieties semantiku:

  • Vairākas sesijas pupiņas var saīsināt un izmantot vienam klientam.
  • Atsevišķa pupiņa visā lietojumprogrammā pastāvēs tikai vienu reizi.

Vītņu drošība un plānošana ar vienkrāsainiem

Vītņu drošība ir iebūvēta, strādājot ar sesijas pupiņām, taču gan bezvalstniekiem, gan atsevišķām pupiņām vienlaikus var piekļūt vairāki klienti. Izstrādātāji ir atbildīgi par pavedienu drošību, ieviešot šāda veida pupiņas.

Pupiņas piedāvā nelielu atbalstu diegu drošībai, izmantojot @Lock anotācija. Lai iestatītu katras metodes lasīšanas / rakstīšanas privilēģijas, jūs varat izmantot @Lock anotāciju atsevišķās pupiņu metodēs. Divas iespējas ir @Lock (LockType.READ) vai @Lock (LockType.WRITE), kas ir noklusējums.

Vēl viena noderīga viengabala pupiņu iezīme ir spēja vienkāršā veidā ieplānot uzdevumus, izmantojot @ Grafiks anotācija. 5. saraksts parāda, kā plānot uzdevumu katru dienu pusdienlaikā.

5. saraksts. Anotācijas @ grafika grafiks

 @Singleton publiskā klase MySchedulerBean {@Schedule (hour = "12") void doIt () {System.out.println ("Sveiki pusdienlaikā!"); }} 

CDI pret EJB

CDI jeb Context and Dependency Injection ir jaunāka uzņēmuma specifikācija, kuru daži izstrādātāji ir ieteikuši aizstāt EJB.

Augstā līmenī CDI piedāvā vispārējas nozīmes komponentu ietvaru, savukārt EJB izceļas ar bagātīgi piedāvātajiem atsevišķajiem komponentiem. Kamēr CDI izmanto atkarības ievadīšanu, lai definētu un atsauktu jebkuru programmatūras komponentu, EJB komponenti ir formālāk definēti, un katrs no tiem piedāvā īpašu iespēju kopu. Abas specifikācijas ir paredzētas turpmākajai attīstībai kā daļa no Džakarta EE, kur galu galā tiks atrisināts jautājums, vai CDI būtu jāaizstāj EJB.

Secinājums

Enterprise JavaBeans bija pirmā specifikācija, kas piedāvāja vienkāršu biznesa loģikas iekapsulēšanas un atkārtotas izmantošanas veidu uzņēmuma Java lietojumprogrammās. Mūsdienās EJB ir tālu no vecā smagā svara, tas ir vienkāršs, uz anotācijām balstīts ietvars, kas ļauj piekļūt plaša spektra uzņēmuma funkcionalitātei tieši no kastes. Apsveriet EJB nākamreiz, kad jums tiks lūgts ātri izveidot izplatītu, pielāgojamu biznesa lietojumprogrammu. Jūs varētu būt patīkami pārsteigts.

Šo stāstu "Kas ir EJB? Enterprise JavaBeans attīstība" sākotnēji publicēja JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found