Integrációs útmutató a tavaszhoz és az EJB-hez

1. Áttekintés

Ebben a cikkben megmutatjuk, hogyan kell a Spring és a távoli Enterprise Java Beans (EJB) integrálása.

Ehhez létrehozunk néhány EJB-t és a szükséges távoli interfészeket, majd futtatjuk őket egy JEE-tárolóban. Ezt követően elindítjuk a tavaszi alkalmazást, és a távoli interfészek használatával példányosítjuk babunkat, hogy távhívásokat hajthassanak végre.

Ha kétség merül fel azzal kapcsolatban, hogy mi az EJB vagy hogyan működnek, itt már publikáltunk egy bevezető cikket a témáról.

2. EJB beállítása

Létre kell hoznunk a távoli interfészeket és az EJB megvalósításokat. Ahhoz, hogy használhatók legyenek, szükségünk lesz egy konténerre is a bab tárolásához és kezeléséhez.

2.1. EJB távoli interfészek

Kezdjük két nagyon egyszerű bab meghatározásával - egy hontalan és egy állapotú.

Kezdjük a kezelőfelületeikkel:

@ Távoli nyilvános felület HelloStatefulWorld {int howManyTimes (); Karakterlánc getHelloWorld (); } 
@ Távoli nyilvános felület HelloStatelessWorld {String getHelloWorld (); }

2.2. EJB végrehajtása

Most valósítsuk meg távoli EJB interfészeinket:

@Stateful (name = "HelloStatefulWorld") nyilvános osztály A HelloStatefulWorldBean megvalósítja a HelloStatefulWorld {private int howManyTimes = 0; public int howManyTimes () {return howManyTimes; } public String getHelloWorld () {howManyTimes ++; visszatér a "Hello Stateful World"; }} 
@Stateless (name = "HelloStatelessWorld") public class HelloStatelessWorldBean megvalósítja a HelloStatelessWorld {public String getHelloWorld () {return "Hello Stateless World!"; }} 

Ha az államtalan és hontalan bab ismeretlenül hangzik, ez a bevezető cikk jól jöhet.

2.3. EJB konténer

Bármely JEE tárolóban futtathatjuk a kódunkat, de a praktikum érdekében a Wildfly és a szállítmány Maven plugin a nehéz emelésért:

 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 standalone-full 9990 testFelhasználó: admin1234! 

2.4. Az EJB-k működtetése

Ezekkel a konfigurációval futtathatjuk a tárolót közvetlenül a Maven parancssorból:

mvn tiszta csomag rakomány: futtassa -Pwildfly-önálló

Most már működik a Wildfly, amely a babjainkat tárolja. Ezt a napló sorokkal tudjuk megerősíteni:

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 / HelloStatefulWor : 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 / HelloStatelessWor : app / ejb-remote-for-spring / HelloStatelessWorld java: module / HelloStatelessWorld

3. Tavaszi beállítás

Most, hogy a JEE-tárolónk üzemel, és az EJB-k telepítve vannak, elindíthatjuk a tavaszi alkalmazást. Majd használjuk rugós-bakancs-háló a kézi tesztelés megkönnyítése érdekében, de a távoli híváshoz nem kötelező.

3.1. Maven-függőségek

A távoli EJB-hez való csatlakozáshoz szükségünk lesz a Wildfly EJB kliens könyvtár és távoli interfészünk:

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

Az utolsó verziója wildfly-ejb-client-bom itt található.

3.2. Stratégiai kontextus elnevezése

Ezekkel az osztályút függőségeivel megtehetjük példányosítani a javax.naming.Context hogy megkeressük a távoli babjainkat. Ezt tavaszi babként fogjuk létrehozni, hogy szükség esetén automatikusan beköltözzük:

A @Bean public Context context () dobja a NamingException {Properties jndiProps = new Properties (); jndiProps.put ("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory"); jndiProps.put ("jboss.naming.client.ejb.context", igaz); jndiProps.put ("java.naming.provider.url", "http-távoli: // localhost: 8080"); return new InitialContext (jndiProps); }

