Vodič za postavljanje EJB-a

1. Pregled

U ovom ćemo članku razgovarati o tome kako započeti s razvojem Enterprise JavaBean (EJB).

Poduzetnički JavaBeans koriste se za razvoj skalabilnih, distribuiranih komponenata na strani poslužitelja i obično obuhvaćaju poslovnu logiku aplikacije.

Koristit ćemo WildFly 10.1.0 kao naše preferirano poslužiteljsko rješenje možete slobodno koristiti bilo koji aplikacijski poslužitelj Java Enterprise po vašem izboru.

2. Postavljanje

Počnimo s raspravom o ovisnostima o Mavenu potrebnim za razvoj EJB 3.2 i o tome kako konfigurirati poslužitelj aplikacija WildFly koristeći dodatak Maven Cargo ili ručno.

2.1. Ovisnost Mavena

Da bi se koristio EJB 3.2, obavezno dodajte najnoviju verziju u ovisnosti odjeljak vašeg pom.xml datoteka:

 javax javaee-api 7.0 
Najnoviju ovisnost pronaći ćete 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 će se jednom razviti, ovisnost pružiti spremnik u kojem je postavljen.

2.2. Postavljanje WildFly s Maven Cargoom

Razgovarajmo o tome kako koristiti dodatak Maven Cargo za postavljanje poslužitelja.

