Sprievodca integráciou pre jar a EJB

1. Prehľad

V tomto článku si ukážeme, ako na to integrovať jarné a vzdialené Enterprise Java Beans (EJB).

Aby sme to dosiahli, vytvoríme niekoľko EJB a potrebné vzdialené rozhrania a potom ich spustíme vo vnútri kontajnera JEE. Potom spustíme našu jarnú aplikáciu a pomocou vzdialených rozhraní vytvoríme inštancie našich bôbov, aby mohli uskutočňovať vzdialené hovory.

Ak existujú pochybnosti o tom, čo sú EJB alebo ako fungujú, už sme tu uverejnili úvodný článok k tejto téme.

2. Nastavenie EJB

Budeme musieť vytvoriť naše vzdialené rozhrania a naše implementácie EJB. Aby boli použiteľné, budeme potrebovať aj kontajner na uchovanie a správu fazule.

2.1. Diaľkové rozhrania EJB

Začnime definíciou dvoch veľmi jednoduchých fazúľ - jednej bez štátnej príslušnosti a druhej stavovej.

Začneme ich rozhraniami:

@ Diaľkové verejné rozhranie HelloStatefulWorld {int howManyTimes (); Reťazec getHelloWorld (); } 
@ Vzdialené verejné rozhranie HelloStatelessWorld {String getHelloWorld (); }

2.2. Implementácia EJB

Teraz poďme implementovať naše vzdialené rozhrania EJB:

@Stateful (name = "HelloStatefulWorld") verejná trieda HelloStatefulWorldBean implementuje HelloStatefulWorld {private int howManyTimes = 0; public int howManyTimes () {návrat howManyTimes; } public String getHelloWorld () {howManyTimes ++; návrat "Hello Stateful World"; }} 
@Stateless (name = "HelloStatelessWorld") verejná trieda HelloStatelessWorldBean implementuje HelloStatelessWorld {public String getHelloWorld () {return "Hello Stateless World!"; }} 

Ak znejú štátne fazule a fazule bez štátnej príslušnosti neznáme, môže sa vám tento úvodný článok hodiť.

2.3. Kontajner EJB

Náš kód môžeme spustiť v ľubovoľnom kontajneri JEE, ale z praktických dôvodov použijeme Wildfly a náklad Doplnok Maven, ktorý za nás urobí ťažké zdvíhanie:

 org.codehaus.cargo cargo-maven2-plugin 1.6.1 wildfly10x //download.jboss.org/wildfly/10.1.0.Final/wildfly-10.1.0.Final.zip 127.0.0.1 samostatný-plný 9990 testUžívateľ: admin1234! 

2.4. Prevádzka EJB

S týmito nakonfigurovanými môžeme kontajner spustiť priamo z príkazového riadku Maven:

mvn čistý balík nákladu: spustiť -Pwildfly-samostatný

Teraz máme pracovnú inštanciu Wildfly, ktorá hostí naše fazule. Môžeme to potvrdiť pomocou riadkov denníka:

java: global / ejb-remote-for-spring / HelloStatefulWorld! com.baeldung.ejb.tutorial.HelloStatefulWorld java: app / ejb-remote-for-spring / HelloStatefulWorld! com.baeldung.ejb.tutorial.HelloStatefulWorld java: modul / HelloStatefulWorld! Com.baeldung.ejb.tutorial.HelloStatefulWorld java: jboss / exported / ejb-remote-for-spring / HelloStatefulWorld! Com.baeldung.ejb.tutorial.HelloStatefulWorld java: global / ejb-remote-for-spring / HelloStatefulWorld java : app / ejb-remote-for-spring / HelloStatefulWorld java: module / HelloStatefulWorld 
java: global / ejb-remote-for-spring / HelloStatelessWorld! com.baeldung.ejb.tutorial.HelloStatelessWorld java: app / ejb-remote-for-spring / HelloStatelessWorld! com.baeldung.ejb.tutorial.HelloStatelessWorld java: modul / HelloStatelessWorld! Com.baeldung.ejb.tutorial.HelloStatelessWorld java: jboss / exported / ejb-remote-for-spring / HelloStatelessWorld! Com.baeldung.ejb.tutorial.HelloStatelessWorld java: global / ejb-remote-for-spring / HelloStatelessWorld java : app / ejb-remote-for-spring / HelloStatelessWorld java: module / HelloStatelessWorld

3. Jarné nastavenie

Teraz, keď máme spustený náš kontajner JEE a nasadené naše EJB, môžeme spustiť našu jarnú aplikáciu. Použijeme jar-boot-web aby ste uľahčili ručné testovanie, ale pre vzdialené volanie to nie je povinné.

3.1. Maven závislosti

Aby sme sa mohli pripojiť k vzdialeným EJB, budeme potrebovať Klient EJB Wildfly knižnica a naše vzdialené rozhranie:

 org.wildfly wildfly-ejb-client-bom 10.1.0.Final pom com.baeldung.spring.ejb ejb-remote-for-spring 1.0.1 ejb 

