Uvod u EJB JNDI Lookup na poslužitelju aplikacija WildFly

1. Pregled

Poduzeće Java Beans (EJB) osnovni je dio specifikacije Java EE, čiji je cilj pojednostaviti razvoj distribuiranih aplikacija na razini poduzeća. Životnim ciklusom EJB-ova upravlja aplikacijski poslužitelj, poput JBoss WildFly ili Oracle GlassFish.

EJB-ovi pružaju robustan programski model koji olakšava implementaciju softverskih modula na razini poduzeća, jer je na aplikacijskom poslužitelju rješavanje problema koji nisu povezani s poslovnom logikom, poput rukovanja transakcijama, upravljanja životnim ciklusom komponenata ili ubrizgavanja ovisnosti.

Nadalje, već smo objavili dva članka koja pokrivaju osnovne koncepte EJB-a, pa ih slobodno pogledajte ovdje i ovdje.

U ovom uputstvu pokazat ćemo kako implementirati osnovni EJB modul na WildFly i nazvati EJB s udaljenog klijenta putem JNDI.

2. Implementacija EJB modula

Poslovna logika provodi se jednim ili više lokalnih / udaljenih poslovnih sučelja (poznatih i kao lokalni / udaljeni pogledi) ili izravno putem klasa koje ne implementiraju bilo koje sučelje (sučelja bez pogleda).

Vrijedno je napomenuti da se lokalna poslovna sučelja koriste kada će se grahu pristupiti od klijenata koji se nalaze u istom okruženju, tj. Istoj EAR ili WAR datoteci, dok su udaljena poslovna sučelja potrebna kada će se grahu pristupiti iz drugog okruženja. , tj. drugačiji JVM ili aplikacijski poslužitelj.

Stvorimo osnovni EJB modul koji će se sastojati od samo jednog zrna. Poslovna logika graha bit će izravna, ograničena na pretvaranje datog Niz na njegovu veliku verziju.

2.1. Definiranje udaljenog poslovnog sučelja

Prvo definirajmo jedno udaljeno poslovno sučelje, ukrašeno znakom @Daljinski bilješka. To je obvezno, prema specifikaciji EJB 3.x, jer će se grahu pristupiti s udaljenog klijenta:

@Remote javno sučelje TextProcessorRemote {String processText (Tekst niza); }

2.2. Definiranje graha bez državljanstva

Dalje, shvatimo poslovnu logiku primjenom spomenutog udaljenog sučelja:

@Stateless javna klasa TextProcessorBean implementira TextProcessorRemote {javni String processText (Tekst niza) {return text.toUpperCase (); }}

The TextProcessorBean razred je jednostavan Java razred, ukrašen znakom @Stateless bilješka.

Grah bez državljanstva, po definiciji, ne održava nikakvo konverzacijsko stanje sa svojim klijentima, čak i kad mogu održavati stanje instance na različitim zahtjevima. Njihov kolega, grah sa statusom, sačuva svoje konverzacijsko stanje i takav je skuplji za stvaranje za aplikacijski poslužitelj.

Kako u ovom slučaju gornja klasa nema stanje instance, može se učiniti apatridom. U slučaju da ima stanje, njegova upotreba u različitim zahtjevima klijenta uopće ne bi imala smisla.

Ponašanje graha je determinističko, tj. Nema nuspojava, kao što bi trebao biti dobro dizajniran grah: samo uzima ulaz Niz i vraća njegovu veliku verziju.

2.3. Ovisnosti Mavena

Dalje, moramo dodati javaee-api Maven artefakt modula, koji pruža sve API-je za specifikaciju Java EE 7, uključujući one potrebne za EJB-ove:

 javax javaee-api 7.0 

U ovom smo trenutku uspjeli stvoriti osnovni, ali funkcionalni EJB modul. Da bismo ga učinili dostupnim svim potencijalnim klijentima, moramo dodati artefakt u naše lokalno spremište Maven kao JAR datoteku.

2.4. Instaliranje EJB modula u Lokalno spremište

Postoji nekoliko metoda za postizanje toga. Najizravnije se sastoji od izvođenja Mavenovog životnog ciklusa očistiti - instalirati faze izgradnje:

mvn čista instalacija

Ova naredba instalira EJB modul kao ejbmodule-1.0.jar (ili bilo koji proizvoljni ID artefakta naveden u pom.xml datoteka), u naše lokalno spremište. Dodatne informacije o tome kako instalirati lokalni JAR s Mavenom potražite u ovom članku.

Pod pretpostavkom da je EJB modul ispravno instaliran u naše lokalno spremište, sljedeći je korak razvoj udaljene klijentske aplikacije koja koristi naše TextProcessorBean API.

3. Udaljeni klijent EJB

Poslovnu logiku udaljenog EJB klijenta držat ćemo krajnje jednostavnom: prvo izvršava JNDI pretraživanje kako bi dobio TextProcessorBean opunomoćenik. Nakon toga poziva proxy processText () metoda.

