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.