Programavimas

Kas yra EJB? „Enterprise JavaBeans“ raida

„Enterprise JavaBeans“ (EJB) yra didelio masto, paskirstytų verslo programų „Java“ platformoje kūrimo specifikacija. „EJB 1.0“ buvo išleista 1998 m. Naujausias leidimas „EJB 3.2.3“ buvo priimtas įtraukti į „Jakarta EE“, kur jis bus pavadintas „Jakarta Enterprise Beans“.

EJB architektūra

EJB architektūrą sudaro trys pagrindiniai komponentai: įmonės pupelės (EJB), EJB konteineris ir „Java“ programų serveris. EJB veikia EJB talpykloje, o EJB konteineris - „Java“ programų serveryje.

Yra dviejų rūšių EJB - seansinės pupelės ir pranešimais pagrįstos pupelės:

  • Sesijos pupelės yra iškviečiami kliento ir daro įmonės funkcionalumą, pvz., operacijas ir išteklių valdymą klientui prieinamus programiškai.
  • Pranešimais valdomos pupelės taip pat apima ir teikia įmonės funkcionalumą, tačiau jie yra asinchroniški ir valdomi įvykių. Pranešimais pagrįstos pupelės klausosi įvykių ir reaguoja į juos, todėl klientas jų negali naudoti.

Kai „EJB“ sistemoje naudojami patvarumai, „Java Persistence“ API išstūmė objektų pupeles. Skaitykite toliau, kad sužinotumėte daugiau apie seansines pupeles ir pupeles su pranešimais.

EJB ir „JavaBeans“

„Enterprise JavaBeans“ buvo pirmasis „Java EE“ komponentais pagrįstas kūrimo modelis. EJB yra panašus į „JavaBeans“, nes yra komponentų pagrindas, tačiau tuo panašumas ir baigiasi:

  • A „JavaBean“ yra „Java“ klasė, apimanti kelis objektus ir atitinkanti tam tikras sutartis. „JavaBeans“ daugiausia naudojami kliento pusių plėtrai.
  • An įmonės pupelė (EJB) yra „Java“ klasė, perpildyta specifinėmis serverio pusės galimybėmis. Verslo pupelės naudojamos didelio masto verslo programose ir sistemose.

Sesijos pupelės

A seanso pupelė yra bendriausias įmonės pupelių tipas, atstovaujantis daugybę verslo funkcijų, kurias gali paskambinti klientas. Šiuo atveju klientas gali būti kita vietinio JVM klasė arba nuotolinis skambutis.

EJB konteineris valdo seanso pupelių gyvavimo ciklą, kurį nustato pupelių būsena:

  • Be pilietybės seansinės pupelės yra panašūs į „Java Servlet“ API užklausų sritį. Seansų be pilietybės pupelėse yra daugybė skambinamų funkcijų, tačiau jos be pilietybės.
  • Valstybinės sesijos pupelės yra susieti tik su vienu klientu ir pridėti prie to kliento vykdomos sesijos. „Stateful session“ pupelės veikia panašiai kaip „Servlet“ API seanso apimtis.
  • Vienkartinės pupelės yra panašūs į „Servlet“ API taikymo sritį. Vieno kliento seanso pupelė egzistuoja tik vieną kartą.

Siūlų saugumas naudojant seansines pupeles

Prie būsenos seanso pupelės vienu metu gali prisijungti tik vienas klientas, todėl dirbant su tokio tipo pupelėmis garantuojamas siūlų saugumas. Bepilietės seansinės pupelės ir pavienės pupelės yra lankstesnės, leidžiančios vienu metu jungtis, kurias turi valdyti kūrėjas. Jūs esate atsakingas už siūlų saugumą dirbant su šių rūšių pupelėmis.

Pranešimais valdomos pupelės

Pranešimais pagrįstos pupelės (MDB) yra iškviečiamos per JMS („Java Message Service“) pranešimus. JMS veikia kaip paskirstytas komandų šablonas, kur pranešimu pagrįstas pupelis veikia kaip komandos klausytojas. Kai pranešimas patenka į temą ar eilę, iškviečiama pranešimų varoma pupelė, klausanti ta tema.

