Integracijski vodič za proljeće i EJB

1. Pregled

U ovom ćemo članku pokazati kako to učiniti integrirati Spring i udaljeni Enterprise Java Beans (EJB).

Da bismo to učinili, stvorit ćemo neke EJB-ove i potrebna udaljena sučelja, a zatim ćemo ih pokrenuti unutar JEE spremnika. Nakon toga pokrenut ćemo našu aplikaciju Spring i pomoću udaljenih sučelja instancirati grah kako bi mogli izvršavati udaljene pozive.

Ako postoji sumnja u to što su EJB-ovi ili kako oni funkcioniraju, ovdje smo već objavili uvodni članak o toj temi.

2. Postavljanje EJB-a

Trebat ćemo stvoriti naša udaljena sučelja i naše EJB implementacije. Da bi bili korisni, trebat će nam i spremnik za držanje graha i upravljanje grahom.

2.1. EJB udaljena sučelja

Počnimo s definiranjem dva vrlo jednostavna zrna - jednog bez državljanstva i jednog bez državljanstva.

Započet ćemo s njihovim sučeljima:

@Udaljeno javno sučelje HelloStatefulWorld {int howManyTimes (); String getHelloWorld (); } 
@Udaljeno javno sučelje HelloStatelessWorld {String getHelloWorld (); }

2.2. Provedba EJB-a

Sada, implementiramo naša udaljena EJB sučelja:

@Stateful (name = "HelloStatefulWorld") javna klasa HelloStatefulWorldBean implementira HelloStatefulWorld {private int howManyTimes = 0; javni int howManyTimes () {povratak howManyTimes; } javni String getHelloWorld () {howManyTimes ++; povratak "Hello Stateful World"; }} 
@Stateless (name = "HelloStatelessWorld") javna klasa HelloStatelessWorldBean implementira HelloStatelessWorld {javni niz getHelloWorld () {return "Hello World bez državljanstva!"; }} 

Ako grah bez državljanstva i države bez državljanstva zvuči nepoznato, ovaj uvodni članak može vam dobro doći.

2.3. EJB spremnik

Naš kôd možemo pokrenuti u bilo kojem JEE spremniku, ali iz praktičnih razloga koristit ćemo Wildfly i teret Maven dodatak za nas diže težak teret:

 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 samostalni-puni 9990 testUser: admin1234! 

2.4. Pokretanje EJB-ova

S ovim konfiguriranim, možemo pokrenuti spremnik izravno iz naredbenog retka Maven:

mvn čist paket tereta: run -Pwildfly-standalone

Sada imamo radnu instancu Wildflya koji gosti naš grah. To možemo potvrditi redovima dnevnika:

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: module / 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: module / 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. Postavljanje opruge

Sad kad smo pokrenuli i pokrenuli svoj JEE spremnik i postavili svoje EJB-ove, možemo pokrenuti našu Spring aplikaciju. Koristit ćemo proljeće-čizma-web da biste olakšali ručno testiranje, ali nije obavezno za daljinski poziv.

3.1. Ovisnosti Mavena

Da bismo se mogli povezati s udaljenim EJB-ovima, trebat će nam Klijent Wildfly EJB knjižnica i naše udaljeno sučelje:

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

Posljednja verzija wildfly-ejb-klijent-bom možete pronaći ovdje.

3.2. Kontekst strategije imenovanja

S ovim ovisnostima u putu predavanja možemo instancirati a javax.naming.Kontekst potražiti naš udaljeni grah. Stvorit ćemo ovo kao proljetni grah kako bismo ga mogli automatski povezati kad zatreba:

@Bean public Context context () baca NamingException {Properties jndiProps = new Properties (); jndiProps.put ("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory"); jndiProps.put ("jboss.naming.client.ejb.context", točno); jndiProps.put ("java.naming.provider.url", "http-remoting: // localhost: 8080"); vrati novi InitialContext (jndiProps); }

Svojstva su neophodna za obavijesti oba daljinska URL i kontekst strategije imenovanja.

3.3. JNDI obrazac

Prije nego što uspijemo povezati naš udaljeni grah unutar proljetnog spremnika, morat ćemo znati kako doći do njega. Za to ćemo upotrijebiti njihove JNDI veze. Pogledajmo standardni uzorak za ove veze:

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

Imajte na umu da, budući da smo rasporedili jednostavan staklenka umjesto uho i nismo izričito postavili ime, mi nemamo appName i a različitoName. Više detalja nalazi se u našem članku EJB Intro u slučaju da se nešto čini neobičnim.

Upotrijebit ćemo ovaj obrazac za vezanje udaljenog graha s proljetnim.

3.4. Gradimo naš proljetni grah

Da bismo došli do naših EJB-a, upotrijebit ćemo gore spomenuti JNDI. Sjećate se redova dnevnika pomoću kojih smo provjeravali je li ugrađen naš grah za poduzeća?

Sad ćemo vidjeti te podatke u upotrebi:

@Bean public HelloStatelessWorld helloStatelessWorld (Context context) baca NamingException {return (HelloStatelessWorld) context.lookup (this.getFullName (HelloStatelessWorld.class)); } 
@Bean public HelloStatefulWorld helloStatefulWorld (Context context) baca NamingException {return (HelloStatefulWorld) context.lookup (this.getFullName (HelloStatefulWorld.class)); } 
privatni niz getFullName (klasa classType) {StringNameName = "ejb-remote-for-spring /"; Niz ime graha = classType.getSimpleName (); Niz pogledaClassName = classType.getName (); povratakName modula + Ime graha + "!" + viewClassName; }

Moramo biti vrlo oprezni oko ispravnog cjelovitog JNDI vezanja, ili kontekst neće moći doći do udaljenog EJB-a i stvoriti potrebnu temeljnu infrastrukturu.

Imajte na umu da metoda Pogledaj iz Kontekst bacit će a NamingException u slučaju da ne pronađe grah koji vam je potreban.

4. Integracija

Sa svime na svom mjestu možemo ubrizgajte naš grah u kontroler, tako da možemo testirati je li ožičenje ispravno:

@RestController javna klasa HomeEndpoint {// ... @GetMapping ("/ stateless") javni niz getStateless () {return helloStatelessWorld.getHelloWorld (); } @GetMapping ("/ stateful") javni niz getStateful () {return helloStatefulWorld.getHelloWorld () + "pozvan" + helloStatefulWorld.howManyTimes () + "puta"; }}

Pokrenimo naš Spring server i provjerimo neke zapisnike. Vidjet ćemo sljedeći redak koji označava da je sve u redu:

EJBCLIENT000013: Dovršeno uspješno rukovanje verzije

Ajmo sada testirati naš grah bez državljanstva. Možemo probati neke kovrča naredbe za potvrdu da rade prema očekivanjima:

curl // localhost: 8081 / apatrid Hello World bez državljanstva!

I provjerimo našu državnu:

curl // localhost: 8081 / stateful Hello Stateful World pozvan 1 puta curl // localhost: 8081 / stateful Hello Stateful World pozvan 2 puta

5. Zaključak

U ovom smo članku naučili kako integrirati Spring u EJB i uputiti udaljene pozive u spremnik JEE. Izradili smo dva udaljena EJB sučelja i mogli smo nazvati one koji koriste Spring Beans na transparentan način.

Iako je Spring općenito prihvaćen, EJB-ovi su i dalje popularni u poslovnim okruženjima, a u ovom brzom primjeru pokazali smo da je moguće iskoristiti i distribuirani dobitak Jakarte EE i jednostavnost upotrebe Spring aplikacija.

Kao i uvijek, kod se može pronaći na GitHub-u.


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