Ohjelmointi

Mikä on EJB? Enterprise JavaBeansin kehitys

Enterprise JavaBeans (EJB) on eritelmä suurten, hajautettujen yrityssovellusten kehittämiseksi Java-alustalle. EJB 1.0 julkaistiin vuonna 1998. Uusin julkaisu, EJB 3.2.3, on hyväksytty sisällytettäväksi Jakarta EE: hen, jossa se nimetään uudelleen Jakarta Enterprise Beansiksi.

EJB-arkkitehtuuri

EJB-arkkitehtuuri koostuu kolmesta pääkomponentista: yrityksen pavut (EJB), EJB-säilö ja Java-sovelluspalvelin. EJB: t kulkevat EJB-säilön sisällä ja EJB-säilö Java-sovelluspalvelimen sisällä.

EJB: tä on kahta tyyppiä - istuntopavut ja viestiohjatut pavut:

  • Istunto pavut Asiakas käyttää niitä ja asettaa yrityksen toiminnot, kuten tapahtumat ja resurssienhallinnan, asiakkaan saataville ohjelmallisesti.
  • Viestipohjaiset pavut myös kapseloi ja toimittaa yrityksen toiminnallisuutta, mutta ne ovat asynkronisia ja tapahtumavetoisia. Viestipohjaiset pavut kuuntelevat ja reagoivat tapahtumiin, eikä asiakas voi vedota niihin.

Kun niitä on käytetty pysyvyyden tarjoamiseen EJB-järjestelmässä, Java Persistence -sovellusliittymä on syrjäyttänyt entisöintipavut. Jatka lukemista saadaksesi lisätietoja istutuspapuista ja viestipohjaisista papuista.

EJB vs JavaBeans

Enterprise JavaBeans oli ensimmäinen Java EE: n komponenttipohjainen kehitysmalli. EJB on samanlainen kuin JavaBeans, koska se on komponenttipohjainen, mutta tässä samankaltaisuus päättyy:

  • A JavaBean on Java-luokka, joka kapseloi useita objekteja ja noudattaa tiettyjä käytäntöjä. JavaBeansia käytetään pääasiassa asiakaspuolen kehitykseen.
  • An yrityspapu (EJB) on Java-luokka, joka on täynnä erityisiä palvelinpuolen ominaisuuksia. Yrityspapuja käytetään laajamittaisissa yrityssovelluksissa ja -järjestelmissä.

Istunto pavut

A istunto papu on yleisin yrityspaputyyppi, joka edustaa joukkoa liiketoimintatoimintoja, joihin asiakas voi soittaa. Asiakas voi tässä tapauksessa olla toinen luokka paikallisessa JVM: ssä tai etäkutsu.

EJB-kontti hallinnoi istutuspapujen elinkaarta, joka määräytyy papun tilan mukaan:

  • Tilattomat istuntopavut ovat samanlaisia ​​kuin Java Servlet -sovellusliittymän pyyntöalue. Tilattomat istuntopavut sisältävät palan soitettavia toimintoja, mutta ovat muuten valtiottomia.
  • Tilalliset istuntopavut liitetään vain yhteen asiakkaaseen ja liitetään kyseisen asiakkaan käynnissä olevaan istuntoon. Tilatiedot istuntopavut toimivat samalla tavalla kuin Servlet-sovellusliittymän istunnon laajuus.
  • Yksittäiset pavut ovat samanlaisia ​​kuin Servlet-sovellusliittymän sovellusalue. Yksittäisen istunnon papu on olemassa vain kerran kullekin asiakkaalle.

Langan turvallisuus istutuspapuilla

Tilallista istuntopapua voi käyttää vain yksi asiakas kerrallaan, joten langan turvallisuus taataan, kun työskentelet tämäntyyppisten papujen kanssa. Tilattomat istutuspavut ja yksittäiset pavut ovat joustavampia, mikä mahdollistaa samanaikaiset yhteydet, joita kehittäjän on hallinnoitava. Olet vastuussa langan turvallisuudesta työskennellessäsi tämän tyyppisten pavujen kanssa.

Viestipohjaiset pavut

Viestipohjaiset pavut (MDB) kutsutaan JMS (Java Message Service) -viesteillä. JMS toimii kuin hajautettu komentomalli, jossa viestiohjattu papu toimii komennon kuuntelijana. Kun viesti saapuu aiheeseen tai jonoon, kyseisen aiheen viestiohjattu papu kuuntelee.

