Sprievodca nastavením EJB

1. Prehľad

V tomto článku budeme diskutovať o tom, ako začať s vývojom Enterprise JavaBean (EJB).

Enterprise JavaBeans sa používajú na vývoj škálovateľných, distribuovaných komponentov na strane servera a zvyčajne zapuzdruje obchodnú logiku aplikácie.

Použijeme WildFly 10.1.0 ako preferované serverové riešenie však môžete slobodne použiť ľubovoľný aplikačný server Java Enterprise podľa vášho výberu.

2. Inštalácia

Začnime diskusiou o závislostiach Maven požadovaných pre vývoj EJB 3.2 a o tom, ako nakonfigurovať aplikačný server WildFly pomocou pluginu Maven Cargo alebo manuálne.

2.1. Maven závislosť

Aby bolo možné používať EJB 3.2, nezabudnite pridať najnovšiu verziu do priečinka závislosti časť vašej pom.xml spis:

 poskytnutý javax javaee-api 7.0 
Najnovšiu závislosť nájdete v úložisku Maven. Táto závislosť zaisťuje, že všetky API Java EE 7 sú dostupné počas kompilácie. The za predpokladu rozsah zaisťuje, že po nasadení bude závislosť poskytnutá kontajnerom, kde bola nasadená.

2.2. Nastavenie WildFly s Maven Cargo

Poďme si povedať, ako použiť doplnok Maven Cargo na nastavenie servera.

Tu je kód pre profil Maven, ktorý zaisťuje server WildFly:

 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 testUžívateľ: admin1234! 

Plugin používame na stiahnutie súboru WildFly 10.1 zip priamo z webových stránok WildFly. Ktorá sa potom nakonfiguruje a uistí sa, že meno hosťa je 127.0.0.1 a nastavenie portu na 9990.

Potom vytvoríme testovacieho používateľa pomocou cargo.servlet.users vlastnosť s ID používateľa testUser a heslo admin1234 !.

Teraz, keď je konfigurácia doplnku dokončená, by sme mali byť schopní zavolať cieľ Maven a nechať server stiahnuť, nainštalovať, spustiť a nasadiť aplikáciu.

Ak to chcete urobiť, prejdite na ikonu ejb-remote adresár a spustite nasledujúci príkaz:

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

Pri prvom spustení tohto príkazu stiahne súbor zip WildFly 10.1, extrahuje ho a vykoná inštaláciu a potom ju spustí. Pridá tiež vyššie uvedeného testovacieho používateľa. Ďalšie vykonanie nespustí súbor zip znova.

2.3. Ručné nastavenie WildFly

Ak chcete nastaviť WildFly manuálne, musíte si stiahnuť inštalačný súbor zip sami z webových stránok wildfly.org. Nasledujúce kroky poskytujú podrobný pohľad na proces nastavenia servera WildFly:

Po stiahnutí a rozbalení obsahu súboru na miesto, kam chcete nainštalovať server, nakonfigurujte nasledujúce premenné prostredia:

JBOSS_HOME = / Users / $ USER /../ wildfly.x.x.Final JAVA_HOME = `/ usr / libexec / java_home -v 1,8`

Potom v kôš adresár, spustite ./standalone.sh pre operačné systémy založené na Linuxe alebo ./standalone.bat pre Windows.

Potom budete musieť pridať používateľa. Tento používateľ sa použije na pripojenie k vzdialenej fazuli EJB. Ak chcete zistiť, ako pridať používateľa, mali by ste si prečítať dokumentáciu „pridať používateľa“.

Podrobné pokyny na nastavenie nájdete v dokumentácii Začíname spoločnosti WildFly.

Projekt POM bol nakonfigurovaný na prácu s doplnkom Cargo a manuálnou konfiguráciou servera nastavením dvoch profilov. Predvolene je vybratý doplnok Cargo. Ak však chcete nasadiť aplikáciu na už nainštalovaný, nakonfigurovaný a spustený server Wildfly, vykonajte v systéme Windows nasledujúci príkaz ejb-remote adresár:

mvn clean install wildfly: nasadiť -Pwildfly-runtime

3. Diaľkové vs Miestne

Obchodné rozhranie pre fazuľu môže byť buď miestne alebo diaľkový.

A @ Miestne k anotovanej fazuli je prístup, iba ak je v tej istej aplikácii ako fazuľa, ktorá vyvoláva, t. j. ak má bydlisko v rovnakom .ear alebo .vojna.