Evo koda za profil Maven koji pruža WildFly poslužitelj:

 wildfly-samostalni org.codehaus.cargo cargo-maven2-plugin $ {cargo-maven2-plugin.version wildfly10x //download.jboss.org/ wildfly / 10.1.0.Final / wildfly-10.1.0.Final.zip 127.0. 0,0 9990 testKorisnik: admin1234! 

Koristimo dodatak za preuzimanje WildFly 10.1 zip izravno s web stranice WildFly-a. Koji se zatim konfigurira, osiguravajući da ime domaćina je 127.0.0.1 i postavljanje porta na 9990.

Zatim stvaramo test korisnika pomoću cargo.servlet.korisnici svojstvo, s korisničkim id testUser i lozinku admin1234 !.

Sad kad je konfiguracija dodatka dovršena, trebali bismo moći pozvati Maven-ov cilj i omogućiti preuzimanje, instaliranje, pokretanje i instaliranje aplikacije na poslužitelju.

Da biste to učinili, idite na ejb-daljinski direktorija i pokrenite sljedeću naredbu:

mvn čist paket tereta: trči

Kad prvi put pokrenete ovu naredbu, ona će preuzeti zip datoteku WildFly 10.1, izvući je i izvršiti instalaciju, a zatim je pokrenuti. Također će dodati gore opisanog testnog korisnika. Sva daljnja izvršavanja neće ponovo preuzeti zip datoteku.

2.3. Ručno postavljanje WildFly-a

Da biste WildFly postavili ručno, morate sami preuzeti instalacijsku zip datoteku s web mjesta wildfly.org. Sljedeći su koraci prikaz na visokoj razini postupka postavljanja poslužitelja WildFly:

Nakon preuzimanja i raspakiranja sadržaja datoteke na mjesto na koje želite instalirati poslužitelj, konfigurirajte sljedeće varijable okruženja:

JBOSS_HOME = / Users / $ USER /../ wildfly.x.x.Final JAVA_HOME = `/ usr / libexec / java_home -v 1.8`

Zatim u kanta za smeće direktorij, pokrenite ./standalone.sh za operativne sustave temeljene na Linuxu ili ./standalone.bat za Windows.

Nakon ovoga morat ćete dodati korisnika. Ovaj će se korisnik koristiti za povezivanje s udaljenim EJB grahom. Da biste saznali kako dodati korisnika, trebali biste pogledati dokumentaciju "dodaj korisnika".

Za detaljne upute za postavljanje posjetite WildFly-ovu dokumentaciju Početak rada.

Projekt POM konfiguriran je za rad s dodatkom Cargo i ručnom konfiguracijom poslužitelja postavljanjem dva profila. Prema zadanim postavkama odabran je dodatak Cargo. Međutim, za postavljanje aplikacije na već instaliran, konfiguriran i pokrenut poslužitelj Wildfly izvršite sljedeću naredbu u ejb-daljinski imenik:

mvn čista instalacija wildfly: deploy -Pwildfly-runtime

3. Daljinski nasuprot Lokalno

Poslovno sučelje za grah može biti bilo koje lokalno ili daljinski.

A @ Lokalno anotiranom grahu može se pristupiti samo ako se nalazi u istoj aplikaciji kao grah koji vrši pozivanje, tj. ako se nalaze u istoj aplikaciji .uho ili .rat.

A @Daljinski anotiranom zrnu može se pristupiti iz druge aplikacije, tj. aplikacije koja boravi u drugoj JVM ili poslužitelja aplikacija.

Postoje neke važne točke koje morate imati na umu prilikom dizajniranja rješenja koje uključuje EJB-ove:

  • The java.io.Serializable, java.io.Externalizable i sučelja definirana javax.ejb Paket se uvijek isključuje kada je grah deklariran sa @ Lokalno ili @Daljinski
  • Ako je klasa graha udaljena, tada će sva implementirana sučelja biti udaljena
  • Ako klasa graha ne sadrži napomenu ili ako @ Lokalno naznačena je napomena, tada se pretpostavlja da su sva implementirana sučelja lokalna
  • Svako sučelje koje je izričito definirano za grah koji ne sadrži sučelje mora se deklarirati kao @ Lokalno
  • Izdanje EJB 3.2 nastoji pružiti više detalja u situacijama kada lokalna i udaljena sučelja trebaju biti izričito definirana

4. Stvaranje Daljinski EJB

Prvo napravimo sučelje graha i nazovimo ga Pozdrav svijete:

@Udaljeno javno sučelje HelloWorld {String getHelloWorld (); }

Sada ćemo implementirati gornje sučelje i imenovati konkretnu implementaciju HelloWorldBean:

@Stateless (name = "HelloWorld") javna klasa HelloWorldBean implementira HelloWorld {@Resource private SessionContext context; @Override public String getHelloWorld () {return "Dobro došli u Vodič za EJB!"; }}

Napomena @Stateless napomena na deklaraciji klase. Označava da je ovaj grah grah bez državljanstva. Ova vrsta graha nema povezano stanje klijenta, ali može sačuvati svoje stanje instance i obično se koristi za obavljanje neovisnih operacija.

The @Resurs napomena ubrizgava kontekst sesije u udaljeni grah.

The SessionContext sučelje omogućuje pristup kontekstu runtime sesije koji spremnik pruža za instancu graha sesije. Spremnik zatim prolazi kroz SessionContext sučelje s instancom nakon izrade instance. Kontekst sesije ostaje povezan s tom instancom tijekom svog života.

Spremnik EJB obično stvara skup objekata graha bez državljanstva i koristi ih za obradu zahtjeva klijenta. Kao rezultat ovog mehanizma udruživanja, nije zajamčeno da će se vrijednosti varijabli instance održavati u svim pozivima metode pretraživanja.

5. Daljinsko postavljanje

U ovom ćemo odjeljku razgovarati o tome kako postaviti Maven za izgradnju i pokretanje aplikacije na poslužitelju.

Pogledajmo dodatke jedan po jedan.

5.1. Dodatak EJB

EJB dodatak koji je dan u nastavku koristi se za pakiranje EJB modula. Verziju EJB odredili smo kao 3.2.

Sljedeća konfiguracija dodatka koristi se za postavljanje ciljnog JAR-a za grah:

 maven-ejb-plugin 2.4 3.2 

5.2. Postavite daljinski EJB

Da biste rasporedili grah na WildFly poslužitelju, osigurajte da poslužitelj radi i radi.

Tada ćemo za pokretanje daljinskog postavljanja trebati pokrenuti sljedeće Mavenove naredbe protiv datoteke pom u datoteci ejb-daljinski projekt:

mvn čista instalacija 

Tada bismo trebali pokrenuti:

mvn wildfly: raspoređivanje

Ili ga možemo ručno rasporediti kao admin korisnik s administratorske konzole poslužitelja aplikacija.

6. Postavljanje klijenta

Nakon stvaranja udaljenog graha trebali bismo testirati raspoređeni grah stvaranjem klijenta.

Prvo, razgovarajmo o postavci Mavena za klijentski projekt.

6.1. Postavljanje klijenta na strani klijenta

Da bismo pokrenuli EJB3 klijent moramo dodati sljedeće ovisnosti:

 org.wildfly wildfly-ejb-client-bom pom uvoz 

Za pokretanje klijenta ovisimo o udaljenim poslovnim sučeljima EJB ove aplikacije. Dakle, moramo navesti ovisnost o JAR klijentu EJB. U nadređeni pom dodamo sljedeće:

 com.baeldung.ejb ejb-daljinski ejb 

The je naznačeno kao ejb.

6.2. Pristup udaljenom grahu

Moramo stvoriti datoteku pod src / glavni / resursi i imenovati ga jboss-ejb-client.svojstva koji će sadržavati sva svojstva potrebna za pristup postavljenom grahu:

remote.connections = zadani remote.connection.default.host = 127.0.0.1 remote.connection.default.port = 8080 remote.connection.default.connect.options.org.xnio.Options .SASL_POLICY_NOANONYMOUS = lažno remote.connection.default. connect.options.org.xnio.Options .SASL_POLICY_NOPLAINTEXT = false remote.connection.default.connect.options.org.xnio.Options .SASL_DISALLOWED_MECHANISMS = $ {host.auth: JBOSS-LOCAL-USER} remote.connection.default.username. = testUser remote.connection.default.password = admin1234! 

7. Stvaranje klijenta

Klasa koja će pristupiti i koristiti daljinski upravljač Pozdrav svijete grah je stvoren u EJBClient.java koja je u com.baeldung.ejb.client paket.

7.1 URL udaljenog graha

Udaljeni grah nalazi se putem URL-a koji je u skladu sa sljedećim formatom:

ejb: $ {appName} / $ {moduleName} / $ {distinctName} / $ {beanName}! $ {viewClassName}
  • The $ {appName} je naziv aplikacije implementacije. Ovdje nismo koristili nijednu EAR datoteku, već jednostavnu implementaciju JAR-a ili WAR-a, pa će ime aplikacije biti prazno
  • The $ {moduleName} je ime koje smo ranije postavili za našu implementaciju, pa je tako ejb-daljinski
  • The $ {distinctName} je određeno ime koje se prema želji može dodijeliti implementacijama koje su raspoređene na poslužitelju. Ako se implementacija ne koristi razlikovno ime tada možemo koristiti prazan niz u imenu JNDI za razlikovno ime, kao što smo učinili u našem primjeru
  • The $ {beanName} varijabla je jednostavan naziv izvedbene klase EJB-a, pa je u našem primjeru Pozdrav svijete
  • $ {viewClassName} označava potpuno kvalificirano ime sučelja udaljenog sučelja

7.2 Logika traženja

Dalje, pogledajmo našu jednostavnu logiku pretraživanja:

javno pretraživanje HelloWorld () baca NamingException {String appName = ""; Niz moduleName = "daljinski"; Niz distctName = ""; Niz beanName = "HelloWorld"; String viewClassName = HelloWorld.class.getName (); String toLookup = String.format ("ejb:% s /% s /% s /% s!% S", ime aplikacije, Ime modula, Različito ime, BeanName, viewClassName); return (HelloWorld) context.lookup (toLookup); }

Da biste se povezali s grah upravo smo stvorili, trebat će nam URL koji možemo uvesti u kontekst.

7.3 Početni kontekst

Sada ćemo stvoriti / inicijalizirati kontekst sesije:

javna praznina createInitialContext () baca NamingException {Svojstva prop = nova svojstva (); prop.put (Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); prop.put (Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFacto [ERROR] prop.put (Context.PROVIDER_URL," http-remoting: //127.0.0.1: 8080 "); prop.put Context.SECURITY_PRINCIPAL, "testUser"); prop.put (Context.SECURITY_CREDENTIALS, "admin1234!"); Prop.put ("jboss.naming.client.ejb.context", false); context = new InitialContext (prop); }

Da bismo se povezali s udaljenim grahom, potreban nam je JNDI kontekst. Tvornicu konteksta pruža artefakt Maven org.jboss: jboss-daljinsko-imenovanje i to stvara JNDI kontekst, koji će riješiti URL konstruiran u Pogledaj metodu, u proksije za proces udaljenog poslužitelja aplikacija.

7.4 Definirajte parametre pretraživanja

Tvorničku klasu definiramo parametrom Kontekst.INITIAL_CONTEXT_FACTORY.

The Kontekst.URL_PKG_PREFIXES koristi se za definiranje paketa za traženje dodatnog konteksta imenovanja.

Parametar org.jboss.ejb.client.scoped.context = false govori kontekstu da pročita parametre veze (poput hosta veze i porta) s pružene karte umjesto iz konfiguracijske datoteke classpath. To je posebno korisno ako želimo stvoriti JAR paket koji bi se trebao moći povezati s različitim hostovima.

Parametar Kontekst.PROVIDER_URL definira shemu povezivanja i treba započeti s http-daljinsko: //.

8. Ispitivanje

Da bismo testirali implementaciju i provjerili postavke, možemo pokrenuti sljedeći test kako bismo bili sigurni da sve radi ispravno:

@Test javni void testEJBClient () {EJBClient ejbClient = novi EJBClient (); HelloWorldBean bean = novi HelloWorldBean (); assertEquals (bean.getHelloWorld (), ejbClient.getEJBRemoteMessage ()); }

Prolaskom testa sada možemo biti sigurni da sve funkcionira kako se očekivalo.

9. Zaključak

Tako smo stvorili EJB poslužitelj i klijenta koji poziva metodu na udaljenom EJB. Projekt se može izvesti na bilo kojem aplikacijskom poslužitelju pravilnim dodavanjem ovisnosti za taj poslužitelj.

Cijeli projekt možete pronaći na GitHubu.