Pranešimais pagrįstos pupelės nėra taip dažnai naudojamos kaip seanso pupelės, tačiau jos yra galingos. Būdami asinchroniški ir valdomi įvykių, jie ypač naudingi ilgai dirbantiems darbams, kuriuose svarbu taupyti išteklius.

Paprasčiausią architektūrą sudarytų EJB programa ir jos talpykla bei serveris, kurie derinasi su MDB apdorojančia pranešimų tarnyba. Gamyboje jūsų architektūra greičiausiai apims trečią komponentą, skirtą pupelių vartojimui. Kuriant, visi šie komponentai galėtų veikti ta pačia vietine mašina.

1 paveiksle parodyta tipinė įvykių valdoma architektūra su pranešimais pagrįstomis pupelėmis.

Matthew Tysonas

Darbas su pupelėmis, kuriomis grindžiamos žinutės, yra labiau susijęs su seansinėmis pupelėmis. Įvykių valdomoje aplinkoje jums paprastai reikės pranešimų tarpininko, pvz., „ActiveMQ“.

Nors seanso pupelės yra paprastesnės ir todėl dažniau naudojamos EJB, įvykių valdomos architektūros išpopuliarėjo, ypač sprogus mikropakalbėms.

EJB anotacijos

Įmonės pupelių apibrėžimas ir vartojimas daugeliui kūrėjų buvo svarbus taškas iki EJB 3.0, kuris įvedė EJB specifikacijos anotacijas. Anotacijos leidžia labai lengvai sukonfigūruoti įmonės pupeles įvairiausiems funkcijoms, esančioms „Java EE“. Skaitykite toliau, kad pradėtumėte naudoti EJB anotacijas.

@Stateless: apibrėžkite sesijos pupelę be pilietybės

Norėdami klasę priskirti sesijos pupelėms be pilietybės, naudokite javax.ejb.Betalė anotacija, kaip parodyta 1 sąraše.

Sąrašas 1. @betaisių komentarų pavyzdys

 importuoti javax.ejb.Betalė; @Stateless public class MyStatelessBean {public String getGreeting () {return "Sveiki JavaWorld."; }} 

Pupoje be pilvo yra paprastas parašas, kuriame nereikia jokių argumentų ir pateikiama eilutė. Neleiskite paprastumui savęs apgauti: ši pupelė gali padaryti viską, ko jums reikia, įskaitant sąveiką su kitomis pupelėmis, paslaugomis ar jūsų programos duomenų sluoksniu.

@EJB: vartokite pupelių be pilietybės

Apibrėžę seanso pupelę, ją naudoti taip paprasta:

2 sąrašas. @EJB anotacijos pavyzdys

 viešosios klasės „MyServlet“ pratęsia „HttpServlet“ {@EJB „MyStatelessBean myEjb“; public void doGet („HttpServletRequest“ užklausa, „HttpServletResponse“ atsakymas) {response.getWriter (). write („EJB sako“ + testStatelessEjb.getGreeting ()); }} 

Čia mes įpurškiame pupelę be pilietybės į servletą ir tada jį galima naudoti. Atkreipkite dėmesį, kaip pupelė identifikuojama @EJB anotacija. Pavadinimas „be pilietybės“ nurodo, kad ši pupelė kliento neseks. Kadangi jis be pilietybės, mes taip pat žinome, kad šiai pupai taikoma sriegis, jei ji atlieka bet kokį darbą, išskyrus nurodytą metodą.

@Remote: apibrėžkite nuotolinę EJB sąsają

Ankstesniuose pavyzdžiuose aš padariau prielaidą, kad EJB ir EJB klientai veikia tame pačiame JVM. Jei įmonės pupelė ir jos klientas veikia atskirais JVM, tada EJB turi apibrėžti a @Nuotolinis sąsaja. Tokiu atveju turite nustatyti ir įdiegti sąsają, kaip parodyta 3 sąraše.

3 sąrašas. @Remote anotacijos pavyzdys

 @Remote viešoji sąsaja MyStatelessEjbRemote {String sayHello (String name); } 

Nuotolinė sąsaja siunčiama klientui iškviesti. Tada skambučius į jį įvykdys EJB serveris. „MyStatelessBean“ 4 sąraše pateiktas pavyzdys įgyvendina nuotolinę sąsają.

