Útmutató az EJB beállításához

1. Áttekintés

Ebben a cikkben megvitatjuk, hogyan lehet elindítani az Enterprise JavaBean (EJB) fejlesztést.

Az Enterprise JavaBeans méretezhető, elosztott, szerveroldali összetevők fejlesztésére szolgál és jellemzően az alkalmazás üzleti logikáját foglalja magában.

Majd használjuk WildFly 10.1.0 előnyben részesített kiszolgálói megoldásunkként azonban szabadon használhat tetszőleges Java Enterprise alkalmazásszervert.

2. Beállítás

Kezdjük azzal, hogy megvitatjuk az EJB 3.2 fejlesztéshez szükséges Maven-függőségeket, valamint a WildFly alkalmazáskiszolgáló konfigurálását a Maven Cargo plugin vagy manuálisan.

2.1. Maven-függőség

Az EJB használatához 3.2, feltétlenül adja hozzá a legújabb verziót a függőségek szakasza pom.xml fájl:

 javax javaee-api 7.0 biztosított 
A legújabb függőséget a Maven tárházban találja meg. Ez a függőség biztosítja, hogy az összes Java EE 7 API elérhető legyen a fordítás ideje alatt. A biztosítani A hatókör biztosítja, hogy a telepítést követően a függőséget a tároló fogja biztosítani, ahová telepítették.

2.2. WildFly telepítés Maven Cargo-val

Beszéljünk arról, hogyan használhatjuk a Maven Cargo plugint a szerver beállításához.

A WildFly kiszolgálót kiszolgáló Maven profil kódja:

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

A plugint használjuk a WildFly 10.1 zip közvetlenül a WildFly weboldaláról. Ami ezután konfigurálva van, biztosítva, hogy a hostname van 127.0.0.1 és a portot 9990-re állítva.

Ezután létrehozunk egy tesztfelhasználót a cargo.servlet.users tulajdonság, a felhasználói azonosítóval testUser és a jelszót admin1234 !.

Most, hogy a plugin konfigurálása befejeződött, képesnek kell lennünk felhívni egy Maven célpontot, és a szerver letöltését, telepítését, elindítását és az alkalmazás telepítését kell elvégeznünk.

Ehhez keresse meg a ejb-távoli könyvtárat, és futtassa a következő parancsot:

mvn tiszta csomag rakomány: fuss

A parancs első futtatásakor letölti a WildFly 10.1 zip fájlt, kibontja és végrehajtja a telepítést, majd elindítja. Hozzáadja a fentiekben tárgyalt tesztfelhasználót is. A további végrehajtások nem töltik le újra a zip fájlt.

2.3. A WildFly kézi beállítása

A WildFly kézi beállításához magának le kell töltenie a telepítő ZIP fájlt a wildfly.org webhelyről. A következő lépések a WildFly szerver telepítési folyamatának magas szintű nézete:

Miután letöltötte és kibontotta a fájl tartalmát a kiszolgáló telepítésének helyére, konfigurálja a következő környezeti változókat:

JBOSS_HOME = / Felhasználók / $ USER /../ wildfly.x.x.Final JAVA_HOME = "/ usr / libexec / java_home -v 1.8"

Aztán a kuka könyvtár, futtassa a ./standalone.sh Linux alapú operációs rendszerek vagy ./standalone.bat Windows-hoz.

Ezt követően hozzá kell adnia egy felhasználót. Ezt a felhasználót fogják használni a távoli EJB babhoz való kapcsolódáshoz. A felhasználó hozzáadásának megismeréséhez olvassa el a „Felhasználó hozzáadása” dokumentációt.

A részletes telepítési utasításokat a WildFly Kezdő lépések dokumentációjában találja.

A projekt POM úgy lett konfigurálva, hogy két profillal állítsa be a Cargo plugint és a kézi szerver konfigurációt. Alapértelmezés szerint a Cargo plugin van kiválasztva. Az alkalmazás telepítéséhez azonban egy már telepített, konfigurált és futó Wildfly kiszolgálóra hajtsa végre a következő parancsot a ejb-távoli Könyvtár:

mvn clean install wildfly: install -Pwildfly-runtime

3. Távoli vs. Helyi

A bab üzleti felülete bármelyik lehet helyi vagy távoli.

A @Helyi a feljegyzett bab csak akkor érhető el, ha ugyanabban az alkalmazásban van, mint a meghívást kezdeményező bab, vagyis ha ugyanazon a helyen találhatók .fül vagy .háború.

A @Távoli a jegyzetekkel ellátott bab más alkalmazásból, azaz egy másikban lakó alkalmazásból érhető el JVM vagy alkalmazásszerver.