A @ Remote k anotovanej fazuli je možné pristupovať z inej aplikácie, t. j. aplikácie s bydliskom v inej JVM alebo aplikačný server.

Pri navrhovaní riešenia, ktoré obsahuje EJB, musíte mať na pamäti niekoľko dôležitých bodov:

  • The java.io. Serializovateľné, java.io.Externalizable a rozhrania definované v javax.ejb balík je vždy vylúčený, keď je fazuľa deklarovaná s @ Miestne alebo @ Remote
  • Ak je trieda fazule vzdialená, musia byť vzdialené všetky implementované rozhrania
  • Ak trieda fazule neobsahuje žiadnu anotáciu alebo ak @ Miestne anotácia je špecifikovaná, potom sa predpokladá, že všetky implementované rozhrania sú lokálne
  • Každé rozhranie, ktoré je výslovne definované pre fazuľu, ktorá neobsahuje žiadne rozhranie, musí byť deklarované ako @ Miestne
  • Vydanie EJB 3.2 má tendenciu poskytovať väčšiu granularitu pre situácie, keď je potrebné výslovne definovať miestne a vzdialené rozhrania

4. Vytvorenie Diaľkové EJB

Najprv si vytvoríme rozhranie fazule a nazvime ju HelloWorld:

@ Vzdialené verejné rozhranie HelloWorld {String getHelloWorld (); }

Teraz implementujeme vyššie uvedené rozhranie a pomenujeme konkrétnu implementáciu HelloWorldBean:

@Stateless (name = "HelloWorld") verejná trieda HelloWorldBean implementuje HelloWorld {@Resource súkromný kontext SessionContext; @Override public String getHelloWorld () {návrat "Vitajte na výučbe EJB!"; }}

Všimnite si @Bezstavový anotácia k deklarácii triedy. Znamená to, že tento fazuľa je fazuľa bez štátnej príslušnosti. Tento druh fazule nemá žiadny priradený stav klienta, ale môže si zachovať svoj inštančný stav a zvyčajne sa používa na vykonávanie nezávislých operácií.

The @ Zdroj anotácia vloží kontext relácie do vzdialeného objektu bean.

The SessionContext rozhranie poskytuje prístup k kontextu relácie za behu, ktorý kontajner poskytuje pre inštanciu bean relácie. Kontajner potom prechádza cez SessionContext rozhranie k inštancii po vytvorení inštancie. Kontext relácie zostáva počas celej svojej životnosti spojený s danou inštanciou.

Kontajner EJB normálne vytvára skupinu objektov bezstavovej fazule a používa tieto objekty na spracovanie požiadaviek klientov. V dôsledku tohto mechanizmu združovania nie je zaručené, že sa budú udržiavať hodnoty inštančných premenných počas volaní metód vyhľadávania.

5. Diaľkové nastavenie

V tejto časti si rozoberieme, ako nastaviť Maven na zostavenie a spustenie aplikácie na serveri.

Pozrime sa postupne na jednotlivé doplnky.

5.1. Doplnok EJB

Nižšie uvedený doplnok EJB sa používa na zabalenie modulu EJB. Verziu EJB sme určili ako 3.2.

Na nastavenie cieľového JAR pre fazuľu sa používa nasledujúca konfigurácia doplnku:

 maven-ejb-plugin 2.4 3.2 

5.2. Rozmiestnite Remote EJB

Ak chcete nasadiť fazuľu na server WildFly, skontrolujte, či je server funkčný.

Potom, aby sme vykonali vzdialené nastavenie, budeme musieť spustiť nasledujúce Maven príkazy proti súboru pom v ejb-remote projekt:

mvn čistá inštalácia 

Potom by sme mali spustiť:

mvn wildfly: nasadiť

Prípadne ho môžeme nasadiť manuálne ako admin z administrátorskej konzoly aplikačného servera.

6. Nastavenie klienta

Po vytvorení vzdialenej fazule by sme mali nasadenú fazuľu otestovať vytvorením klienta.

Najskôr si povieme niečo o nastavení Maven pre projekt klienta.

6.1. Nastavenie Maven na strane klienta

Aby sme mohli spustiť klienta EJB3, musíme pridať nasledujúce závislosti:

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

Pri prevádzke klienta sme závislí na vzdialených obchodných rozhraniach EJB tejto aplikácie. Musíme teda určiť závislosť JAR klienta EJB. V nadradenom pom sme pridali nasledovné:

 com.baeldung.ejb ejb-remote ejb 

The je špecifikovaný ako odložiť.

6.2. Prístup k Remote Bean

