Grahovi sesije Java EE

1. Uvod

Grah za sesije poduzeća može se široko klasificirati u:

  1. Grah za sjednice bez državljanstva
  2. Grah sa zasjedanjem

U ovom kratkom članku razgovarat ćemo o ove dvije glavne vrste graha za sjednice.

2. Postavljanje

Korištenje Enterprise Beans 3.2, pobrinite se da dodate najnoviju verziju u ovisnosti odjeljak pom.xml datoteka:

 javax javaee-api 7.0 
Najnovija ovisnost može se naći u spremištu Maven. Ova ovisnost osigurava da su svi API-ji Java EE 7 dostupni tijekom vremena kompajliranja. The pod uvjetom opseg osigurava da se jednom rasporedi; ovisnost će osigurati spremnik u kojem je postavljen.

3. Grah bez državljanstva

Grah sesije bez državljanstva vrsta je poslovnog graha koji se obično koristi za obavljanje neovisnih operacija. Nema pridruženo stanje klijenta, ali može sačuvati svoje stanje instance.

Pogledajmo primjer kako bismo pokazali kako grah bez državljanstva djeluje.

3.1 Stvaranje graha bez državljanstva

Prvo, kreirajmo Bez državljanstvaEJB grah. Koristimo @Stateless napomena za označavanje graha kao bez državljanstva:

@Stateless javna klasa StatelessEJB {naziv javnog niza; }

Tada stvaramo prvog klijenta gore navedenog graha bez državljanstva, tzv EJBClient1:

javna klasa EJBClient1 {@EJB javni apatridEJB apatridEJB; }

Zatim deklariramo drugog klijenta, imenovanog EJBClient2, koji pristupa istom grahu bez državljanstva:

javna klasa EJBClient2 {@EJB javni apatridEJB apatridEJB; }

3.2 Ispitivanje graha bez državljanstva

Da bismo testirali apatridnost EJB-a, možemo koristiti dva klijenta koja smo gore proglasili na sljedeći način:

@RunWith (Arquillian.class) javna klasa StatelessEJBTest {@Inject private EJBClient1 ejbClient1; @Inject private EJBClient2 ejbClient2; @Test javna praznina givenOneStatelessBean_whenStateIsSetInOneBean _secondBeanShouldHaveSameState () {ejbClient1.statelessEJB.name = "Klijent 1"; assertEquals ("Klijent 1", ejbClient1.statelessEJB.name); assertEquals ("Klijent 1", ejbClient2.statelessEJB.name); } @Test javna praznina givenOneStatelessBean_whenStateIsSetInBothBeans _secondBeanShouldHaveSecondBeanState () {ejbClient1.statelessEJB.name = "Klijent 1"; ejbClient2.statelessEJB.name = "Klijent 2"; assertEquals ("Klijent 2", ejbClient2.statelessEJB.name); } // Arquillian kôd za postavljanje uklonjen za kratko}

Započinjemo ubrizgavanjem dva EBJ klijenta u jedinični test.

Zatim smo u prvoj testnoj metodi postavili Ime varijabla u EJB-u koja je ubrizgana EJBClient1 na vrijednost Klijent 1. Sada, kada usporedimo vrijednost Ime varijabla kod oba klijenta, trebali bismo vidjeti da je vrijednost jednaka. To pokazuje da stanje nije sačuvano u grahu bez državljanstva.

Pokažimo da je to istina na drugačiji način. U drugoj testnoj metodi vidimo da kada postavimo Ime varijabla u drugom klijentu 'prepisuje' bilo koju vrijednost koja joj je dana putem ejbClient1.

4. Grah s državom

Grahovi sesija sa statusom održavaju stanje i unutar transakcija i između njih. Zbog toga je svaki grah sesije sa statusom povezan s određenim klijentom. Spremnici mogu automatski spremiti i dohvatiti stanje graha dok upravljaju spremištima instanci graha sesije sa statusom.

4.1 Stvaranje Stateful graha

Grah sesije sa statusom označen je znakom @ Državno bilješka. Kôd graha sa statusom je sljedeći:

@Stateful javna klasa StatefulEJB {naziv javnog niza; }

Prvi lokalni klijent za naš grah s statusom zapisan je kako slijedi:

javna klasa EJBClient1 {@EJB public StatefulEJB statefulEJB; }

Nazvao je drugi klijent EJBClient2 je također stvoren baš kao i EJBClient1:

javna klasa EJBClient2 {@EJB public StatefulEJB statefulEJB; }

4.2 Ispitivanje graha Stateful

Funkcionalnost graha s statusom ispitana je u EJBStatefulBeanTest jedinični test na sljedeći način:

@RunWith (Arquillian.class) javna klasa StatefulEJBTest {@Inject private EJBClient1 ejbClient1; @Inject private EJBClient2 ejbClient2; @Test javna praznina givenOneStatefulBean_whenTwoClientsSetValueOnBean _thenClientStateIsMaintain () {ejbClient1.statefulEJB.name = "Klijent 1"; ejbClient2.statefulEJB.name = "Klijent 2"; assertNotEquals (ejbClient1.statefulEJB.name, ejbClient2.statefulEJB.name); assertEquals ("Klijent 1", ejbClient1.statefulEJB.name); assertEquals ("Klijent 2", ejbClient2.statefulEJB.name); } // Arquillian kod za postavljanje uklonjen radi kratkoće}

Kao i prije, dva EJB klijenta ubrizgavaju se u jedinični test. U testnoj metodi možemo vidjeti da je vrijednost Ime varijabla se postavlja putem ejbClient1 klijenta i održava se iako vrijednost Ime postavljen putem ejbClient2 drugačije je. To pokazuje da se zadržava stanje EJB-a.

5. Građ bez sesije bez državljanstva

Sada ćemo pogledati glavnu razliku između dvije vrste graha sesije.

5.1 Grah bez državljanstva

  • Grah sesije bez državljanstva ne održava stanje s klijentom. Iz tog se razloga mogu koristiti za stvaranje grupe objekata koji komuniciraju s više klijenata
  • Budući da grah bez državljanstva nema stanja po klijentu, bolji je učinak
  • Oni mogu istovremeno obrađivati ​​više zahtjeva više klijenata i
  • Može se koristiti za dohvaćanje objekata iz baza podataka

5.2 Grah sa stanjem

  • Grahovi sesija sa stanjem mogu održavati stanje s više klijenata, a zadatak se ne dijeli među klijentima
  • Država traje za vrijeme trajanja sesije. Nakon što je sjednica uništena, država se ne zadržava
  • Spremnik može serializirati i pohraniti stanje kao ustajalo stanje za buduću upotrebu. To se radi radi uštede resursa aplikacijskog poslužitelja i za podršku kvarovima graha i predstavlja pasivizaciju
  • Može se koristiti za rješavanje problema tipa proizvođač-potrošač

6. Zaključak

Stoga smo stvorili dvije vrste graha sesije i odgovarajuće klijente za pozivanje metoda iz graha. Projekt pokazuje ponašanje dviju glavnih vrsta graha sesije.

Kao i uvijek, izvorni kôd članka dostupan je na GitHubu.