Tavaszi távirányítás RMI-vel

1. Áttekintés

Jáva Távoli módszer meghívása lehetővé teszi egy másikban lakó objektum meghívását Java virtuális gép. Ez egy jól bevált technológia, mégis kissé nehézkes használni, amint azt a témának szentelt hivatalos Oracle nyomvonalon láthatjuk.

Ebben a rövid cikkben megtudjuk, hogyan Tavaszi távirányítás lehetővé teszi a tőkeáttételt RMI könnyebben és tisztábban.

Ez a cikk kiegészíti a Tavaszi távirányítás. Az előző részletekben megtalálhatja a többi támogatott technológia részleteit: HTTP Invokers, JMS, AMQP, Hessian és Burlap.

2. Maven-függőségek

Ahogy az előző cikkekben tettük, fel fogunk állítani párat Tavaszi csizma alkalmazások: a távoli hívható objektumot kiszolgáló kiszolgáló és a kiszolgáltatott szolgáltatást meghívó kliens.

Minden amire szükségünk van a tavaszi kontextus tégely - így bármit felhasználhatunk Tavaszi csizma az általunk preferált segítő - mert fő célunk csak a fő könyvtárak elérhetősége.

Menjünk tovább a szokásos módon tavasz-boot-starter-web - ne felejtse el eltávolítani a Kandúr a beágyazott webszolgáltatás kizárásának függősége:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat 

3. Kiszolgáló alkalmazás

Elkezdjük deklarálni azt a kezelőfelületet, amely meghatározza a taxival történő utazás lefoglalására szolgáló szolgáltatást, amely végül ki lesz téve az ügyfeleknek:

nyilvános felület CabBookingService {Booking bookRide (String pickUpLocation) dobja a BookingException-t; }

Ezután definiálunk egy babot, amely megvalósítja az interfészt. Ez az a bab, amely valóban végrehajtja az üzleti logikát a kiszolgálón:

@Bean CabBookingService bookingService () {return new CabBookingServiceImpl (); }

Nyújtsuk tovább a Exportőr amely elérhetővé teszi a szolgáltatást az ügyfelek számára. Ebben az esetben a RmiServiceExporter:

@Bean RmiServiceExporter exportőr (CabBookingService implementáció) {Class serviceInterface = CabBookingService.class; RmiServiceExporter exportőr = új RmiServiceExporter (); exportőr.setServiceInterface (serviceInterface); exportőr.setService (megvalósítás); exportőr.setServiceName (serviceInterface.getSimpleName ()); exportőr.setRegistryPort (1099); visszatérő exportőr; }

Keresztül setServiceInterface () hivatkozást adunk arra a felületre, amelyet távolról hívhatóvá teszünk.

Meg kell adnunk egy hivatkozást arra az objektumra is, amely a metódust ténylegesen végrehajtja setService (). Ezután biztosíthatnánk a RMI nyilvántartás elérhető azon a gépen, ahol a szerver fut, ha nem akarjuk az alapértelmezett 1099 portot használni.

Be kell állítanunk egy szolgáltatásnevet is, amely lehetővé teszi a kiszolgált szolgáltatás azonosítását a RMI Iktató hivatal.

A megadott konfigurációval az ügyfél kapcsolatba léphet a CabBookingService a következő URL-címen: rmi: // HOST: 1199 / CabBookingService.

Indítsuk el végre a szervert. Még az RMI nyilvántartást sem kell magunknak indítanunk, mert Tavaszi ezt automatikusan elvégzi helyettünk, ha az ilyen nyilvántartás nem áll rendelkezésre.

4. Kliens alkalmazás

Írjuk meg most az ügyfélalkalmazást.

Elkezdjük deklarálni a RmiProxyFactoryBean ez létrehoz egy olyan babot, amelynek ugyanaz az interfésze van, amelyet a szerver oldalon futó szolgáltatás tesz ki, és amely átláthatóan továbbítja a kapott meghívásokat a kiszolgálóra:

@Bean RmiProxyFactoryBean szolgáltatás () {RmiProxyFactoryBean rmiProxyFactory = új RmiProxyFactoryBean (); rmiProxyFactory.setServiceUrl ("rmi: // localhost: 1099 / CabBookingService"); rmiProxyFactory.setServiceInterface (CabBookingService.class); visszatér rmiProxyFactory; }

Írjunk egy egyszerű kódot, amely elindítja az ügyfélalkalmazást, és az előző lépésben definiált proxyt használja:

public static void main (String [] args) dobja a BookingException {CabBookingService service = SpringApplication .run (RmiClient.class, args) .getBean (CabBookingService.class); Booking bookingOutcome = service .bookRide ("13 Seagate Blvd, Key Largo, FL 33037"); System.out.println (bookingOutcome); }

Most elegendő elindítani az ügyfelet annak ellenőrzésére, hogy a kiszolgáló által kitett szolgáltatást hívta-e meg.

5. Következtetés

Ebben az oktatóanyagban láttuk, hogyan használhatnánk Tavaszi távirányítás hogy megkönnyítse a használatát RMI ez különben unalmas feladatokat igényel, mint például egy nyilvántartás felépítése és a szolgáltatások meghatározása olyan interfészek használatával, amelyek jelentősen kihasználják az ellenőrzött kivételeket.

Szokás szerint a forrásokat a GitHubon találja meg.