Posledná verzia wildfly-ejb-client-bom nájdete tu.

3.2. Kontext pomenovania stratégie

S týmito závislosťami v triede, môžeme vytvoriť inštanciu a javax.naming.Context aby sme vyhľadali naše vzdialené fazule. Vytvoríme to ako jarnú fazuľu, aby sme ju mohli automaticky napájať, keď to potrebujeme:

@Bean public Context context () hodí NamingException {Vlastnosti jndiProps = nové Vlastnosti (); jndiProps.put ("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory"); jndiProps.put ("jboss.naming.client.ejb.context", pravda); jndiProps.put ("java.naming.provider.url", "http-remoting: // localhost: 8080"); vrátiť nový InitialContext (jndiProps); }

Vlastnosti sú potrebné informujte diaľkový ovládač URL a kontext stratégie pomenovania.

3.3. Vzor JNDI

Predtým, ako budeme môcť zapojiť naše vzdialené fazule do nádoby Spring, budeme musieť vedieť, ako sa k nim dostať. Na to použijeme ich väzby JNDI. Pozrime sa na štandardný vzor pre tieto väzby:

$ {appName} / $ {moduleName} / $ {differentName} / $ {beanName}! $ {viewClassName}

Majte na pamäti, že keďže sme nasadili jednoduchý jar namiesto ucho a výslovne sme nezadali meno, nemáme appName a a zreteľnýMeno. Ak sa vám zdá niečo zvláštne, v našom článku EJB Intro nájdete ďalšie podrobnosti.

Tento vzor použijeme na naviazanie našich vzdialených fazúľ na naše jarné.

3.4. Budovanie našej jarnej fazule

Na dosiahnutie našich EJB použijeme vyššie spomínané JNDI. Pamätáte si riadky denníka, ktoré sme používali na kontrolu, či boli nasadené naše podnikové fazule?

Tieto informácie sa teraz budú zobrazovať:

@Bean public HelloStatelessWorld helloStatelessWorld (kontextový kontext) hodí NamingException {return (HelloStatelessWorld) context.lookup (this.getFullName (HelloStatelessWorld.class)); } 
@Bean public HelloStatefulWorld helloStatefulWorld (kontextový kontext) hodí NamingException {return (HelloStatefulWorld) context.lookup (this.getFullName (HelloStatefulWorld.class)); } 
private String getFullName (Class classType) {String moduleName = "ejb-remote-for-spring /"; Reťazec beanName = classType.getSimpleName (); Reťazec viewClassName = classType.getName (); vrátiť moduleName + beanName + "!" + viewClassName; }

Musíme byť veľmi opatrní pri správnom plnom viazaní JNDI, alebo kontext nebude schopný dosiahnuť vzdialený EJB a vytvoriť potrebnú základnú infraštruktúru.

Majte na pamäti, že metóda vyhľadať od Kontext bude hádzať a NamingException v prípade, že nenájde fazuľu, ktorú požadujete.

4. Integrácia

Keď je všetko na svojom mieste, môžeme vstreknite naše fazule do ovládača, aby sme mohli vyskúšať, či je zapojenie v poriadku:

@RestController verejná trieda HomeEndpoint {// ... @GetMapping ("/ stateless") public String getStateless () {return helloStatelessWorld.getHelloWorld (); } @GetMapping ("/ stateful") public String getStateful () {return helloStatefulWorld.getHelloWorld () + "called" + helloStatefulWorld.howManyTimes () + "times"; }}

Poďme spustiť náš jarný server a skontrolovať nejaké protokoly. Uvidíme nasledujúci riadok, ktorý naznačuje, že je všetko v poriadku:

EJBCLIENT000013: Úspešné odovzdanie verzie bolo dokončené

Poďme teraz otestovať našu fazuľu bez štátnej príslušnosti. Niektoré môžeme vyskúšať zvlnenie príkazy na overenie, že fungujú podľa očakávania:

curl // localhost: 8081 / bez štátnej príslušnosti Dobrý deň, bez štátnej príslušnosti!

A skontrolujme náš stavový:

curl // localhost: 8081 / stateful Hello Stateful World called 1 times curl // localhost: 8081 / stateful Hello Stateful World called 2 times

5. Záver

V tomto článku sme sa naučili, ako integrovať Spring do EJB a uskutočňovať vzdialené volania do kontajnera JEE. Vytvorili sme dve vzdialené rozhrania EJB a transparentne sme mohli volať tých, ktorí používajú Spring Beans.

Aj keď je jar široko prijímaný, EJB sú stále populárne v podnikových prostrediach a v tomto rýchlom príklade sme si ukázali, že je možné využiť distribuované zisky Jakarty EE aj jednoduché použitie jarných aplikácií.

Ako vždy, kód nájdete na GitHub.


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