Viestipohjaisia ​​papuja ei käytetä yhtä yleisesti kuin istuntopapuja, mutta ne ovat tehokkaita. Koska ne ovat asynkronisia ja tapahtumavetoisia, ne ovat erityisen hyödyllisiä pitkäaikaisille töille, joissa on tärkeää säästää resursseja.

Yksinkertaisin arkkitehtuuri koostuisi EJB-sovelluksesta ja sen säilöstä ja palvelimesta, jotka koordinoivat MDB: itä käsittelevää viestipalvelua. Tuotannossa arkkitehtuurisi todennäköisesti sisältäisi kolmannen komponentin, joka on omistettu pavujen kulutukselle. Kehityksessä kaikki nämä komponentit voisivat toimia samalla paikallisella koneella.

Kuvassa 1 on tyypillinen tapahtumapohjainen arkkitehtuuri, jossa on viestiohjattuja papuja.

Matthew Tyson

Työskentely viestipohjaisten papujen kanssa on enemmän kuin istuntopapujen käyttö. Tapahtumapohjaisessa ympäristössä tarvitset yleensä viestivälittäjän, kuten ActiveMQ.

Vaikka istuntopavut ovat yksinkertaisempia ja siten yleisemmin käytettyjä EJB: ssä, tapahtumavetoisista arkkitehtuureista on tullut suosittuja etenkin mikropalvelujen räjähdyksen myötä.

EJB-merkinnät

Yrityspapujen määritteleminen ja kuluttaminen oli monille kehittäjille kiinniottokohta EJB 3.0: een saakka, joka toi merkinnät EJB-määritykseen. Huomautusten avulla yrityspapujen määritys on erittäin helppoa Java EE: n monipuolisille toiminnoille. Jatka lukemista aloittaaksesi EJB-merkintöjen kanssa.

@Stateless: Määritä valtioton istuntopapu

Määritä luokka valtiottomaksi istuntopapuksi käyttämällä javax.ejb.Stateless merkintä, kuten luettelossa 1 on esitetty.

Listaus 1. @Stateless-huomautusesimerkki

 tuoda javax.ejb.Stateless; @Stateless public class MyStatelessBean {public String getGreeting () {return "Hello JavaWorld."; }} 

Tämä valtioton papu sisältää yksinkertaisen allekirjoituksen, joka ei sisällä argumentteja ja palauttaa merkkijonon. Älä kuitenkaan anna yksinkertaisuuden huijata sinua: tämä papu voi tehdä kaiken mitä tarvitset, mukaan lukien vuorovaikutus muiden papujen, palveluiden tai sovelluksesi tietokerroksen kanssa.

@EJB: Kuluta valtioton istuntopapu

Kun olet määrittänyt istuntopapun, sen käyttö on niin yksinkertaista:

Luettelo 2. @EJB-merkinnästä

 julkinen luokka MyServlet laajentaa HttpServlet {@EJB MyStatelessBean myEjb; public void doGet (HttpServletRequest-pyyntö, HttpServletResponse-vastaus) {response.getWriter (). write ("EJB sanoo" + testStatelessEjb.getGreeting ()); }} 

Ruiskutamme tässä kansalaisuudettoman pavun servletiin, ja sitten se on käytettävissä. Huomaa, kuinka papu tunnistetaan @EJB merkintä. "Tilaton" -merkintä kertoo meille, että tämä papu ei seuraa asiakasta. Koska se on valtioton, tiedämme myös, että tämä papu on langoitettu, jos se tekee mitään työtä kutsutun menetelmän ulkopuolella.

@Remote: Määritä EJB-etäkäyttöliittymä

Edellä olevissa esimerkeissä oletin, että EJB- ja EJB-asiakas toimivat samassa JVM: ssä. Jos yrityksen papu ja sen asiakas toimivat erillisissä JVM: issä, EJB: n on määriteltävä a @Etä käyttöliittymä. Tässä tapauksessa sinun on määriteltävä ja toteutettava käyttöliittymä, kuten luettelossa 3 on esitetty.

Luettelo 3. @Remote-merkintäesimerkki

 @Remote julkinen käyttöliittymä MyStatelessEjbRemote {String sayHello (String name); } 

Etärajapinta lähetetään asiakkaalle kutsuttavaksi. EJB: n palvelinpuolen toteutus täyttää sitten siihen soitetut puhelut. OmaStatelessBean esimerkki luettelossa 4 toteuttaa etärajapinnan.