Néhány fontos szempontot érdemes szem előtt tartani az EJB-ket tartalmazó megoldás megtervezésekor:

  • A java.io.Serializálható, java.io.Externalizálható és az interfészek által meghatározott javax.ejb A csomagot mindig kizárjuk, ha egy babot deklarálunk @Helyi vagy @Távoli
  • Ha egy bab osztály távoli, akkor az összes megvalósított interfésznek távolinak kell lennie
  • Ha egy bab osztály nem tartalmaz megjegyzéseket, vagy ha a @Helyi megjegyzés van megadva, akkor az összes megvalósított interfészt feltételezzük lokálisnak
  • Minden olyan interfészt, amelyet kifejezetten definiáltunk egy bab számára, és amely nem tartalmaz interfészt, a következőként kell deklarálni @Helyi
  • Az EJB 3.2 kiadás általában részletesebbé teszi azokat a helyzeteket, amikor a helyi és távoli interfészeket kifejezetten meg kell határozni

4. A. Létrehozása Távoli EJB

Először hozzuk létre a bab felületét és hívjuk meg Helló Világ:

@ Távoli nyilvános felület HelloWorld {String getHelloWorld (); }

Most megvalósítjuk a fenti felületet és megnevezzük a konkrét megvalósítást HelloWorldBean:

@Stateless (name = "HelloWorld") public class HelloWorldBean megvalósítja a HelloWorld {@Resource privát SessionContext kontextust; @Orride public String getHelloWorld () {return "Welcome to EJB Tutorial!"; }}

Vegye figyelembe a @ Állam nélküli jegyzet az osztálynyilatkozaton. Jelzi, hogy ez a bab hontalan munkabab. Ennek a fajta babnak nincs társított kliensállapota, de megőrizheti példányállapotát, és általában független műveletek elvégzésére használják.

A @Forrás az annotáció a munkamenet kontextust injektálja a távoli babba.

A SessionContext Az interfész hozzáférést biztosít a futásidejű munkamenet-kontextushoz, amelyet a tároló a munkamenet-bab példány számára biztosít. A konténer ezután elhalad a SessionContext interfész egy példányhoz a példány létrehozása után. A munkamenet-kontextus az élettartama alatt is kapcsolatban marad az adott példánnyal.

Az EJB-tároló általában hontalan babobjektumokat hoz létre, és ezeket az objektumokat használja az ügyfélkérelmek feldolgozására. Ennek az összevonási mechanizmusnak az eredményeként a példányváltozó értékek garantálása nem garantált a keresési módszer hívásai során.

5. Távoli beállítás

Ebben a szakaszban megvitatjuk, hogyan állítsuk be a Mavent az alkalmazás felépítésére és futtatására a kiszolgálón.

Nézzük meg egyesével a bővítményeket.

5.1. Az EJB bővítmény

Az alább megadott EJB plugint egy EJB modul csomagolására használják. Az EJB verziót 3.2-nek adtuk meg.

A következő plugin-konfigurációval lehet beállítani a bab cél JAR-ját:

 maven-ejb-plugin 2.4 3.2 

5.2. Telepítse a távoli EJB-t

A bab telepítéséhez egy WildFly kiszolgálón győződjön meg arról, hogy a kiszolgáló működik és működik.

Ezután a távoli beállítás végrehajtásához a következő Maven parancsokat kell futtatnunk a ejb-távoli projekt:

mvn tiszta telepítés 

Akkor futnunk kellene:

mvn wildfly: bevetni

Alternatív megoldásként manuálisan is telepíthetjük admin felhasználó az alkalmazáskiszolgáló adminisztrációs konzoljáról.

6. Kliens beállítása

A távoli komponens létrehozása után tesztelni kell a telepített babot kliens létrehozásával.

Először beszéljük meg a kliens projekt Maven beállítását.

6.1. Ügyféloldali Maven beállítása

Az EJB3 kliens elindításához a következő függőségeket kell hozzáadnunk:

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

Ennek az alkalmazásnak az EJB távoli üzleti felületeitől függünk az ügyfél futtatásában. Tehát meg kell adnunk az EJB kliens JAR függőségét. A következőt adjuk a szülő pom-ba:

 com.baeldung.ejb ejb-remote ejb 

A van megadva ejb.

6.2. Hozzáférés a Távoli babhoz

A fájl alatt létre kell hoznunk egy fájlt src / main / resources és nevezze meg jboss-ejb-kliens.tulajdonságok amely tartalmazza a telepített bab eléréséhez szükséges összes tulajdonságot:

remote.connections = alapértelmezett remote.connection.default.host = 127.0.0.1 remote.connection.default.port = 8080 remote.connection.default.connect.options.org.xnio.Options .SASL_POLICY_NOANONYMOUS = false remote.connection.default. connect.options.org.xnio.Options .SASL_POLICY_NOPLAINTEXT = hamis remote.connection.default.connect.options.org.xnio.Options .SASL_DISALLOWED_MECHANISMS = $ {host.auth: JBOSS-LOCAL-USER.defájl} remote.connus = testUser remote.connection.default.password = admin1234! 

7. Az Ügyfél létrehozása

Az osztály, amely hozzáférni fog a távvezérlőhöz és használni fogja azt Helló Világ bab jött létre EJBClient.java ami a com.baeldung.ejb.client csomag.

7.1 Távoli bab URL

A távoli bab egy URL-címen található, amely megfelel a következő formátumnak:

ejb: $ {appName} / $ {moduleName} / $ {differentName} / $ {beanName}! $ {viewClassName}
  • A $ {appName} a telepítés alkalmazás neve. Itt nem EAR fájlt használtunk, hanem egyszerű JAR vagy WAR telepítést, ezért az alkalmazás neve üres lesz
  • A $ {moduleName} az a név, amelyet korábban beállítottunk a telepítéshez, így van ejb-távoli
  • A $ {differentName} egy speciális név, amely opcionálisan hozzárendelhető a kiszolgálón telepített központi telepítésekhez. Ha egy központi telepítés nem használható megkülönböztető név akkor használhatunk egy üres karakterláncot a JNDI névben, a megkülönböztető név, ahogy a példánkban tettük
  • A $ {beanName} változó az EJB megvalósítási osztályának egyszerű neve, így a példánkban ez Helló Világ
  • $ {viewClassName} a távoli interfész teljesen minősített interfésznevét jelöli

7.2 Keresési logika

Ezután vessünk egy pillantást egyszerű keresési logikánkra:

public HelloWorld lookup () dobja a NamingException {String appName = ""; String moduleName = "távoli"; Karakterlánc különNév = ""; String beanName = "HelloWorld"; String viewClassName = HelloWorld.class.getName (); String toLookup = String.format ("ejb:% s /% s /% s /% s!% S", alkalmazásnév, modulNév, különNév, babnév, viewClassName); return (HelloWorld) context.lookup (toLookup); }

Annak érdekében, hogy csatlakozzon a bab most hoztunk létre, szükségünk lesz egy URL-re, amelyet betáplálhatunk a kontextusba.

7.3 Kezdeti kontextus

Most létrehozzuk / inicializáljuk a munkamenet környezetét:

public void createInitialContext () dobja a NamingException {Properties prop = new Properties (); 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", hamis); context = new InitialContext (prop); }

A távoli babhoz való csatlakozáshoz JNDI-kontextusra van szükségünk. A kontextusgyárat a Maven-műtárgy biztosítja org.jboss: jboss-távoli elnevezés és ez létrehoz egy JNDI kontextust, amely megoldja a Nézz fel módszerrel, a távoli alkalmazáskiszolgáló folyamat proxybe.

7.4 Határozza meg a keresési paramétereket

A paraméterrel definiáljuk a gyári osztályt Környezet.INITIAL_CONTEXT_FACTORY.

A Környezet.URL_PKG_PREFIXES arra szolgál, hogy meghatározzon egy csomagot további elnevezési kontextus keresésére.

A paraméter org.jboss.ejb.client.scoped.context = hamis utasítja a kontextust, hogy olvassa el a csatlakozási paramétereket (például a kapcsolat gazdagépét és a portot) a megadott térképről, az osztályútvonal konfigurációs fájl helyett. Ez különösen akkor hasznos, ha létre akarunk hozni egy JAR csomagot, amelynek képesnek kell lennie a különböző gazdagépekhez való csatlakozásra.

A paraméter Kontextus.PROVIDER_URL meghatározza a kapcsolódási sémát, és ezzel kell kezdődnie http-távoli: //.

8. Tesztelés

A telepítés teszteléséhez és a telepítés ellenőrzéséhez a következő tesztet futtathatjuk, hogy megbizonyosodjunk arról, hogy minden megfelelően működik:

@Test public void testEJBClient () {EJBClient ejbClient = new EJBClient (); HelloWorldBean bab = új HelloWorldBean (); assertEquals (bean.getHelloWorld (), ejbClient.getEJBRemoteMessage ()); }

A teszt sikeres teljesítésével most biztosak lehetünk abban, hogy minden a várt módon működik.

9. Következtetés

Ezért létrehoztunk egy EJB szervert és egy klienst, amely metódust hív meg egy távoli EJB-n. A projekt bármely alkalmazáskiszolgálón futtatható az adott kiszolgáló függőségeinek megfelelő hozzáadásával.

A teljes projekt megtalálható a GitHub-on.