3.1. Ovisnosti Mavena

Moramo uključiti sljedeće Mavenove artefakte da bi EJB klijent mogao raditi kako se očekivalo:

 javax javaee-api 7.0 pod uvjetom da org.wildfly wildfly-ejb-client-bom 10.1.0.Final com.beldung.ejbmodule ejbmodule 1.0 

Iako je prilično očito zašto uključujemo javaee-api artefakt, uključivanje wildfly-ejb-klijent-bom nije. Artefakt je potreban za izvođenje udaljenih EJB poziva na WildFlyu.

I na kraju, ali ne najmanje važno, klijentu moramo učiniti dostupnim prethodni EJB modul, pa smo zato dodali ejbmodule ovisnost također.

3.2. Klasa klijenta EJB

S obzirom na to da klijent EJB poziva proxyja TextProcessorBean, bit ćemo vrlo pragmatični i imenovati klasu klijenta Primjena teksta:

javna klasa TextApplication {public static void main (String [] args) baca NamingException {TextProcessorRemote textProcessor = EJBFactory .createTextProcessorBeanFromJNDI ("ejb:"); System.out.print (textProcessor.processText ("uzorak teksta")); } privatna statička klasa EJBFactory {private static TextProcessorRemote createTextProcessorBeanFromJNDI (String namespace) baca NamingException {return lookupTextProcessorBean (prostor imena); } privatni statički TextProcessorRemote lookupTextProcessorBean (String namespace) baca NamingException {Context ctx = createInitialContext (); Niz appName = ""; Niz modulaName = "EJBModule"; Niz distctName = ""; Niz beanName = TextProcessorBean.class.getSimpleName (); String viewClassName = TextProcessorRemote.class.getName (); return (TextProcessorRemote) ctx.lookup (prostor imena + ime aplikacije + "/" + ime_modula + "/" + razlikovno ime + "/" + ime graha + "!" + pogledKlasa); } privatni statički kontekst createInitialContext () baca NamingException {Svojstva jndiProperties = nova svojstva (); jndiProperties.put (Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); jndiProperties.put (Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); jndiProperties.put (Context.PROVIDER_URL, "http-remoting: // localhost: 8080"); jndiProperties.put ("jboss.naming.client.ejb.context", istina); vrati novi InitialContext (jndiProperties); }}}

Jednostavno rečeno, sve to Primjena tekstaclass does je dohvaćanje grana proxyja i njegovo pozivanje processText () metoda s uzorkom niza.

Stvarno traženje vrši ugniježđena klasa EJBFactory, koji prvi stvara JNDI InitialContext instanca, zatim prosljeđuje potrebne JNDI parametre konstruktoru i na kraju ga koristi za traženje proxyja graha.

Primijetite da se traženje vrši pomoću WildFlyjevog vlasničkog prostora imena "ejb:". Ovo optimizira postupak pretraživanja, jer klijent odgađa vezu s poslužiteljem dok se proxy eksplicitno ne pozove.

Vrijedno je napomenuti i da je moguće potražiti proxy graha, a da se uopće ne pribjegava prostoru imena "ejb". Međutim, propustili bismo sve dodatne prednosti lijenih mrežnih veza, čineći tako klijenta puno manje izvedbenim.

3.3. Postavljanje EJB konteksta

Klijent bi trebao znati s kojim hostom i portom uspostaviti vezu kako bi izvršio traženje graha. U ovoj mjeri, klijent zahtijeva postavljanje vlasničkog WildFly EJB konteksta, koji je definiran s jboss-ejb-client.svojstva datoteka smješten u svojoj stazi, obično ispod src / glavni / resursi mapa:

endpoint.name = client-endpoint remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED = false remote.connections = zadani remote.connection.default.host = 127.0.0.1 remote.connection.default.port = 8080 daljinski .connection.default.connect.options.org.xnio.Options .SASL_POLICY_NOANONYMOUS = false remote.connection.default.username = myusername remote.connection.default.password = mypassword

Datoteka je prilično razumljiva, jer pruža sve parametre potrebne za uspostavljanje veze s WildFlyom, uključujući zadani broj udaljenih veza, zadani host i port i korisničke vjerodajnice. U ovom slučaju veza nije šifrirana, ali može biti kad je omogućen SSL.

Posljednje što treba uzeti u obzir je to ako veza zahtijeva provjeru autentičnosti, potrebno je dodati korisnika u WildFly putem add-user.sh/add-user.bat korisnost.

4. Zaključak

Izvođenje EJB pretraživanja na WildFlyu jednostavno je, sve dok se strogo pridržavamo navedenog postupka.

Kao i obično, svi primjeri uključeni u ovaj članak dostupni su na GitHubu ovdje i ovdje.


$config[zx-auto] not found$config[zx-overlay] not found