Listaus 4. Etärajapinnan toteuttaminen

 julkinen luokka MyStatelessBean toteuttaa MyStatelessEjbRemote {...} 

Etärajapinta on toteutettu aivan kuten tavallinen luokka, joka toteuttaa rajapinnan. EJB-etäkäyttäjänä asiakassovelluksen on voitava käyttää etärajapinnan luokan määritelmää. Voit pakata etärajapinnan luokan määritelmän riippuvuussyistä JAR.

Paikallinen vs. etäkäyttöliittymä

Vaikka etäkäyttöliittymän toteuttaminen on tärkeää, käytännössä on yleisempää käyttää paikallista käyttöliittymää. Paikallista rajapintaa käytetään oletusarvoisesti ja se toimii aina, kun EJB kutsutaan samassa JVM-kontekstissa. Etäkäyttöliittymän käyttö tulee esiin, kun sovellus jaetaan useille JVM-laitteille.

Tilavat istuntopavut ja yksittäiset pavut

Prosessi tilan määrittelemiseksi ja kuluttamiseksi @Session pavut ja @Singleton pavut on sama kuin mitä olet nähnyt @Stateless pavut. Muista semantiikka:

  • Useita istuntopapuja voidaan instantisoida ja käyttää samalle asiakkaalle.
  • Yksittäinen papu on olemassa vain kerran koko sovelluksessa.

Langan turvallisuus ja aikataulutus singletoneilla

Langan turvallisuus on sisäänrakennettu, kun työskentelet istuntopapujen kanssa, mutta useat asiakkaat voivat käyttää sekä valtiottomia että yksittäisiä papuja samanaikaisesti. Kehittäjät vastaavat langan turvallisuudesta toteuttaessaan tämäntyyppisiä papuja.

Singleton-pavut tarjoavat jonkin verran tukea langan turvallisuudelle @Lukko merkintä. Voit käyttää @Lock-merkintää yksittäisissä papumenetelmissä määrittääksesi luku- ja kirjoitusoikeudet kullekin menetelmälle. Kaksi vaihtoehtoa ovat @Lock (LockType.READ) tai @Lock (LockType.WRITE), joka on oletusarvo.

Toinen hyödyllinen ominaisuus yksittäisissä pavuissa on kyky ajoittaa tehtävät yksinkertaisella tavalla @Ajoittaa merkintä. Listaus 5 näyttää, kuinka tehtävä ajoitetaan päivittäin keskipäivällä.

Luettelo 5. @Aikataulu -merkintäesimerkki

 @Singleton public class MySchedulerBean {@Schedule (hour = "12") void doIt () {System.out.println ("Hei keskipäivällä!"); }} 

CDI vs. EJB

CDI eli Context and Dependency Injection on uudempi yritysmääritys, jonka jotkut kehittäjät ovat ehdottaneet korvaavan EJB: n.

Korkealla tasolla CDI tarjoaa yleiskäyttöisen komponenttikehyksen, kun taas EJB erottuu runsaasti esitetyistä yksittäisistä komponenteistaan. Vaikka CDI käyttää riippuvuusinjektiota minkä tahansa ohjelmistokomponentin määrittelemiseen ja viittaamiseen, EJB-komponentit määritellään muodollisemmin, ja jokainen tarjoaa tietyn kyvykkyyden heti. Molemmat tiedot on suunniteltu tulevaa kehitystä varten osana Jakarta EE: tä, jossa lopulta ratkaistaan ​​kysymys siitä, pitäisikö CDI korvata EJB.

Johtopäätös

Enterprise JavaBeans oli ensimmäinen eritelmä, joka tarjosi helpon tavan sisällyttää liiketoimintalogiikkaa ja käyttää sitä uudelleen Java-sovelluksissa. EJB on kaukana vanhan raskaasta behemothista, ja se on nykyään kevyt, huomautuksiin perustuva kehys, jonka avulla voit käyttää laajaa valikoimaa yritystoimintoja heti kättelyssä. Harkitse EJB: tä seuraavan kerran, kun sinua pyydetään luomaan nopeasti hajautettu, skaalautuva yrityssovellus. Saatat olla iloisesti yllättynyt.

Tämän tarinan "Mikä on EJB? Enterprise JavaBeansin evoluutio" julkaisi alun perin JavaWorld.