Musíme vytvoriť súbor pod src / main / resources a pomenuj to jboss-ejb-client.properties ktorá bude obsahovať všetky vlastnosti, ktoré sú potrebné na prístup k nasadenému fazule:

remote.connections = predvolené 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 = 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. Vytvorenie klienta

Trieda, ktorá bude mať prístup k diaľkovému ovládaniu a bude ho používať HelloWorld fazuľa bola vytvorená v EJBClient.java ktorý je v com.baeldung.ejb.client balíček.

7.1 Adresa URL vzdialenej fazule

Vzdialená fazuľa je umiestnená prostredníctvom adresy URL, ktorá je v nasledujúcom formáte:

ejb: $ {appName} / $ {moduleName} / $ {differentName} / $ {beanName}! $ {viewClassName}
  • The $ {appName} je názov aplikácie nasadenia. Tu sme nepoužili žiadny súbor EAR, ale jednoduché nasadenie JAR alebo WAR, takže názov aplikácie bude prázdny
  • The $ {moduleName} je názov, ktorý sme si nastavili pre naše nasadenie skôr, tak to je ejb-remote
  • The $ {zreteľnýMeno} je špecifický názov, ktorý možno voliteľne priradiť k nasadeniam, ktoré sú nasadené na serveri. Ak sa nasadenie nepoužíva zreteľné meno potom môžeme v názve JNDI použiť prázdny reťazec pre zreteľné meno, ako sme to urobili v našom príklade
  • The $ {beanName} premenná je jednoduchý názov implementačnej triedy EJB, takže v našom príklade je HelloWorld
  • $ {viewClassName} označuje úplný názov vzdialeného rozhrania

7.2 Logika vyhľadávania

Ďalej sa pozrime na našu jednoduchú logiku vyhľadávania:

public HelloWorld lookup () hodí NamingException {String appName = ""; Reťazec moduleName = "remote"; Reťazec differentName = ""; Reťazec beanName = "HelloWorld"; Reťazec viewClassName = HelloWorld.class.getName (); String toLookup = String.format ("ejb:% s /% s /% s /% s!% S", appName, moduleName, differentName, beanName, viewClassName); návrat (HelloWorld) context.lookup (toLookup); }

Aby bolo možné pripojiť sa k fazuľa práve sme vytvorili, budeme potrebovať adresu URL, ktorú môžeme vložiť do kontextu.

7.3 Počiatočný kontext

Teraz vytvoríme / inicializujeme kontext relácie:

public void createInitialContext () hodí 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 [CHYBA] 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); }

Na pripojenie k vzdialenej fazuli potrebujeme kontext JNDI. Kontextovú továreň poskytuje artefakt Maven org.jboss: jboss-remote-pomenovanie a tým sa vytvorí kontext JNDI, ktorý vyrieši adresu URL skonštruovanú v vyhľadať metódou na proxy servera procesu vzdialeného aplikačného servera.

7.4 Definujte parametre vyhľadávania

Továrnu triedu definujeme parametrom Context.INITIAL_CONTEXT_FACTORY.

The Kontext.URL_PKG_PREFIXES sa používa na definovanie balíka, ktorý má vyhľadávať ďalší kontext pomenovania.

Parameter org.jboss.ejb.client.scoped.context = false povie kontextu, aby čítal parametre pripojenia (napríklad hostiteľa pripojenia a port) z poskytnutej mapy namiesto z konfiguračného súboru triedy. To je obzvlášť užitočné, ak chceme vytvoriť zväzok JAR, ktorý by mal byť schopný pripojiť sa k rôznym hostiteľom.

Parameter Kontext.PROVIDER_URL definuje schému pripojenia a mala by začínať na http-remoting: //.

8. Testovanie

Ak chcete otestovať nasadenie a skontrolovať nastavenie, môžeme spustiť nasledujúci test, aby sme sa ubezpečili, že všetko funguje správne:

@Test public void testEJBClient () {EJBClient ejbClient = nový EJBClient (); HelloWorldBean bean = nový HelloWorldBean (); assertEquals (bean.getHelloWorld (), ejbClient.getEJBRemoteMessage ()); }

Po absolvovaní testu si teraz môžeme byť istí, že všetko funguje podľa očakávaní.

9. Záver

Takže sme vytvorili server EJB a klienta, ktorý vyvoláva metódu na vzdialenom EJB. Projekt je možné spustiť na ľubovoľnom aplikačnom serveri správnym pridaním závislostí pre tento server.

Celý projekt nájdete na GitHub.


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