A tulajdonságok szükségesek ahhoz értesítse mind a távvezérlőt URL és a névadási stratégia összefüggései.

3.3. JNDI minta

Mielőtt a távoli babunkat bekötnénk a Spring konténerbe, tudnunk kell, hogyan érjük el őket. Ehhez a JNDI kötéseiket fogjuk használni. Lássuk ezeknek a kötéseknek a szokásos mintáját:

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

Tartsd észben, hogy, mivel bevetettünk egy egyszerű befőttes üveg an helyett fül és nem állítottunk be kifejezetten nevet, nincs App név és a különNév. További részletek találhatók az EJB Intro cikkünkben arra az esetre, ha valami furcsának tűnik.

Ezt a mintát arra használjuk, hogy távoli babjainkat a tavaszi babunkhoz kössük.

3.4. Tavaszi babunk építése

Az EJB-k eléréséhez a fent említett JNDI-t fogjuk használni. Emlékszik a naplósorokra, amelyekkel ellenőrizzük, hogy a vállalati babjaink telepítve voltak-e?

Látni fogjuk ezeket az információkat a használatban:

@Bean public HelloStatelessWorld helloStatelessWorld (Context context) dobja a NamingException {return (HelloStatelessWorld) context.lookup (this.getFullName (HelloStatelessWorld.class)); } 
@Bean public HelloStatefulWorld helloStatefulWorld (Context context) dobja a NamingException {return (HelloStatefulWorld) context.lookup (this.getFullName (HelloStatefulWorld.class)); } 
privát karakterlánc getFullName (Class classType) {String moduleName = "ejb-remote-for-spring /"; String beanName = classType.getSimpleName (); String viewClassName = classType.getName (); return moduleNév + babnév + "!" + viewClassName; }

Nagyon vigyáznunk kell a helyes teljes JNDI-kötésre, vagy a kontextus nem lesz képes elérni a távoli EJB-t és létrehozni a szükséges mögöttes infrastruktúrát.

Ne feledje, hogy a módszer Nézz fel tól től Kontextus dobni fog a NamingException ha nem találja meg a szükséges babot.

4. Integráció

Ha minden a helyén van, megtehetjük beadja a babunkat egy kontrollerbe, így tesztelhetjük, hogy a kábelezés megfelelő-e:

@RestController public class HomeEndpoint {// ... @GetMapping ("/ stateless") public String getStateless () {return helloStatelessWorld.getHelloWorld (); } @GetMapping ("/ stateful") public String getStateful () {return helloStatefulWorld.getHelloWorld () + "úgynevezett" + helloStatefulWorld.howManyTimes () + "times"; }}

Indítsuk el a Spring szervert és ellenőrizzünk néhány naplót. A következő sort látjuk, jelezve, hogy minden rendben van:

EJBCLIENT000013: Sikeres verzió kézfogás befejeződött

Most teszteljük hontalan babunkat. Kipróbálhatunk néhányat becsavar parancsok annak ellenőrzésére, hogy a várt módon működnek-e:

curl // localhost: 8081 / hontalan Hello Hontalan Világ!

És ellenőrizzük az állapotot:

curl // localhost: 8081 / stateful Hello Stateful World 1 alkalommal hívva curl // localhost: 8081 / stateful Hello Stateful World 2 alkalommal hívva

5. Következtetés

Ebben a cikkben megtanultuk, hogyan kell integrálni a Spring-et az EJB-be, és hogyan lehet távoli hívásokat kezdeményezni a JEE-tárolóba. Két távoli EJB interfészt hoztunk létre, és átlátható módon felhívhattuk a Spring Bean használókat.

Annak ellenére, hogy a tavaszt széles körben elfogadták, az EJB-k továbbra is népszerűek a vállalati környezetben, és ebben a gyors példában megmutattuk, hogy mind a Jakarta EE elosztott nyereségét, mind a Spring alkalmazások egyszerű használatát ki lehet használni.

Mint mindig, a kód megtalálható a GitHubon.