Sąrašas 4. Nuotolinės sąsajos įgyvendinimas

 viešoji klasė „MyStatelessBean“ įgyvendina „MyStatelessEjbRemote“ {...} 

Nuotolinė sąsaja yra įgyvendinama taip pat, kaip įprasta sąsają diegianti klasė. Kaip nuotolinio EJB vartotojas, kliento programa turi turėti galimybę pasiekti nuotolinės sąsajos klasės apibrėžimą. Galite supakuoti nuotolinės sąsajos klasės apibrėžimą kaip priklausomybę JAR.

Vietinė ir nuotolinė sąsaja

Nors svarbu žinoti, kaip įdiegti nuotolinę sąsają, praktiškai dažniausiai naudojama vietinė sąsaja. Vietinė sąsaja naudojama pagal numatytuosius nustatymus ir veikia, kai EJB yra iškviečiamas tame pačiame JVM kontekste. Nuotolinės sąsajos naudojimas pradedamas naudoti, kai programa paskirstoma keliems JVM.

Valstybinės sesijos pupelės ir pavienės pupelės

Būsenos apibrėžimo ir vartojimo procesas @Session pupelės ir @Singleton pupelės yra tas pats, ką jūs matėte @Betalė pupelės. Prisiminkite semantiką:

  • Keli seansai gali būti iš karto paruošti ir naudojami tam pačiam klientui.
  • Vieno pavidalo pupelė bus tik vieną kartą visoje programoje.

Siūlų saugumas ir planavimas naudojant pavienius vienetus

Siūlų sauga užtikrinta dirbant su seanso pupelėmis, tačiau tiek be pilietybės, tiek prie pavienių pupelių vienu metu gali pasiekti keli klientai. Kūrėjai, atsakydami už šių rūšių pupeles, yra atsakingi už siūlų saugumą.

„Singleton“ pupelės siūlo tam tikrą palaikymą siūlų saugai per @Lock anotacija. Norėdami naudoti skaitymo / rašymo teises kiekvienam metodui, galite naudoti „@Lock“ anotaciją pavienių pupelių metoduose. Du variantai yra @Lock (LockType.READ) arba @Lock (LockType.WRITE), kuris yra numatytasis nustatymas.

Kitas naudingas pavienių pupelių bruožas yra galimybė planuoti užduotis paprastu būdu, naudojant @ Tvarkaraštis anotacija. 5 sąraše parodyta, kaip planuoti užduotį kasdien vidurdienį.

5. sąrašas. Tvarkaraščio anotacijos pavyzdys

 @Singleton viešosios klasės „MySchedulerBean“ {@Schedule (hour = "12") void doIt () {System.out.println ("Hello at Noon!"); }} 

CDI ir EJB

CDI arba konteksto ir priklausomybės injekcija yra naujesnė įmonės specifikacija, kurią kai kurie kūrėjai pasiūlė pakeisti EJB.

Aukštu lygiu CDI siūlo bendrosios paskirties komponentų sistemą, o EJB išsiskiria turtingais, individualiais komponentais. Nors CDI naudoja priklausomybės injekciją, kad apibrėžtų ir nurodytų bet kurį programinės įrangos komponentą, EJB komponentai yra formaliau apibrėžti, o kiekvienas siūlo specialų galimybių rinkinį iš dėžutės. Abi specifikacijos planuojamos ateityje plėtoti kaip „Jakarta EE“ dalį, kur galiausiai bus išspręstas klausimas, ar CDI turėtų pakeisti EJB.

Išvada

„Enterprise JavaBeans“ buvo pirmoji specifikacija, pasiūliusi paprastą verslo logikos įkomponavimo ir panaudojimo būdą įmonės „Java“ programose. Toli gražu ne senas sunkiasvoris elgesys, EJB šiandien yra plonas, anotacijomis pagrįstas pagrindas, leidžiantis prieiti prie įvairiausių įmonės funkcijų iš karto. Apsvarstykite EJB, kai kitą kartą jūsų paprašys greitai išplėsti paskirstytą, keičiamo dydžio verslo programą. Galite būti maloniai nustebinti.

Šią istoriją „Kas yra EJB?„ Enterprise JavaBeans “raida“ iš pradžių paskelbė „JavaWorld“.